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