Add pixman_region_init_rects()
authorVladimir Vukicevic <vladimir@pobox.com>
Wed, 20 Jun 2007 19:13:30 +0000 (15:13 -0400)
committerSøren Sandmann Pedersen <sandmann@redhat.com>
Wed, 20 Jun 2007 19:13:30 +0000 (15:13 -0400)
pixman/pixman-region.c
pixman/pixman.h

index 7a0f9da..08ce2e2 100644 (file)
@@ -2468,3 +2468,30 @@ pixman_region_selfcheck (reg)
     }
 }
 
+pixman_bool_t
+pixman_region_init_rects (pixman_region16_t *region,
+                         pixman_box16_t *boxes, int count)
+{
+    int overlap;
+
+    if (count == 1) {
+       pixman_region_init_rect(region,
+                               boxes[0].x1,
+                               boxes[0].y1,
+                               boxes[0].x2 - boxes[0].x1,
+                               boxes[0].y2 - boxes[0].y1);
+       return TRUE;
+    }
+
+    pixman_region_init(region);
+    if (!pixman_rect_alloc(region, count))
+       return FALSE;
+
+    /* Copy in the rects */
+    memcpy (PIXREGION_RECTS(region), boxes, sizeof(pixman_box16_t) * count);
+    region->data->numRects = count;
+
+    /* Validate */
+    region->extents.x1 = region->extents.x2 = 0;
+    return pixman_region_validate (region, &overlap);
+}
index 0014cef..cd64c8d 100644 (file)
@@ -288,7 +288,8 @@ pixman_bool_t               pixman_region_equal (pixman_region16_t *region1,
                                             pixman_region16_t *region2);
 pixman_bool_t          pixman_region_selfcheck (pixman_region16_t *region);
 void                   pixman_region_reset(pixman_region16_t *region, pixman_box16_t *box);
-
+pixman_bool_t          pixman_region_init_rects (pixman_region16_t *region,
+                                                 pixman_box16_t *boxes, int count);
 
 /* Copy / Fill */
 pixman_bool_t pixman_blt (uint32_t *src_bits,