summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-source.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-09 13:01:17 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-09 13:01:17 +0000
commit2061cd81f26c04deb5a7092744295caab7bac077 (patch)
tree9190b32541c48e1440f6581c34f3253092597984 /src/cairo-xlib-source.c
parent7c34997a3ba89f2e957953aeb4bffa910dbf375b (diff)
downloadcairo-2061cd81f26c04deb5a7092744295caab7bac077.tar.gz
Replace the ad-hoc surface unwrappers with a function pointer
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-xlib-source.c')
-rw-r--r--src/cairo-xlib-source.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c
index a098cf2c8..549879469 100644
--- a/src/cairo-xlib-source.c
+++ b/src/cairo-xlib-source.c
@@ -59,17 +59,10 @@
#define PIXMAN_MAX_INT ((pixman_fixed_1 >> 1) - pixman_fixed_e) /* need to ensure deltas also fit */
static cairo_xlib_surface_t *
-unwrap_surface (cairo_surface_t *surface)
+unwrap_source (const cairo_surface_pattern_t *pattern)
{
- if (_cairo_surface_is_paginated (surface))
- surface = _cairo_paginated_surface_get_recording (surface);
- if (_cairo_surface_is_snapshot (surface))
- surface = _cairo_surface_snapshot_get_target (surface);
- if (_cairo_surface_is_subsurface (surface))
- surface = _cairo_surface_subsurface_get_target (surface);
- if (_cairo_surface_is_observer (surface))
- surface = _cairo_surface_observer_get_target (surface);
- return (cairo_xlib_surface_t *)surface;
+ cairo_rectangle_int_t limits;
+ return (cairo_xlib_surface_t *)_cairo_pattern_get_source (pattern, &limits);
}
static cairo_status_t
@@ -760,7 +753,7 @@ native_source (cairo_xlib_surface_t *dst,
extents, sample,
src_x, src_y);
- src = unwrap_surface (pattern->surface);
+ src = unwrap_source (pattern);
if (pattern->base.filter == CAIRO_FILTER_NEAREST &&
sample->x >= 0 && sample->y >= 0 &&
@@ -1037,7 +1030,7 @@ _cairo_xlib_source_create_for_pattern (cairo_surface_t *_dst,
cairo_surface_pattern_t *spattern = (cairo_surface_pattern_t *)pattern;
if (spattern->surface->type == CAIRO_SURFACE_TYPE_XLIB &&
_cairo_xlib_surface_same_screen (dst,
- unwrap_surface (spattern->surface)))
+ unwrap_source (spattern)))
return native_source (dst, spattern, is_mask,
extents, sample,
src_x, src_y);