diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-12 12:32:49 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-15 14:21:00 +0000 |
commit | 8bea52bb0b55e2b041fbd43bc36221b5eb07b863 (patch) | |
tree | 846f9436ae94a6784c64c7929645514b73022550 /src/cairo-region.c | |
parent | c7d8ec72e6d14236d20b068a404d166496872a54 (diff) |
Add preliminary damage tracking
This is initially based around the requirements for handling internal
fallbacks to the image compositor and reducing the number of pixels
required to be transferred.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-region.c')
-rw-r--r-- | src/cairo-region.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cairo-region.c b/src/cairo-region.c index f3ccb898a..a7ec50cba 100644 --- a/src/cairo-region.c +++ b/src/cairo-region.c @@ -276,6 +276,38 @@ cairo_region_create_rectangles (const cairo_rectangle_int_t *rects, } slim_hidden_def (cairo_region_create_rectangles); +cairo_region_t * +_cairo_region_create_from_boxes (const cairo_box_t *boxes, int count) +{ + cairo_region_t *region; + + region = _cairo_malloc (sizeof (cairo_region_t)); + if (unlikely (region == NULL)) + return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); + + CAIRO_REFERENCE_COUNT_INIT (®ion->ref_count, 1); + region->status = CAIRO_STATUS_SUCCESS; + + if (! pixman_region32_init_rects (®ion->rgn, + (pixman_box32_t *)boxes, count)) { + free (region); + return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); + } + + return region; +} + +cairo_box_t * +_cairo_region_get_boxes (const cairo_region_t *region, int *nbox) +{ + if (region->status) { + nbox = 0; + return NULL; + } + + return (cairo_box_t *) pixman_region32_rectangles (CONST_CAST ®ion->rgn, nbox); +} + /** * cairo_region_create_rectangle: * @rectangle: a #cairo_rectangle_int_t |