[cairo] [PATCH] Fix _cairo_region_get_boxes usage
Soeren Sandmann
sandmann at daimi.au.dk
Sun Feb 15 00:01:06 PST 2009
Jeff Muizelaar <jeff at infidigm.net> writes:
> Chris,
>
> The attached patch fixes some issues with callers of
> _cairo_region_get_boxes. The new api seems a little bit difficult to
> use and I'm wondering if we can fix it at all? Though I don't really have any
> ideas or know if it's worth it. Thoughts?
As far as I can tell, all code that uses the get_boxes() interface do
so because they want to iterate through the boxes once and do
something with each. None of them actually store the array
anywhere. So how about adding a:
_cairo_region_get_box (cairo_region_t *region,
int nth_box,
cairo_int_box_t *box)
to allow callers to do:
n_boxes = cairo_region_num_boxes (region);
for (i = 0; i < n_boxes; ++i)
{
cairo_int_box_t box;
cairo_region_get_box (region, i, &box);
<do something with box>
}
That completely avoids memory allocation while making the interface
much simpler.
(For extra efficiency the get_box() call could return a pointer to a
const box. That would avoid the copying, but introduce an unpleasant
dependency on the region's lifetime, so it's probably not worth it).
Soren
More information about the cairo
mailing list