On Thu, Nov 14, 2013 at 11:42:51PM +0100, Giulio Camuffo wrote:
> ---
>  src/compositor.h |  3 +++
>  src/input.c      |  8 --------
>  src/shell.c      |  3 +--
>  src/zoom.c       | 27 +++++++++++++++++++++++++++
>  4 files changed, 31 insertions(+), 10 deletions(-)

That is nice, I like it a lot.

Kristian

> diff --git a/src/compositor.h b/src/compositor.h
> index 624d475..95928a4 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -155,6 +155,7 @@ struct weston_output_zoom {
>       struct weston_fixed_point from;
>       struct weston_fixed_point to;
>       struct weston_fixed_point current;
> +     struct wl_listener motion_listener;
>  };
>  
>  /* bit compatible with drm definitions. */
> @@ -1148,6 +1149,8 @@ weston_output_init_zoom(struct weston_output *output);
>  void
>  weston_output_update_zoom(struct weston_output *output);
>  void
> +weston_output_activate_zoom(struct weston_output *output);
> +void
>  weston_output_update_matrix(struct weston_output *output);
>  void
>  weston_output_move(struct weston_output *output, int x, int y);
> diff --git a/src/input.c b/src/input.c
> index e6b070d..f1cf938 100644
> --- a/src/input.c
> +++ b/src/input.c
> @@ -712,9 +712,7 @@ weston_pointer_clamp(struct weston_pointer *pointer, 
> wl_fixed_t *fx, wl_fixed_t
>  static void
>  move_pointer(struct weston_seat *seat, wl_fixed_t x, wl_fixed_t y)
>  {
> -     struct weston_compositor *ec = seat->compositor;
>       struct weston_pointer *pointer = seat->pointer;
> -     struct weston_output *output;
>       int32_t ix, iy;
>  
>       weston_pointer_clamp (pointer, &x, &y);
> @@ -725,12 +723,6 @@ move_pointer(struct weston_seat *seat, wl_fixed_t x, 
> wl_fixed_t y)
>       ix = wl_fixed_to_int(x);
>       iy = wl_fixed_to_int(y);
>  
> -     wl_list_for_each(output, &ec->output_list, link)
> -             if (output->zoom.active &&
> -                 pixman_region32_contains_point(&output->region,
> -                                                ix, iy, NULL))
> -                     weston_output_update_zoom(output);
> -
>       if (pointer->sprite) {
>               weston_view_set_position(pointer->sprite,
>                                        ix - pointer->hotspot_x,
> diff --git a/src/shell.c b/src/shell.c
> index 9a9127b..cbb741a 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -3052,8 +3052,7 @@ do_zoom(struct weston_seat *seat, uint32_t time, 
> uint32_t key, uint32_t axis,
>                       else if (output->zoom.level > output->zoom.max_level)
>                               output->zoom.level = output->zoom.max_level;
>                       else if (!output->zoom.active) {
> -                             output->zoom.active = 1;
> -                             output->disable_planes++;
> +                             weston_output_activate_zoom(output);
>                       }
>  
>                       output->zoom.spring_z.target = output->zoom.level;
> diff --git a/src/zoom.c b/src/zoom.c
> index 962ed6d..622c0d7 100644
> --- a/src/zoom.c
> +++ b/src/zoom.c
> @@ -45,6 +45,7 @@ weston_zoom_frame_z(struct weston_animation *animation,
>               if (output->zoom.active && output->zoom.level <= 0.0) {
>                       output->zoom.active = 0;
>                       output->disable_planes--;
> +                     wl_list_remove(&output->zoom.motion_listener.link);
>               }
>               output->zoom.spring_z.current = output->zoom.level;
>               wl_list_remove(&animation->link);
> @@ -236,6 +237,31 @@ weston_output_update_zoom(struct weston_output *output)
>       weston_output_update_zoom_transform(output);
>  }
>  
> +static void
> +motion(struct wl_listener *listener, void *data)
> +{
> +     struct weston_output_zoom *zoom =
> +             container_of(listener, struct weston_output_zoom, 
> motion_listener);
> +     struct weston_output *output =
> +             container_of(zoom, struct weston_output, zoom);
> +
> +     weston_output_update_zoom(output);
> +}
> +
> +WL_EXPORT void
> +weston_output_activate_zoom(struct weston_output *output)
> +{
> +     struct weston_seat *seat = weston_zoom_pick_seat(output->compositor);
> +
> +     if (output->zoom.active)
> +             return;
> +
> +     output->zoom.active = 1;
> +     output->disable_planes++;
> +     wl_signal_add(&seat->pointer->motion_signal,
> +                   &output->zoom.motion_listener);
> +}
> +
>  WL_EXPORT void
>  weston_output_init_zoom(struct weston_output *output)
>  {
> @@ -253,4 +279,5 @@ weston_output_init_zoom(struct weston_output *output)
>       output->zoom.spring_xy.friction = 1000;
>       output->zoom.animation_xy.frame = weston_zoom_frame_xy;
>       wl_list_init(&output->zoom.animation_xy.link);
> +     output->zoom.motion_listener.notify = motion;
>  }
> -- 
> 1.8.4.2
> 
> _______________________________________________
> 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