mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-01 04:28:03 +02:00
polygon-intersect: Remove surplus edge direction
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
1a1b39a9c3
commit
9fe7022790
1 changed files with 5 additions and 23 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue