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

Reply via email to