Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- configure.ac | 2 +- src/evdev-tablet.c | 56 +++++++++++++++++++++++++----------------------------- 2 files changed, 27 insertions(+), 31 deletions(-)
diff --git a/configure.ac b/configure.ac index 85db1fd..038022e 100644 --- a/configure.ac +++ b/configure.ac @@ -172,7 +172,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 3e3924c..c4b4154 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -592,6 +592,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) { @@ -617,38 +618,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: + 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_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); - /* 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: + if (axes & WACOM_AXIS_TYPE_PRESSURE) 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)) - copy_axis_cap(tablet, - tool, - LIBINPUT_TABLET_AXIS_REL_WHEEL); - break; - default: - break; - } rc = 0; out: -- 2.1.0 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel