summaryrefslogtreecommitdiff
path: root/src/cairo-region.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-12 12:32:49 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-15 14:21:00 +0000
commit8bea52bb0b55e2b041fbd43bc36221b5eb07b863 (patch)
tree846f9436ae94a6784c64c7929645514b73022550 /src/cairo-region.c
parentc7d8ec72e6d14236d20b068a404d166496872a54 (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.c32
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 (&region->ref_count, 1);
+ region->status = CAIRO_STATUS_SUCCESS;
+
+ if (! pixman_region32_init_rects (&region->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 &region->rgn, nbox);
+}
+
/**
* cairo_region_create_rectangle:
* @rectangle: a #cairo_rectangle_int_t