diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-09 13:01:17 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-09 13:01:17 +0000 |
commit | 2061cd81f26c04deb5a7092744295caab7bac077 (patch) | |
tree | 9190b32541c48e1440f6581c34f3253092597984 /src/cairo-xlib-source.c | |
parent | 7c34997a3ba89f2e957953aeb4bffa910dbf375b (diff) | |
download | cairo-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.c | 17 |
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); |