diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-08-14 05:05:18 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-08-14 05:05:18 -0400 |
commit | 0a9bf70c593d4133ad614789c7e7790de0c19776 (patch) | |
tree | faa33b77d4c9eef0391588114e8ff29b58a4c4a7 | |
parent | 630752f0c3c225b6461d83e2ed500901e651b832 (diff) |
row type
-rw-r--r-- | region-iter.c | 111 |
1 files changed, 53 insertions, 58 deletions
diff --git a/region-iter.c b/region-iter.c index ea9b31e..39477c7 100644 --- a/region-iter.c +++ b/region-iter.c @@ -12,6 +12,7 @@ static const pixman_box32_t sentinel = }; typedef struct region_iter_t region_iter_t; +typedef struct row_t row_t; struct region_iter_t { @@ -21,6 +22,14 @@ struct region_iter_t const pixman_box32_t * last; }; +struct row_t +{ + const pixman_box32_t * first; + const pixman_box32_t * last; + int y1; + int y2; +}; + /* region_data manipulation */ static size_t next_power (size_t n) @@ -83,10 +92,7 @@ region_iter_init (region_iter_t *iter, pixman_region32_t *region) } static void -region_iter_get_row (region_iter_t *iter, - const pixman_box32_t **first, - const pixman_box32_t **last, - int *y1, int *y2) +region_iter_get_row (region_iter_t *iter, row_t *row) { /* We always want an initial row of 0 boxes, so we * need 'first_row' to deal with the case where the @@ -94,10 +100,10 @@ region_iter_get_row (region_iter_t *iter, */ if (iter->first_row || iter->y < iter->first->y1) { - *first = NULL; - *last = NULL; - *y1 = iter->y; - *y2 = iter->first->y1; + row->first = NULL; + row->last = NULL; + row->y1 = iter->y; + row->y2 = iter->first->y1; iter->y = iter->first->y1; iter->first_row = FALSE; @@ -112,10 +118,10 @@ region_iter_get_row (region_iter_t *iter, break; } - *first = iter->first; - *last = box; - *y1 = iter->y; - *y2 = iter->first->y2; + row->first = iter->first; + row->last = box; + row->y1 = iter->y; + row->y2 = iter->first->y2; iter->y = iter->first->y2; @@ -137,10 +143,8 @@ struct overlapped_iter_t { region_iter_t iter1; region_iter_t iter2; - const pixman_box32_t *row1_first, *row1_last; - int row1_y1, row1_y2; - const pixman_box32_t *row2_first, *row2_last; - int row2_y1, row2_y2; + row_t row1; + row_t row2; }; static void @@ -150,10 +154,8 @@ overlapped_iter_init (overlapped_iter_t *iter, region_iter_init (&iter->iter1, region1); region_iter_init (&iter->iter2, region2); - region_iter_get_row ( - &iter->iter1, &iter->row1_first, &iter->row1_last, &iter->row1_y1, &iter->row1_y2); - region_iter_get_row ( - &iter->iter2, &iter->row2_first, &iter->row2_last, &iter->row2_y1, &iter->row2_y2); + region_iter_get_row (&iter->iter1, &iter->row1); + region_iter_get_row (&iter->iter2, &iter->row2); } static void @@ -162,53 +164,47 @@ overlapped_iter_get_rows (overlapped_iter_t *iter, const pixman_box32_t **row2_begin, const pixman_box32_t **row2_end, int *y1, int *y2) { - *row1_begin = iter->row1_first; - *row1_end = iter->row1_last; - *row2_begin = iter->row2_first; - *row2_end = iter->row2_last; + *row1_begin = iter->row1.first; + *row1_end = iter->row1.last; + *row2_begin = iter->row2.first; + *row2_end = iter->row2.last; - if (iter->row1_y1 < iter->row2_y1) + if (iter->row1.y1 < iter->row2.y1) { - *y1 = iter->row1_y1; - *y2 = iter->row2_y1; + *y1 = iter->row1.y1; + *y2 = iter->row2.y1; - iter->row1_y1 = iter->row2_y1; + iter->row1.y1 = iter->row2.y1; } - else if (iter->row2_y1 < iter->row1_y1) + else if (iter->row2.y1 < iter->row1.y1) { - *y1 = iter->row2_y1; - *y2 = iter->row1_y1; + *y1 = iter->row2.y1; + *y2 = iter->row1.y1; - iter->row2_y1 = iter->row1_y1; + iter->row2.y1 = iter->row1.y1; } - else if (iter->row1_y2 < iter->row2_y2) + else if (iter->row1.y2 < iter->row2.y2) { - *y1 = iter->row1_y1; - *y2 = iter->row1_y2; + *y1 = iter->row1.y1; + *y2 = iter->row1.y2; - iter->row1_y1 = iter->row1_y2; - iter->row2_y1 = iter->row1_y2; + iter->row1.y1 = iter->row1.y2; + iter->row2.y1 = iter->row1.y2; } else { - *y1 = iter->row2_y1; - *y2 = iter->row2_y2; + *y1 = iter->row2.y1; + *y2 = iter->row2.y2; - iter->row2_y1 = iter->row2_y2; - iter->row1_y1 = iter->row2_y2; + iter->row2.y1 = iter->row2.y2; + iter->row1.y1 = iter->row2.y2; } - if (iter->row1_y1 == iter->row1_y2) - { - region_iter_get_row ( - &iter->iter1, &iter->row1_first, &iter->row1_last, &iter->row1_y1, &iter->row1_y2); - } + if (iter->row1.y1 == iter->row1.y2) + region_iter_get_row (&iter->iter1, &iter->row1); - if (iter->row2_y1 == iter->row2_y2) - { - region_iter_get_row ( - &iter->iter2, &iter->row2_first, &iter->row2_last, &iter->row2_y1, &iter->row2_y2); - } + if (iter->row2.y1 == iter->row2.y2) + region_iter_get_row (&iter->iter2, &iter->row2); } /* Segment iter */ @@ -380,9 +376,8 @@ region_op (pixman_region32_t *dst, static void dump_region (const char *title, pixman_region32_t *region) { - const pixman_box32_t *first, *last; region_iter_t iter; - int y1, y2; + row_t row; printf ("-=- %s\n", title); region_iter_init (&iter, region); @@ -390,16 +385,16 @@ dump_region (const char *title, pixman_region32_t *region) { int n_boxes; - region_iter_get_row (&iter, &first, &last, &y1, &y2); + region_iter_get_row (&iter, &row); - if (first == &sentinel) + if (row.first == &sentinel) n_boxes = 0; else - n_boxes = last - first; + n_boxes = row.last - row.first; - printf ("Row of %d boxes %d %d\n", n_boxes, y1, y2); + printf ("Row of %d boxes %d %d\n", n_boxes, row.y1, row.y2); } - while (y1 != INT_MAX); + while (row.y1 != INT_MAX); } int |