From 3c18d95b293eddaa25232bc06398c78bc8043cb4 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 28 Sep 2008 15:57:37 +0100 Subject: [PATCH] Compute device_transform_inverse. Because we can independently set either the device scale or the device offset, we need to be careful and recompute the inverse rather than simply assuming that the original contents of the device transform is identity. Fixes regression https://bugs.launchpad.net/inkscape/+bug/234546. --- src/cairo-surface.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cairo-surface.c b/src/cairo-surface.c index d3b735fa2..ea51d2f86 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -811,10 +811,8 @@ _cairo_surface_set_device_scale (cairo_surface_t *surface, surface->device_transform.xy = 0.0; surface->device_transform.yx = 0.0; - surface->device_transform_inverse.xx = 1.0 / sx; - surface->device_transform_inverse.yy = 1.0 / sy; - surface->device_transform_inverse.xy = 0.0; - surface->device_transform_inverse.yx = 0.0; + surface->device_transform_inverse = surface->device_transform; + cairo_matrix_invert (&surface->device_transform_inverse); } /** @@ -855,8 +853,8 @@ cairo_surface_set_device_offset (cairo_surface_t *surface, surface->device_transform.x0 = x_offset; surface->device_transform.y0 = y_offset; - surface->device_transform_inverse.x0 = - x_offset; - surface->device_transform_inverse.y0 = - y_offset; + surface->device_transform_inverse = surface->device_transform; + cairo_matrix_invert (&surface->device_transform_inverse); } slim_hidden_def (cairo_surface_set_device_offset);