summaryrefslogtreecommitdiff
path: root/src/cairo-spans-compositor.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-09-27 12:27:49 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-09-30 13:07:23 +0100
commit719bef0c90b73850e373c70d627fa1f730be84a1 (patch)
tree11de68267ed7bdbc7e069a0e04403b228732f660 /src/cairo-spans-compositor.c
parent2994b0c634158f681d3ac2894270d609ed5af424 (diff)
downloadcairo-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.c17
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,