summaryrefslogtreecommitdiff
path: root/src/cairo-traps-compositor.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-09-30 15:58:14 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-09-30 15:58:14 +0100
commit538fa0d6fbfe5f03b325e2dfb296538295f3b409 (patch)
treebf026f434a73e9aab71fc8b133e82755a0b45ae3 /src/cairo-traps-compositor.c
parent719bef0c90b73850e373c70d627fa1f730be84a1 (diff)
downloadcairo-538fa0d6fbfe5f03b325e2dfb296538295f3b409.tar.gz
fill: Fix unantialiased rectilinear-fill-to-boxes
We were calling the antialias close function from the unantialiased paths - a function that operates on a completely different structure to the one passed in. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-traps-compositor.c')
-rw-r--r--src/cairo-traps-compositor.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/cairo-traps-compositor.c b/src/cairo-traps-compositor.c
index 012719a54..0df3b7840 100644
--- a/src/cairo-traps-compositor.c
+++ b/src/cairo-traps-compositor.c
@@ -327,8 +327,10 @@ out:
return surface;
error:
- cairo_surface_destroy (surface);
- surface = _cairo_surface_create_in_error (status);
+ if (status != CAIRO_INT_STATUS_NOTHING_TO_DO) {
+ cairo_surface_destroy (surface);
+ surface = _cairo_surface_create_in_error (status);
+ }
compositor->release (surface);
return surface;
}
@@ -355,6 +357,9 @@ clip_and_composite_with_mask (const cairo_traps_compositor_t *compositor,
if (unlikely (mask->status))
return mask->status;
+ if (mask->is_clear)
+ goto skip;
+
if (src != NULL || dst->content != CAIRO_CONTENT_ALPHA) {
compositor->composite (dst, op, src, mask,
extents->bounded.x + src_x,
@@ -369,8 +374,9 @@ clip_and_composite_with_mask (const cairo_traps_compositor_t *compositor,
extents->bounded.x, extents->bounded.y,
extents->bounded.width, extents->bounded.height);
}
- cairo_surface_destroy (mask);
+skip:
+ cairo_surface_destroy (mask);
return CAIRO_STATUS_SUCCESS;
}
@@ -468,6 +474,9 @@ clip_and_composite_source (const cairo_traps_compositor_t *compositor,
if (unlikely (mask->status))
return mask->status;
+ if (mask->is_clear)
+ goto skip;
+
if (dst->is_clear) {
compositor->composite (dst, CAIRO_OPERATOR_SOURCE, src, mask,
extents->bounded.x + src_x, extents->bounded.y + src_y,
@@ -482,6 +491,7 @@ clip_and_composite_source (const cairo_traps_compositor_t *compositor,
extents->bounded.width, extents->bounded.height);
}
+skip:
cairo_surface_destroy (mask);
return CAIRO_STATUS_SUCCESS;