diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-27 12:27:49 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-30 13:07:23 +0100 |
commit | 719bef0c90b73850e373c70d627fa1f730be84a1 (patch) | |
tree | 11de68267ed7bdbc7e069a0e04403b228732f660 /src/cairo-spans-compositor.c | |
parent | 2994b0c634158f681d3ac2894270d609ed5af424 (diff) | |
download | cairo-719bef0c90b73850e373c70d627fa1f730be84a1.tar.gz |
image: Enable use of LERP_SRC for masked source composition
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-spans-compositor.c')
-rw-r--r-- | src/cairo-spans-compositor.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/cairo-spans-compositor.c b/src/cairo-spans-compositor.c index 3b1a9a19f..9d7b0ac7b 100644 --- a/src/cairo-spans-compositor.c +++ b/src/cairo-spans-compositor.c @@ -231,8 +231,8 @@ fixup_unbounded_mask (const cairo_spans_compositor_t *compositor, status = _cairo_composite_rectangles_init_for_boxes (&composite, extents->surface, - CAIRO_OPERATOR_DEST_OUT, - &_cairo_pattern_white.base, + CAIRO_OPERATOR_CLEAR, + &_cairo_pattern_clear.base, boxes, NULL); if (unlikely (status)) @@ -282,8 +282,8 @@ fixup_unbounded_polygon (const cairo_spans_compositor_t *compositor, status = _cairo_composite_rectangles_init_for_polygon (&composite, extents->surface, - CAIRO_OPERATOR_DEST_OUT, - &_cairo_pattern_white.base, + CAIRO_OPERATOR_CLEAR, + &_cairo_pattern_clear.base, &polygon, NULL); if (unlikely (status)) @@ -464,8 +464,8 @@ composite_aligned_boxes (const cairo_spans_compositor_t *compositor, if (op == CAIRO_OPERATOR_SOURCE && (need_clip_mask || ! no_mask)) { /* SOURCE with a mask is actually a LERP in cairo semantics */ - /* XXX push this choice down to the backend */ - return CAIRO_INT_STATUS_UNSUPPORTED; + if ((compositor->flags & CAIRO_SPANS_COMPOSITOR_HAS_LERP) == 0) + return CAIRO_INT_STATUS_UNSUPPORTED; } /* Are we just copying a recording surface? */ @@ -551,11 +551,6 @@ composite_aligned_boxes (const cairo_spans_compositor_t *compositor, } } - if (mask && op == CAIRO_OPERATOR_CLEAR) { - source = &_cairo_pattern_white.base; - op = CAIRO_OPERATOR_DEST_OUT; - } - src = compositor->pattern_to_surface (dst, source, FALSE, &extents->bounded, &extents->source_sample_area, |