[PATCH weston] Apply the zoom transformation before the output transformation
Kristian Høgsberg
hoegsberg at gmail.com
Tue May 6 15:37:36 PDT 2014
On Tue, May 06, 2014 at 07:04:15PM +0100, Neil Roberts wrote:
> The zoom translation is just a scale and a translate. The translation
> is calculated based on the coordinates of the pointer which are in
> global space. Previously the calculated translation was transformed by
> the output transformation so that when the zoom transform is applied
> after the output transform then it will be correct. However if we just
> apply the zoom transformation first then we get the same result
> without the zoom code having to be aware of the output transformation.
>
> This also fixes weston_output_transform_coordinate which was applying
> the output and zoom transforms in the wrong order.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=78211
> ---
> src/compositor.c | 4 ++--
> src/zoom.c | 47 -----------------------------------------------
I love it:
> 2 files changed, 2 insertions(+), 49 deletions(-)
Best bug fix ever. Thanks, applied.
Kristian
> diff --git a/src/compositor.c b/src/compositor.c
> index 3d65e4c..cd1ca9a 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -3198,8 +3198,6 @@ weston_output_update_matrix(struct weston_output *output)
> 2.0 / output->width,
> -2.0 / output->height, 1);
>
> - weston_output_compute_transform(output);
> -
> if (output->zoom.active) {
> magnification = 1 / (1 - output->zoom.spring_z.current);
> weston_output_update_zoom(output);
> @@ -3209,6 +3207,8 @@ weston_output_update_matrix(struct weston_output *output)
> magnification, 1.0);
> }
>
> + weston_output_compute_transform(output);
> +
> output->dirty = 0;
> }
>
> diff --git a/src/zoom.c b/src/zoom.c
> index 622c0d7..7553849 100644
> --- a/src/zoom.c
> +++ b/src/zoom.c
> @@ -111,50 +111,6 @@ zoom_area_center_from_pointer(struct weston_output *output,
> }
>
> static void
> -weston_zoom_apply_output_transform(struct weston_output *output,
> - float *x, float *y)
> -{
> - float tx, ty;
> -
> - switch(output->transform) {
> - case WL_OUTPUT_TRANSFORM_NORMAL:
> - default:
> - return;
> - case WL_OUTPUT_TRANSFORM_90:
> - tx = -*y;
> - ty = *x;
> - break;
> - case WL_OUTPUT_TRANSFORM_180:
> - tx = -*x;
> - ty = -*y;
> - break;
> - case WL_OUTPUT_TRANSFORM_270:
> - tx = *y;
> - ty = -*x;
> - break;
> - case WL_OUTPUT_TRANSFORM_FLIPPED:
> - tx = -*x;
> - ty = *y;
> - break;
> - case WL_OUTPUT_TRANSFORM_FLIPPED_90:
> - tx = -*y;
> - ty = -*x;
> - break;
> - case WL_OUTPUT_TRANSFORM_FLIPPED_180:
> - tx = *x;
> - ty = -*y;
> - break;
> - case WL_OUTPUT_TRANSFORM_FLIPPED_270:
> - tx = *y;
> - ty = *x;
> - break;
> - }
> -
> - *x = tx;
> - *y = ty;
> -}
> -
> -static void
> weston_output_update_zoom_transform(struct weston_output *output)
> {
> float global_x, global_y;
> @@ -183,9 +139,6 @@ weston_output_update_zoom_transform(struct weston_output *output)
> ((((global_y - output->y) / output->height) *
> (level * 2)) - level) * ratio;
>
> - weston_zoom_apply_output_transform(output, &output->zoom.trans_x,
> - &output->zoom.trans_y);
> -
> trans_max = level * 2 - level;
> trans_min = -trans_max;
>
> --
> 1.9.0
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list