[PATCH libinput 16/24] tablet: Emit axis events on v/h stylus tilt changes.

Carlos Garnacho carlosg at gnome.org
Mon Apr 21 10:11:25 PDT 2014


Those are normalized to be in the [-1..1] range.

Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
---
 src/evdev-tablet.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
index 70f3210..cc55c74 100644
--- a/src/evdev-tablet.c
+++ b/src/evdev-tablet.c
@@ -245,6 +245,16 @@ normalize_axis(const struct axis_info *axis_info)
 	double range = axis_info->abs.maximum - axis_info->abs.minimum;
 	double value = (axis_info->abs.value + axis_info->abs.minimum) / range;
 
+	switch (axis_info->axis) {
+	case LIBINPUT_POINTER_AXIS_VERTICAL_TILT:
+	case LIBINPUT_POINTER_AXIS_HORIZONTAL_TILT:
+		/* Map to the (-1,1) range */
+		value = (value * 2) - 1;
+		break;
+	default:
+		break;
+	}
+
 	return value;
 }
 
@@ -412,6 +422,19 @@ static struct evdev_dispatch_interface tablet_interface = {
 	tablet_destroy
 };
 
+static void
+tablet_init_axes(struct tablet_dispatch *tablet,
+		 struct evdev_device *device)
+{
+	if (libevdev_has_event_code(device->evdev, EV_ABS, ABS_TILT_X) &&
+	    libevdev_has_event_code(device->evdev, EV_ABS, ABS_TILT_Y)) {
+		tablet_add_axis(tablet, device, ABS_TILT_X,
+				LIBINPUT_POINTER_AXIS_HORIZONTAL_TILT);
+		tablet_add_axis(tablet, device, ABS_TILT_Y,
+				LIBINPUT_POINTER_AXIS_VERTICAL_TILT);
+	}
+}
+
 static int
 tablet_init(struct tablet_dispatch *tablet,
 	    struct evdev_device *device)
@@ -421,6 +444,8 @@ tablet_init(struct tablet_dispatch *tablet,
 	tablet->status = TABLET_NONE;
 	tablet->state.tool = LIBINPUT_TOOL_NONE;
 
+	tablet_init_axes(tablet, device);
+
 	return 0;
 }
 
-- 
1.9.0



More information about the wayland-devel mailing list