[PATCH libinput v2] tablet: fix get_x_transformed() and get_y_transformed()

Peter Hutterer peter.hutterer at who-t.net
Mon Jul 21 18:08:27 PDT 2014


On Sun, Jul 20, 2014 at 10:20:41PM -0400, Stephen Chandler Paul wrote:
> Because the values for each axis were stored in struct tablet_dispatch in
> millimeters, coordinates were not being translated properly to screen
> coordinates. This stores the values internally as raw coordinates, and only
> translates them to millimeters if the client asks for it.
> 
> Changes since last patch:
> - Basically just scrapped the other one and rewrote it. We don't keep track of
>   both the raw x and y plus the millimeter x and y anymore.
> 
> Signed-off-by: Stephen Chandler Paul <thatslyude at gmail.com>

pushed with a whitespace fix, thanks

Cheers,
   Peter

> ---
>  src/evdev-tablet.c |  5 ++---
>  src/libinput.c     | 20 ++++++++++++++++++--
>  2 files changed, 20 insertions(+), 5 deletions(-)
> 
> diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
> index d1ad4bb..ca3cc05 100644
> --- a/src/evdev-tablet.c
> +++ b/src/evdev-tablet.c
> @@ -142,9 +142,8 @@ tablet_check_notify_axes(struct tablet_dispatch *tablet,
>  		switch (a) {
>  		case LIBINPUT_TABLET_AXIS_X:
>  		case LIBINPUT_TABLET_AXIS_Y:
> -			tablet->axes[a] = evdev_convert_to_mm(absinfo,
> -							      absinfo->value);
> -			break;
> +			tablet->axes[a] = absinfo->value;
> +				break;
>  		case LIBINPUT_TABLET_AXIS_DISTANCE:
>  		case LIBINPUT_TABLET_AXIS_PRESSURE:
>  			tablet->axes[a] = normalize_pressure_or_dist(absinfo);
> diff --git a/src/libinput.c b/src/libinput.c
> index e013f49..9aa7cbc 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -504,11 +504,27 @@ LIBINPUT_EXPORT double
>  libinput_event_tablet_get_axis_value(struct libinput_event_tablet *event,
>  				     enum libinput_tablet_axis axis)
>  {
> +	struct evdev_device *device =
> +		(struct evdev_device *) event->base.device;
> +
>  	if (event->base.type != LIBINPUT_EVENT_TABLET_AXIS)
>  		return 0;
>  
> -	return (axis >= 0 && axis < LIBINPUT_TABLET_AXIS_CNT) ?
> -		event->axes[axis] : 0;
> +	switch(axis) {
> +		case LIBINPUT_TABLET_AXIS_X:
> +			return evdev_convert_to_mm(device->abs.absinfo_x,
> +						   event->axes[axis]);
> +		case LIBINPUT_TABLET_AXIS_Y:
> +			return evdev_convert_to_mm(device->abs.absinfo_y,
> +						   event->axes[axis]);
> +		case LIBINPUT_TABLET_AXIS_DISTANCE:
> +		case LIBINPUT_TABLET_AXIS_PRESSURE:
> +		case LIBINPUT_TABLET_AXIS_TILT_X:
> +		case LIBINPUT_TABLET_AXIS_TILT_Y:
> +			return event->axes[axis];
> +		default:
> +			return 0;
> +	}
>  }
>  
>  LIBINPUT_EXPORT double
> -- 
> 1.8.5.5
> 


More information about the wayland-devel mailing list