[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