diff options
author | Uli Schlachter <psychon@znc.in> | 2011-12-11 13:41:39 +0100 |
---|---|---|
committer | Uli Schlachter <psychon@znc.in> | 2011-12-11 13:41:39 +0100 |
commit | 420110d12bd74969f84d6a1979b33f1d71d63c43 (patch) | |
tree | c9ba3d6984589e7adfe4f3a02369ad68a7f64f76 /src/cairo-xcb-surface-render.c | |
parent | fe04df11ed491db719f299213665bfe8be83c971 (diff) | |
download | cairo-420110d12bd74969f84d6a1979b33f1d71d63c43.tar.gz |
xcb: Move the surface picture setup into its own function
Signed-off-by: Uli Schlachter <psychon@znc.in>
Diffstat (limited to 'src/cairo-xcb-surface-render.c')
-rw-r--r-- | src/cairo-xcb-surface-render.c | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/src/cairo-xcb-surface-render.c b/src/cairo-xcb-surface-render.c index 265fc04b5..afd339abc 100644 --- a/src/cairo-xcb-surface-render.c +++ b/src/cairo-xcb-surface-render.c @@ -1032,6 +1032,33 @@ _copy_to_picture (cairo_xcb_surface_t *source) return picture; } +static void +_cairo_xcb_surface_setup_surface_picture(cairo_xcb_picture_t *picture, + const cairo_surface_pattern_t *pattern, + const cairo_rectangle_int_t *extents) +{ + cairo_filter_t filter; + + filter = pattern->base.filter; + if (filter != CAIRO_FILTER_NEAREST && + _cairo_matrix_has_unity_scale (&pattern->base.matrix) && + _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.x0)) && + _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.y0))) + { + filter = CAIRO_FILTER_NEAREST; + } + _cairo_xcb_picture_set_filter (picture, filter); + + _cairo_xcb_picture_set_matrix (picture, + &pattern->base.matrix, filter, + extents->x + extents->width/2., + extents->y + extents->height/2.); + + + _cairo_xcb_picture_set_extend (picture, pattern->base.extend); + _cairo_xcb_picture_set_component_alpha (picture, pattern->base.has_component_alpha); +} + static cairo_xcb_picture_t * _cairo_xcb_surface_picture (cairo_xcb_surface_t *target, const cairo_surface_pattern_t *pattern, @@ -1039,14 +1066,14 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target, { cairo_surface_t *source = pattern->surface; cairo_xcb_picture_t *picture; - cairo_filter_t filter; picture = (cairo_xcb_picture_t *) _cairo_surface_has_snapshot (source, &_cairo_xcb_picture_backend); if (picture != NULL) { if (picture->screen == target->screen) { picture = (cairo_xcb_picture_t *) cairo_surface_reference (&picture->base); - goto setup_picture; + _cairo_xcb_surface_setup_surface_picture (picture, pattern, extents); + return picture; } picture = NULL; } @@ -1191,26 +1218,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target, &picture->base, NULL); -setup_picture: - filter = pattern->base.filter; - if (filter != CAIRO_FILTER_NEAREST && - _cairo_matrix_has_unity_scale (&pattern->base.matrix) && - _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.x0)) && - _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.y0))) - { - filter = CAIRO_FILTER_NEAREST; - } - _cairo_xcb_picture_set_filter (picture, filter); - - _cairo_xcb_picture_set_matrix (picture, - &pattern->base.matrix, filter, - extents->x + extents->width/2., - extents->y + extents->height/2.); - - - _cairo_xcb_picture_set_extend (picture, pattern->base.extend); - _cairo_xcb_picture_set_component_alpha (picture, pattern->base.has_component_alpha); - + _cairo_xcb_surface_setup_surface_picture (picture, pattern, extents); return picture; } |