summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-11-01 08:39:01 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-11-01 08:43:26 +0000
commitb6daf47fa08c74d9672040b2b98ac6dd1f841429 (patch)
treea1333823e3aaee328e71e55b906172201b5459bd
parent5844dead01db9ddab7f10a4d685bc5ee874d0eba (diff)
downloadcairo-b6daf47fa08c74d9672040b2b98ac6dd1f841429.tar.gz
spans: Do not assume that we manage to perform the clip geometrically
Even for bounded masks, we may fail to perform the clipping geometrically for a variety of reasons, the prime one being that the clip has a mixture of antialias settings. So when compositing the polygon, we need to check whether a clip path still remains and so requires a clipmask. Fixes regression from commit cd1004ce19c7ea28c7fedb6464562a08416586c0 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Fri May 11 21:20:35 2012 +0100 traps,spans-compositor: Avoid mistreating unaligned clips as aligned and commit 4ea3ace6c810ba090464e48795fac5456f6cdc24 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Fri May 11 21:51:44 2012 +0100 spans: Only fallback for a clipmask if unbounded Reported-by: Dominik Röttsches <dominik.rottsches@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56574 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/cairo-spans-compositor.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/cairo-spans-compositor.c b/src/cairo-spans-compositor.c
index a2b88efe2..cb3e973d6 100644
--- a/src/cairo-spans-compositor.c
+++ b/src/cairo-spans-compositor.c
@@ -744,8 +744,10 @@ composite_polygon (const cairo_spans_compositor_t *compositor,
cairo_bool_t needs_clip;
cairo_int_status_t status;
- needs_clip = ! extents->is_bounded &&
- (! _clip_is_region (extents->clip) || extents->clip->num_boxes > 1);
+ if (extents->is_bounded)
+ needs_clip = extents->clip->path != NULL;
+ else
+ needs_clip = !_clip_is_region (extents->clip) || extents->clip->num_boxes > 1;
TRACE ((stderr, "%s - needs_clip=%d\n", __FUNCTION__, needs_clip));
if (needs_clip) {
TRACE ((stderr, "%s: unsupported clip\n", __FUNCTION__));
@@ -999,7 +1001,9 @@ _cairo_spans_compositor_stroke (const cairo_compositor_t *_compositor,
const cairo_spans_compositor_t *compositor = (cairo_spans_compositor_t*)_compositor;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
TRACE_ (_cairo_debug_print_path (stderr, path));
+ TRACE_ (_cairo_debug_print_clip (stderr, extents->clip));
status = CAIRO_INT_STATUS_UNSUPPORTED;
if (_cairo_path_fixed_stroke_is_rectilinear (path)) {