diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-11-07 05:36:45 -0500 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-11-07 05:36:45 -0500 |
commit | 06410b056fd9ba73f1a179662aa31bcd8da9be47 (patch) | |
tree | 055032860a34131d45955851a857997bcf6be6e8 | |
parent | 0200db273bdb62db7464af35fcaf514c9f9e6798 (diff) |
Overlapped iter bool
-rw-r--r-- | region-iter.c | 22 |
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 |