diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-11-01 08:39:01 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-11-01 08:43:26 +0000 |
commit | b6daf47fa08c74d9672040b2b98ac6dd1f841429 (patch) | |
tree | a1333823e3aaee328e71e55b906172201b5459bd | |
parent | 5844dead01db9ddab7f10a4d685bc5ee874d0eba (diff) | |
download | cairo-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.c | 8 |
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)) { |