diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-09-27 11:14:18 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-09-27 11:14:18 +0100 |
commit | 36536d3eb83a8f942bcf1afba4d0815fbeaca10f (patch) | |
tree | 7287587f488a69b5db96b529bfeb3f639279d55c | |
parent | 7e856071a27b06a6ae35b6445635da9276975c69 (diff) |
spans-compositor: Use the tight clip-boxes for polygon construction
If we will be reducing the clip intersection to a single clip box check
during construction, it helps if we use the tight clip box.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/cairo-spans-compositor.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/cairo-spans-compositor.c b/src/cairo-spans-compositor.c index 602d6a64..031ccbb0 100644 --- a/src/cairo-spans-compositor.c +++ b/src/cairo-spans-compositor.c @@ -1019,12 +1019,16 @@ _cairo_spans_compositor_stroke (const cairo_compositor_t *_compositor, cairo_polygon_t polygon; cairo_fill_rule_t fill_rule = CAIRO_FILL_RULE_WINDING; - if (extents->mask.width > extents->unbounded.width || - extents->mask.height > extents->unbounded.height) + if (! _cairo_rectangle_contains_rectangle (&extents->unbounded, + &extents->mask)) { - cairo_box_t limits; - _cairo_box_from_rectangle (&limits, &extents->unbounded); - _cairo_polygon_init (&polygon, &limits, 1); + if (extents->clip->num_boxes == 1) { + _cairo_polygon_init (&polygon, extents->clip->boxes, 1); + } else { + cairo_box_t limits; + _cairo_box_from_rectangle (&limits, &extents->unbounded); + _cairo_polygon_init (&polygon, &limits, 1); + } } else { @@ -1101,13 +1105,17 @@ _cairo_spans_compositor_fill (const cairo_compositor_t *_compositor, TRACE((stderr, "%s - polygon\n", __FUNCTION__)); - if (extents->mask.width > extents->unbounded.width || - extents->mask.height > extents->unbounded.height) + if (! _cairo_rectangle_contains_rectangle (&extents->unbounded, + &extents->mask)) { - cairo_box_t limits; TRACE((stderr, "%s - clipping to bounds\n", __FUNCTION__)); - _cairo_box_from_rectangle (&limits, &extents->unbounded); - _cairo_polygon_init (&polygon, &limits, 1); + if (extents->clip->num_boxes == 1) { + _cairo_polygon_init (&polygon, extents->clip->boxes, 1); + } else { + cairo_box_t limits; + _cairo_box_from_rectangle (&limits, &extents->unbounded); + _cairo_polygon_init (&polygon, &limits, 1); + } } else { @@ -1122,6 +1130,7 @@ _cairo_spans_compositor_fill (const cairo_compositor_t *_compositor, extents->clip->boxes, extents->clip->num_boxes); } + TRACE_ (_cairo_debug_print_polygon (stderr, &polygon)); if (likely (status == CAIRO_INT_STATUS_SUCCESS)) { cairo_clip_t *saved_clip = extents->clip; |