We can greatly simplify weston_output_transform_coordinate now by simply
multiplying by the output matrix and converting the result to fixed point.
---
 src/compositor.c | 62 ++++----------------------------------------------------
 1 file changed, 4 insertions(+), 58 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index aef3246..ba9f886 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3539,66 +3539,12 @@ weston_output_transform_coordinate(struct weston_output 
*output,
                                   wl_fixed_t device_x, wl_fixed_t device_y,
                                   wl_fixed_t *x, wl_fixed_t *y)
 {
-       wl_fixed_t tx, ty;
-       wl_fixed_t width, height;
-       float zoom_scale, zx, zy;
+       struct weston_vector p = {{wl_fixed_to_double(device_x), 
wl_fixed_to_double(device_y), 0.0, 1.0}};
 
-       width = wl_fixed_from_int(output->width * output->current_scale - 1);
-       height = wl_fixed_from_int(output->height * output->current_scale - 1);
+       weston_matrix_transform(&output->matrix, &p);
 
-       switch(output->transform) {
-       case WL_OUTPUT_TRANSFORM_NORMAL:
-       default:
-               tx = device_x;
-               ty = device_y;
-               break;
-       case WL_OUTPUT_TRANSFORM_90:
-               tx = device_y;
-               ty = height - device_x;
-               break;
-       case WL_OUTPUT_TRANSFORM_180:
-               tx = width - device_x;
-               ty = height - device_y;
-               break;
-       case WL_OUTPUT_TRANSFORM_270:
-               tx = width - device_y;
-               ty = device_x;
-               break;
-       case WL_OUTPUT_TRANSFORM_FLIPPED:
-               tx = width - device_x;
-               ty = device_y;
-               break;
-       case WL_OUTPUT_TRANSFORM_FLIPPED_90:
-               tx = width - device_y;
-               ty = height - device_x;
-               break;
-       case WL_OUTPUT_TRANSFORM_FLIPPED_180:
-               tx = device_x;
-               ty = height - device_y;
-               break;
-       case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-               tx = device_y;
-               ty = device_x;
-               break;
-       }
-
-       tx /= output->current_scale;
-       ty /= output->current_scale;
-
-       if (output->zoom.active) {
-               zoom_scale = output->zoom.spring_z.current;
-               zx = (wl_fixed_to_double(tx) * (1.0f - zoom_scale) +
-                     output->width / 2.0f *
-                     (zoom_scale + output->zoom.trans_x));
-               zy = (wl_fixed_to_double(ty) * (1.0f - zoom_scale) +
-                     output->height / 2.0f *
-                     (zoom_scale + output->zoom.trans_y));
-               tx = wl_fixed_from_double(zx);
-               ty = wl_fixed_from_double(zy);
-       }
-
-       *x = tx + wl_fixed_from_int(output->x);
-       *y = ty + wl_fixed_from_int(output->y);
+       *x = wl_fixed_from_double(p.f[0]/p.f[3]);
+       *y = wl_fixed_from_double(p.f[1]/p.f[3]);
 }
 
 static void
-- 
2.1.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to