summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-09-27 11:14:18 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-09-27 11:14:18 +0100
commit36536d3eb83a8f942bcf1afba4d0815fbeaca10f (patch)
tree7287587f488a69b5db96b529bfeb3f639279d55c
parent7e856071a27b06a6ae35b6445635da9276975c69 (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.c29
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;