summaryrefslogtreecommitdiff
path: root/src/cairo-image-surface.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-07-26 15:50:32 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-07-26 16:00:43 +0100
commit91faf9c1cf79f44b48c0f14d2d551a68bf38b5a5 (patch)
treee861a74cc04c860327df558388c7846a144dd6c8 /src/cairo-image-surface.c
parenta69335a84eb9225b477cc8c753470eb3805b852c (diff)
downloadcairo-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.c56
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)