diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-30 15:58:14 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-30 15:58:14 +0100 |
commit | 538fa0d6fbfe5f03b325e2dfb296538295f3b409 (patch) | |
tree | bf026f434a73e9aab71fc8b133e82755a0b45ae3 /src/cairo-traps-compositor.c | |
parent | 719bef0c90b73850e373c70d627fa1f730be84a1 (diff) | |
download | cairo-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.c | 16 |
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; |