diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-26 13:25:58 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-26 13:25:58 +0100 |
commit | 9fe7022790478cfcd10a13390a6686497f2c9339 (patch) | |
tree | a767d33fa0aa00d16d89ed0102585e4bfff431db /src/cairo-polygon-intersect.c | |
parent | 1a1b39a9c35f8857e8ad36dc02c02ea5eae26021 (diff) | |
download | cairo-9fe7022790478cfcd10a13390a6686497f2c9339.tar.gz |
polygon-intersect: Remove surplus edge direction
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-polygon-intersect.c')
-rw-r--r-- | src/cairo-polygon-intersect.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/src/cairo-polygon-intersect.c b/src/cairo-polygon-intersect.c index d9d0cf261..92becd07d 100644 --- a/src/cairo-polygon-intersect.c +++ b/src/cairo-polygon-intersect.c @@ -59,7 +59,6 @@ typedef struct _cairo_bo_edge cairo_bo_edge_t; typedef struct _cairo_bo_deferred { cairo_bo_edge_t *other; int32_t top; - int dir; } cairo_bo_deferred_t; struct _cairo_bo_edge { @@ -1157,41 +1156,30 @@ edges_end (cairo_bo_edge_t *left, { cairo_bo_deferred_t *l = &left->deferred; cairo_bo_edge_t *right = l->other; - cairo_bo_deferred_t *r = &right->deferred; + assert(right->deferred.other == NULL); if (likely (l->top < bot)) { - _cairo_polygon_add_line (polygon, &left->edge.line, - l->top, bot, l->dir); - _cairo_polygon_add_line (polygon, &right->edge.line, - l->top, bot, r->dir); + _cairo_polygon_add_line (polygon, &left->edge.line, l->top, bot, 1); + _cairo_polygon_add_line (polygon, &right->edge.line, l->top, bot, -1); } l->other = NULL; - r->other = NULL; } - static inline void edges_start_or_continue (cairo_bo_edge_t *left, cairo_bo_edge_t *right, int top, cairo_polygon_t *polygon) { - if (left->deferred.other == right) { - assert (right->deferred.other == left); - assert (left->deferred.dir == 1); - assert (right->deferred.dir == -1); + if (left->deferred.other == right) return; - } if (left->deferred.other != NULL) { - assert (left->deferred.dir == 1); if (right != NULL && edges_colinear (left->deferred.other, right)) { /* continuation on right, so just swap edges */ - left->deferred.other->deferred.other = NULL; + assert (left->deferred.other->deferred.other == NULL); left->deferred.other = right; - right->deferred.other = left; - right->deferred.dir = -1; return; } @@ -1200,12 +1188,7 @@ edges_start_or_continue (cairo_bo_edge_t *left, if (right != NULL && ! edges_colinear (left, right)) { left->deferred.top = top; - left->deferred.dir = 1; left->deferred.other = right; - - right->deferred.top = top; - right->deferred.dir = -1; - right->deferred.other = left; } } @@ -1260,7 +1243,6 @@ active_edges (cairo_bo_edge_t *left, } } - static cairo_status_t intersection_sweep (cairo_bo_event_t **start_events, int num_events, |