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@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to