[PATCH weston 3/5] compositor: fix weston_output_update_zoom() types

Scott Moreau oreaus at gmail.com
Mon Jun 4 10:19:20 PDT 2012


On Mon, Jun 4, 2012 at 8:49 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:

> The function declaration had different parameter types than the function
> definition. The compiler did not warn about that, because wl_fixed_t
> used to be typedef'd to int32_t, so with that substitution they were
> equal.
>
> Fix the declaration and definition to match.
>
> Also, convert wl_fixed_t directly into floats, to avoid truncation.
>
> Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> ---
>  src/compositor.c |   14 +++++++-------
>  src/compositor.h |    2 +-
>  2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index 797ab99..882e081 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -2755,24 +2755,24 @@ weston_text_cursor_position_notify(struct
> weston_surface *surface,
>
>  WL_EXPORT void
>  weston_output_update_zoom(struct weston_output *output,
> -                                               wl_fixed_t fx,
> -                                               wl_fixed_t fy,
> +                                               wl_fixed_t x,
> +                                               wl_fixed_t y,
>                                                uint32_t type)
>  {
> -       int32_t x, y;
> +       float global_x, global_y;
>        float trans_min, trans_max;
>
>        if (output->zoom.level >= 1.0)
>                return;
>
> -       x = wl_fixed_to_int(fx);
> -       y = wl_fixed_to_int(fy);
> +       global_x = wl_fixed_to_double(x);
> +       global_y = wl_fixed_to_double(y);
>
>        output->zoom.trans_x =
> -               (((float)(x - output->x) / output->current->width) *
> +               (((global_x - output->x) / output->current->width) *
>                (output->zoom.level * 2)) - output->zoom.level;
>        output->zoom.trans_y =
> -               (((float)(y - output->y) / output->current->height) *
> +               (((global_y - output->y) / output->current->height) *
>                (output->zoom.level * 2)) - output->zoom.level;
>
>        if (type == ZOOM_TEXT_CURSOR) {
> diff --git a/src/compositor.h b/src/compositor.h
> index 836f10a..21899d4 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -632,7 +632,7 @@ void
>  weston_compositor_shutdown(struct weston_compositor *ec);
>  void
>  weston_output_update_zoom(struct weston_output *output,
> -                                               int x, int y, uint32_t
> type);
> +                         wl_fixed_t x, wl_fixed_t y, uint32_t type);
>  void
>  weston_text_cursor_position_notify(struct weston_surface *surface, int x,
> int y);
>  void
> --
> 1.7.3.4
>
>
Hi Pekka, thanks for your attention here. The first part of this patch
fixes a problem I wasn't sure about, where the zoomed position 'jumps
around' a bit. It's most noticeable while zoomed in a significant amount
and typing into a rotated weston-terminal. The latter part has already been
fixed by
http://cgit.freedesktop.org/wayland/weston/commit/?id=ae71220fc9fbb9b43af4fcf8f3f57305ffcd9110


Thanks,

Scott
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20120604/d9aa3c26/attachment.html>


More information about the wayland-devel mailing list