summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 00:28:02 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-11-07 00:28:02 -0400
commit8651e839a5923c8b490ee465c14ebac38213a2d1 (patch)
treeac98efcbf117579d81525a7c63cfa9360b454785
parenta247278e05f1313070746f4a2e7110401895ff79 (diff)
qwer
-rw-r--r--region-iter.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/region-iter.c b/region-iter.c
index a945e43..29eb80a 100644
--- a/region-iter.c
+++ b/region-iter.c
@@ -314,6 +314,7 @@ segment_iter_get_segment (segment_iter_t *iter,
*x2 = iter->p1->x2;
iter->p1++;
iter->x1 = 0;
+ iter->x2 += (*x2 - *x1);
return TRUE;
}
@@ -322,6 +323,7 @@ segment_iter_get_segment (segment_iter_t *iter,
*x2 = iter->p2->x2;
iter->p2++;
iter->x2 = 0;
+ iter->x1 += (*x2 - *x1);
return TRUE;
}
@@ -479,11 +481,11 @@ region_path (pixman_region32_t *region, int *n)
current = 0;
region_iter_get_row (&iter, &row2);
+ printf ("row: %d %d %d %d\n", row1.y1, row1.y2, row2.y1, row2.y2);
+
segment_iter_init (&seg_iter, &row1, &row2);
while (segment_iter_get_segment (&seg_iter, &x1, &x2, &type))
{
- printf ("row: %d %d %d %d\n", row1.y1, row1.y2, row2.y1, row2.y2);
-
switch (type)
{
case ROW1:
@@ -492,7 +494,7 @@ region_path (pixman_region32_t *region, int *n)
p1 = p2 = -1;
- printf ("segment %s\n", type == ROW1? "row1" : "row2");
+ printf ("segment %s (%d %d)\n", type == ROW1? "row1" : "row2", x1, x2);
while (current < old_n_active && corners[old_active[current].corner].x <= x2)
{
@@ -500,13 +502,13 @@ region_path (pixman_region32_t *region, int *n)
{
p1 = old_active[current].corner;
- printf ("found p1: %d\n", p1);
+ printf ("found p1: %d (%d %d)\n", p1, corners[p1].x, corners[p1].y);
}
else if (corners[old_active[current].corner].x == x2)
{
p2 = old_active[current].corner;
- printf ("found p2: %d\n", p2);
+ printf ("found p2: %d (%d %d)\n", p2, corners[p2].x, corners[p2].y);
}
else
{
@@ -553,6 +555,7 @@ region_path (pixman_region32_t *region, int *n)
break;
case BOTH:
+ printf ("segment BOTH (%d %d)\n", x1, x2);
break;
}
}
@@ -586,7 +589,7 @@ dump_corners (corner_t *corners, int n_corners)
{
corner_t *corner = &(corners[i]);
- if (!corner->next)
+ if (corner->next == -1)
printf ("%p has no next\n", corner);
while (corner->next != -1)
@@ -688,12 +691,22 @@ main ()
printf ("-=- dump segments\n");
- printf ("-=- op2\n");
+ printf ("-=- path\n");
pixman_region32_init_rect (&region1, 100, 100, 200, 200);
corners = region_path (&region1, &n_corners);
dump_corners (corners, n_corners);
+ /* Slightly more complex region */
+ pixman_region32_init_rect (&region, 0, 0, 100, 100);
+ pixman_region32_union_rect (&region, &region, 50, 50, 100, 100);
+
+ printf ("-=- more complex path\n");
+
+ corners = region_path (&region, &n_corners);
+
+ dump_corners (corners, n_corners);
+
return 0;
}