diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-11-07 00:28:02 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-11-07 00:28:02 -0400 |
commit | 8651e839a5923c8b490ee465c14ebac38213a2d1 (patch) | |
tree | ac98efcbf117579d81525a7c63cfa9360b454785 | |
parent | a247278e05f1313070746f4a2e7110401895ff79 (diff) |
qwer
-rw-r--r-- | region-iter.c | 27 |
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 (®ion1, 100, 100, 200, 200); corners = region_path (®ion1, &n_corners); dump_corners (corners, n_corners); + /* Slightly more complex region */ + pixman_region32_init_rect (®ion, 0, 0, 100, 100); + pixman_region32_union_rect (®ion, ®ion, 50, 50, 100, 100); + + printf ("-=- more complex path\n"); + + corners = region_path (®ion, &n_corners); + + dump_corners (corners, n_corners); + return 0; } |