Fix scaling with a device offset From: Jeff Muizelaar Apply the device offset transformation to the pattern before the ctm one. Fixes bug #16469. --- src/cairo-gstate.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 0eb6e7d..4ba2873 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -795,8 +795,8 @@ _cairo_gstate_copy_transformed_pattern (cairo_gstate_t *gstate, if (status) return status; - _cairo_pattern_transform (pattern, ctm_inverse); - + /* the device transform is applied first so that it is transformed by + * ctm_inverse */ if (cairo_pattern_get_type (original) == CAIRO_PATTERN_TYPE_SURFACE) { surface_pattern = (cairo_surface_pattern_t *) original; surface = surface_pattern->surface; @@ -804,6 +804,8 @@ _cairo_gstate_copy_transformed_pattern (cairo_gstate_t *gstate, _cairo_pattern_transform (pattern, &surface->device_transform); } + _cairo_pattern_transform (pattern, ctm_inverse); + return CAIRO_STATUS_SUCCESS; }