summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2014-05-20 15:53:19 -0500
committerJason Ekstrand <jason@jlekstrand.net>2014-05-20 15:53:19 -0500
commit25b633a320e8a20d425524bc4d856fe59bc61d17 (patch)
treeb4cf4bf73b36f6b4cc9b2bbd1c3878f42e8de03d
parentddc3819a1df88e022caa6721eca7971db9941c82 (diff)
pixman-renderer: Add a weston_matrix_to_pixman_transform function
-rw-r--r--src/pixman-renderer.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
index 93be9682..44b8a2c4 100644
--- a/src/pixman-renderer.c
+++ b/src/pixman-renderer.c
@@ -168,6 +168,23 @@ transform_apply_viewport(pixman_transform_t *transform,
}
static void
+weston_matrix_to_pixman_transform(pixman_transform_t *pt,
+ const struct weston_matrix *wm)
+{
+ /* Pixman supports only 2D transform matrix, but Weston uses 3D, *
+ * so we're omitting Z coordinate here. */
+ pt->matrix[0][0] = pixman_double_to_fixed(wm->d[0]);
+ pt->matrix[0][1] = pixman_double_to_fixed(wm->d[4]);
+ pt->matrix[0][2] = pixman_double_to_fixed(wm->d[12]);
+ pt->matrix[1][0] = pixman_double_to_fixed(wm->d[1]);
+ pt->matrix[1][1] = pixman_double_to_fixed(wm->d[5]);
+ pt->matrix[1][2] = pixman_double_to_fixed(wm->d[13]);
+ pt->matrix[2][0] = pixman_double_to_fixed(wm->d[3]);
+ pt->matrix[2][1] = pixman_double_to_fixed(wm->d[7]);
+ pt->matrix[2][2] = pixman_double_to_fixed(wm->d[15]);
+}
+
+static void
repaint_region(struct weston_view *ev, struct weston_output *output,
pixman_region32_t *region, pixman_region32_t *surf_region,
pixman_op_t pixman_op)
@@ -179,7 +196,7 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
struct weston_buffer_viewport *vp = &ev->surface->buffer_viewport;
pixman_region32_t final_region;
float view_x, view_y;
- pixman_transform_t transform;
+ pixman_transform_t transform, surface_transform;
pixman_fixed_t fw, fh;
pixman_image_t *mask_image;
pixman_color_t mask = { 0, };
@@ -263,26 +280,9 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
pixman_double_to_fixed (output->y));
if (ev->transform.enabled) {
- /* Pixman supports only 2D transform matrix, but Weston uses 3D,
- * so we're omitting Z coordinate here
- */
- pixman_transform_t surface_transform = {{
- { D2F(ev->transform.matrix.d[0]),
- D2F(ev->transform.matrix.d[4]),
- D2F(ev->transform.matrix.d[12]),
- },
- { D2F(ev->transform.matrix.d[1]),
- D2F(ev->transform.matrix.d[5]),
- D2F(ev->transform.matrix.d[13]),
- },
- { D2F(ev->transform.matrix.d[3]),
- D2F(ev->transform.matrix.d[7]),
- D2F(ev->transform.matrix.d[15]),
- }
- }};
-
- pixman_transform_invert(&surface_transform, &surface_transform);
- pixman_transform_multiply (&transform, &surface_transform, &transform);
+ weston_matrix_to_pixman_transform(&surface_transform,
+ &ev->transform.inverse);
+ pixman_transform_multiply(&transform, &surface_transform, &transform);
} else {
pixman_transform_translate(&transform, NULL,
pixman_double_to_fixed ((double)-ev->geometry.x),