diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-26 15:50:32 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-26 16:00:43 +0100 |
commit | 91faf9c1cf79f44b48c0f14d2d551a68bf38b5a5 (patch) | |
tree | e861a74cc04c860327df558388c7846a144dd6c8 /src/cairo-image-surface.c | |
parent | a69335a84eb9225b477cc8c753470eb3805b852c (diff) | |
download | cairo-91faf9c1cf79f44b48c0f14d2d551a68bf38b5a5.tar.gz |
composite: Pass unbounded extents to initialisation
For an unbounded surface we cannot assume (0, 0, surface_width,
surface_height) as that is wrong and causes the operation to appear
clipped.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-image-surface.c')
-rw-r--r-- | src/cairo-image-surface.c | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 369f1728e..3eb4e051f 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -3291,6 +3291,19 @@ _clip_and_composite_trapezoids (cairo_image_surface_t *dst, } /* high level image interface */ +static cairo_bool_t +_cairo_image_surface_get_extents (void *abstract_surface, + cairo_rectangle_int_t *rectangle) +{ + cairo_image_surface_t *surface = abstract_surface; + + rectangle->x = 0; + rectangle->y = 0; + rectangle->width = surface->width; + rectangle->height = surface->height; + + return TRUE; +} static cairo_int_status_t _cairo_image_surface_paint (void *abstract_surface, @@ -3299,13 +3312,13 @@ _cairo_image_surface_paint (void *abstract_surface, const cairo_clip_t *clip) { cairo_image_surface_t *surface = abstract_surface; + cairo_rectangle_int_t unbounded; cairo_composite_rectangles_t extents; cairo_status_t status; cairo_boxes_t boxes; - status = _cairo_composite_rectangles_init_for_paint (&extents, - surface->width, - surface->height, + _cairo_image_surface_get_extents (surface, &unbounded); + status = _cairo_composite_rectangles_init_for_paint (&extents, &unbounded, op, source, clip); if (unlikely (status)) @@ -3537,10 +3550,11 @@ _cairo_image_surface_mask (void *abstract_surface, { cairo_image_surface_t *surface = abstract_surface; cairo_composite_rectangles_t extents; + cairo_rectangle_int_t unbounded; cairo_status_t status; - status = _cairo_composite_rectangles_init_for_mask (&extents, - surface->width, surface->height, + _cairo_image_surface_get_extents (surface, &unbounded); + status = _cairo_composite_rectangles_init_for_mask (&extents, &unbounded, op, source, mask, clip); if (unlikely (status)) return status; @@ -3770,11 +3784,11 @@ _cairo_image_surface_stroke (void *abstract_surface, { cairo_image_surface_t *surface = abstract_surface; cairo_composite_rectangles_t extents; + cairo_rectangle_int_t unbounded; cairo_int_status_t status; - status = _cairo_composite_rectangles_init_for_stroke (&extents, - surface->width, - surface->height, + _cairo_image_surface_get_extents (surface, &unbounded); + status = _cairo_composite_rectangles_init_for_stroke (&extents, &unbounded, op, source, path, style, ctm, clip); @@ -3833,11 +3847,11 @@ _cairo_image_surface_fill (void *abstract_surface, { cairo_image_surface_t *surface = abstract_surface; cairo_composite_rectangles_t extents; + cairo_rectangle_int_t unbounded; cairo_status_t status; - status = _cairo_composite_rectangles_init_for_fill (&extents, - surface->width, - surface->height, + _cairo_image_surface_get_extents (surface, &unbounded); + status = _cairo_composite_rectangles_init_for_fill (&extents, &unbounded, op, source, path, clip); if (unlikely (status)) @@ -4131,14 +4145,14 @@ _cairo_image_surface_glyphs (void *abstract_surface, { cairo_image_surface_t *surface = abstract_surface; cairo_composite_rectangles_t extents; + cairo_rectangle_int_t unbounded; composite_glyphs_info_t glyph_info; cairo_status_t status; cairo_bool_t overlap; unsigned int flags; - status = _cairo_composite_rectangles_init_for_glyphs (&extents, - surface->width, - surface->height, + _cairo_image_surface_get_extents (surface, &unbounded); + status = _cairo_composite_rectangles_init_for_glyphs (&extents, &unbounded, op, source, scaled_font, glyphs, num_glyphs, @@ -4171,20 +4185,6 @@ _cairo_image_surface_glyphs (void *abstract_surface, return status; } -static cairo_bool_t -_cairo_image_surface_get_extents (void *abstract_surface, - cairo_rectangle_int_t *rectangle) -{ - cairo_image_surface_t *surface = abstract_surface; - - rectangle->x = 0; - rectangle->y = 0; - rectangle->width = surface->width; - rectangle->height = surface->height; - - return TRUE; -} - static void _cairo_image_surface_get_font_options (void *abstract_surface, cairo_font_options_t *options) |