From be5c7d7176820c4518ea7f9ae445ba6ff04877ad Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 10 Mar 2015 12:40:14 +1000 Subject: [PATCH] tablet: rely on libwacom for the list of axis capabilities Signed-off-by: Peter Hutterer Reviewed-by: Benjamin Tissoires --- configure.ac | 2 +- src/evdev-tablet.c | 54 +++++++++++++++++++++------------------------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac index 3defe293..66d64c87 100644 --- a/configure.ac +++ b/configure.ac @@ -186,7 +186,7 @@ AC_ARG_ENABLE(libwacom, [use_libwacom="$enableval"], [use_libwacom="yes"]) if test "x$use_libwacom" = "xyes"; then - PKG_CHECK_MODULES(LIBWACOM, [libwacom], [HAVE_LIBWACOM="yes"]) + PKG_CHECK_MODULES(LIBWACOM, [libwacom >= 0.12], [HAVE_LIBWACOM="yes"]) AC_DEFINE(HAVE_LIBWACOM, 1, [Build with libwacom]) fi diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c index 093c79f6..3ddca742 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -599,6 +599,7 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet, const WacomStylus *s = NULL; int code; WacomStylusType type; + WacomAxisTypeFlags axes; db = libwacom_database_new(); if (!db) { @@ -624,38 +625,33 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet, copy_button_cap(tablet, tool, BTN_TOUCH); } - /* Eventually we want libwacom to tell us each axis on each device - separately. */ - switch(type) { - case WSTYLUS_AIRBRUSH: - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_SLIDER); - /* fall-through */ - case WSTYLUS_MARKER: - if (type == WSTYLUS_MARKER) - copy_axis_cap(tablet, tool, - LIBINPUT_TABLET_AXIS_ROTATION_Z); - /* fallthrough */ - case WSTYLUS_GENERAL: - case WSTYLUS_INKING: - case WSTYLUS_CLASSIC: - case WSTYLUS_STROKE: - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_PRESSURE); - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_DISTANCE); - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_TILT_X); - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_TILT_Y); - break; - case WSTYLUS_PUCK: - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_ROTATION_Z); - copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_DISTANCE); - /* lens cursors don't have a wheel */ - if (!libwacom_stylus_has_lens(s)) + if (libwacom_stylus_has_wheel(s)) + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_REL_WHEEL); + + axes = libwacom_stylus_get_axes(s); + + if (axes & WACOM_AXIS_TYPE_TILT) { + /* tilt on the puck is converted to rotation */ + if (type == WSTYLUS_PUCK) { + set_bit(tool->axis_caps, + LIBINPUT_TABLET_AXIS_ROTATION_Z); + } else { copy_axis_cap(tablet, tool, - LIBINPUT_TABLET_AXIS_REL_WHEEL); - break; - default: - break; + LIBINPUT_TABLET_AXIS_TILT_X); + copy_axis_cap(tablet, + tool, + LIBINPUT_TABLET_AXIS_TILT_Y); + } } + if (axes & WACOM_AXIS_TYPE_ROTATION_Z) + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_ROTATION_Z); + if (axes & WACOM_AXIS_TYPE_DISTANCE) + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_DISTANCE); + if (axes & WACOM_AXIS_TYPE_SLIDER) + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_SLIDER); + if (axes & WACOM_AXIS_TYPE_PRESSURE) + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_PRESSURE); rc = 0; out: