[PATCH wayland] cursor: Expose hotspot values as fixed point
Ander Conselvan de Oliveira
conselvan2 at gmail.com
Wed Apr 17 01:04:25 PDT 2013
On 04/16/2013 07:04 PM, Rob Bradford wrote:
> From: Rob Bradford <rob at linux.intel.com>
>
> The Wayland protocol specifies that the values to be passed in for the cursor
> hotspot should be fixed point.
This was changed by mistake by:
commit 9c0357af6ee42c318ce37b458ae7bdb7d51316cb
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Tue Apr 2 09:58:17 2013 +1000
protocol: document wl_pointer, wl_keyboard, wl_touch
Cheers,
Ander
> Unfortunately weston was expecting integers -
> since most clients pass the values from the cursor API into the set_cursor
> call we can minimize the impact of fixing the bug in weston by exposing the
> values fixed point.
>
> Bug spotted by Henri Tuhola <henri.tuhola at gmail.com>
> ---
> cursor/wayland-cursor.c | 8 ++++----
> cursor/wayland-cursor.h | 5 +++--
> 2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
> index 25e51c2..e6e464a 100644
> --- a/cursor/wayland-cursor.c
> +++ b/cursor/wayland-cursor.c
> @@ -220,8 +220,8 @@ wl_cursor_create_from_data(struct cursor_metadata *metadata,
> image->buffer = NULL;
> image->image.width = metadata->width;
> image->image.height = metadata->height;
> - image->image.hotspot_x = metadata->hotspot_x;
> - image->image.hotspot_y = metadata->hotspot_y;
> + image->image.hotspot_x = wl_fixed_from_int(metadata->hotspot_x);
> + image->image.hotspot_y = wl_fixed_from_int(metadata->hotspot_y);
> image->image.delay = 0;
>
> size = metadata->width * metadata->height * sizeof(uint32_t);
> @@ -280,8 +280,8 @@ wl_cursor_create_from_xcursor_images(XcursorImages *images,
>
> image->image.width = images->images[i]->width;
> image->image.height = images->images[i]->height;
> - image->image.hotspot_x = images->images[i]->xhot;
> - image->image.hotspot_y = images->images[i]->yhot;
> + image->image.hotspot_x = wl_fixed_from_int(images->images[i]->xhot);
> + image->image.hotspot_y = wl_fixed_from_int(images->images[i]->yhot);
> image->image.delay = images->images[i]->delay;
> cursor->total_delay += image->image.delay;
>
> diff --git a/cursor/wayland-cursor.h b/cursor/wayland-cursor.h
> index c7548ae..836f6ed 100644
> --- a/cursor/wayland-cursor.h
> +++ b/cursor/wayland-cursor.h
> @@ -24,6 +24,7 @@
> #define WAYLAND_CURSOR_H
>
> #include <stdint.h>
> +#include <wayland-util.h>
>
> #ifdef __cplusplus
> extern "C" {
> @@ -34,8 +35,8 @@ struct wl_cursor_theme;
> struct wl_cursor_image {
> uint32_t width; /* actual width */
> uint32_t height; /* actual height */
> - uint32_t hotspot_x; /* hot spot x (must be inside image) */
> - uint32_t hotspot_y; /* hot spot y (must be inside image) */
> + wl_fixed_t hotspot_x; /* hot spot x (must be inside image) */
> + wl_fixed_t hotspot_y; /* hot spot y (must be inside image) */
> uint32_t delay; /* animation delay to next frame (ms) */
> };
>
>
More information about the wayland-devel
mailing list