summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 05:36:45 -0500
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 05:36:45 -0500
commit06410b056fd9ba73f1a179662aa31bcd8da9be47 (patch)
tree055032860a34131d45955851a857997bcf6be6e8
parent0200db273bdb62db7464af35fcaf514c9f9e6798 (diff)
Overlapped iter bool
-rw-r--r--region-iter.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/region-iter.c b/region-iter.c
index e3272e1..37e9222 100644
--- a/region-iter.c
+++ b/region-iter.c
@@ -175,7 +175,7 @@ overlapped_iter_init (overlapped_iter_t *iter,
region_iter_get_row (&iter->iter2, &iter->row2);
}
-static void
+static pixman_bool_t
overlapped_iter_get_rows (overlapped_iter_t *iter, row_t *row1, row_t *row2)
{
int y1, y2;
@@ -218,12 +218,20 @@ overlapped_iter_get_rows (overlapped_iter_t *iter, row_t *row1, row_t *row2)
row1->y1 = row2->y1 = y1;
row1->y2 = row2->y2 = y2;
-
+
if (iter->row1.y1 == iter->row1.y2)
- region_iter_get_row (&iter->iter1, &iter->row1);
+ {
+ if (!region_iter_get_row (&iter->iter1, &iter->row1))
+ return FALSE;
+ }
if (iter->row2.y1 == iter->row2.y2)
- region_iter_get_row (&iter->iter2, &iter->row2);
+ {
+ if (!region_iter_get_row (&iter->iter2, &iter->row2))
+ return FALSE;
+ }
+
+ return TRUE;
}
/* Segment iter */
@@ -369,15 +377,12 @@ region_op (pixman_region32_t *dst,
row_t row1, row2;
overlapped_iter_init (&iter, src1, src2);
-
- do
+ while (overlapped_iter_get_rows (&iter, &row1, &row2))
{
segment_iter_t seg_iter;
segment_type_t type;
int x1, x2;
- overlapped_iter_get_rows (&iter, &row1, &row2);
-
segment_iter_init (&seg_iter, &row1, &row2);
while (segment_iter_get_segment (&seg_iter, &x1, &x2, &type))
{
@@ -389,7 +394,6 @@ region_op (pixman_region32_t *dst,
}
}
}
- while (row1.y1 != INT_MAX);
}
static void