summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 01:13:03 -0500
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 01:13:03 -0500
commit0362a8361f2bed7156d2507f240300e83f65095e (patch)
tree953f9f5d137b1bfe737f8b607240dcb9d7cf6b61
parent942d027a9dd49d881ca95a65c9f0187ce9d86882 (diff)
boolean
-rw-r--r--region-iter.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/region-iter.c b/region-iter.c
index bf1751c..b46fcaa 100644
--- a/region-iter.c
+++ b/region-iter.c
@@ -92,7 +92,7 @@ region_iter_init (region_iter_t *iter, pixman_region32_t *region)
}
}
-static void
+static pixman_bool_t
region_iter_get_row (region_iter_t *iter, row_t *row)
{
/* We always want an initial row of 0 boxes, so we
@@ -108,11 +108,16 @@ region_iter_get_row (region_iter_t *iter, row_t *row)
iter->y = iter->first->y1;
iter->first_row = FALSE;
+
+ return TRUE;
}
else
{
const pixman_box32_t *box;
+ if (iter->first == &sentinel)
+ return FALSE;
+
for (box = iter->first; box != iter->last; box++)
{
if (box->y1 != iter->y)
@@ -135,6 +140,8 @@ region_iter_get_row (region_iter_t *iter, row_t *row)
{
iter->first = box;
}
+
+ return TRUE;
}
}
@@ -383,13 +390,12 @@ dump_region (const char *title, pixman_region32_t *region)
row_t row;
printf ("-=- %s\n", title);
+
region_iter_init (&iter, region);
- do
+ while (region_iter_get_row (&iter, &row))
{
int n_boxes;
- region_iter_get_row (&iter, &row);
-
if (row.first == &sentinel)
n_boxes = 0;
else
@@ -397,7 +403,6 @@ dump_region (const char *title, pixman_region32_t *region)
printf ("Row of %d boxes %d %d\n", n_boxes, row.y1, row.y2);
}
- while (row.y1 != INT_MAX);
}
typedef struct corner_t corner_t;
@@ -448,9 +453,9 @@ region_path (pixman_region32_t *region, int *n)
corners = NULL;
n_corners = 0;
-
+
region_iter_get_row (&iter, &row1);
- do
+ while (region_iter_get_row (&iter, &row2))
{
segment_iter_t seg_iter;
segment_type_t type;
@@ -467,7 +472,6 @@ region_path (pixman_region32_t *region, int *n)
n_active = 0;
current = 0;
- region_iter_get_row (&iter, &row2);
segment_iter_init (&seg_iter, &row1, &row2);
while (segment_iter_get_segment (&seg_iter, &x1, &x2, &type))
{
@@ -535,7 +539,7 @@ region_path (pixman_region32_t *region, int *n)
free (old_active);
row1 = row2;
- } while (row1.y2 != INT_MAX);
+ }
*n = n_corners;
@@ -553,14 +557,11 @@ dump_corners (corner_t *corners, int n_corners)
{
corner_t *corner = &(corners[i]);
- if (corner->next == -1)
- printf ("%p has no next\n", corner);
-
while (corner->next != -1)
{
int next = corner->next;
- printf (" %p Corner: %d %d\n", corner, corner->x, corner->y);
+ printf (" %p Corner: %d %d\n", corner, corner->x, corner->y);
corner->next = -1;
corner = &(corners[next]);