diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 0eb6e7d28..b9d59d3da 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -795,8 +795,7 @@ _cairo_gstate_copy_transformed_pattern (cairo_gstate_t *gstate, if (status) return status; - _cairo_pattern_transform (pattern, ctm_inverse); - + /* apply device_transform 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 +803,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; }