Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev-tablet.c | 50 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
index 2b90e08..52742cf 100644
--- a/src/evdev-tablet.c
+++ b/src/evdev-tablet.c
@@ -408,7 +408,7 @@ copy_button_cap(const struct tablet_dispatch *tablet,
                set_bit(tool->buttons, button);
 }
 
-static void
+static int
 tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet,
                            struct libinput_tool *tool)
 {
@@ -416,6 +416,8 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch 
*tablet,
        WacomDeviceDatabase *db;
        const WacomStylus *s = NULL;
        int code;
+       WacomStylusType type;
+       int rc = 1;
 
        db = libwacom_database_new();
        if (!db)
@@ -424,7 +426,8 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch 
*tablet,
        if (!s)
                goto out;
 
-       if (libwacom_stylus_get_type(s) == WSTYLUS_PUCK) {
+       type = libwacom_stylus_get_type(s);
+       if (type == WSTYLUS_PUCK) {
                for (code = BTN_LEFT;
                     code < BTN_LEFT + libwacom_stylus_get_num_buttons(s);
                     code++)
@@ -437,9 +440,29 @@ 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:
+       case WSTYLUS_MARKER:
+       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;
+       default:
+               break;
+       }
+
+       rc = 0;
 out:
        if (db)
                libwacom_database_destroy(db);
+       return rc;
 #endif
 }
 
@@ -449,23 +472,20 @@ tool_set_bits(const struct tablet_dispatch *tablet,
 {
        enum libinput_tool_type type = tool->type;
 
-       /* Determine the axis capabilities of the tool. Here's a break
-        * down of the heuristics used here:
-        * - The Wacom art pen supports all of the extra axes, along
-        *   with rotation
-        * - The Wacom airbrush supports a wheel with a ~90 deg
-        *   range.
-        * - All of normal pens and the airbrush support all of the
-        *   extra axes if the tablet can report them
-        * - All of the mouse-like devices don't report any of
-        *   the extra axes except for rotation (calculated from tilt x/y).
+#if HAVE_LIBWACOM
+       if (tool_set_bits_from_libwacom(tablet, tool) == 0)
+               return;
+#endif
+       /* If we don't have libwacom, we simply copy any axis we have on the
+          tablet onto the tool. Except we know that mice only have rotation
+          anyway.
         */
        switch (type) {
+       case LIBINPUT_TOOL_AIRBRUSH:
        case LIBINPUT_TOOL_PEN:
        case LIBINPUT_TOOL_ERASER:
        case LIBINPUT_TOOL_PENCIL:
        case LIBINPUT_TOOL_BRUSH:
-       case LIBINPUT_TOOL_AIRBRUSH:
                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);
@@ -475,9 +495,6 @@ tool_set_bits(const struct tablet_dispatch *tablet,
                break;
        }
 
-#if HAVE_LIBWACOM
-       tool_set_bits_from_libwacom(tablet, tool);
-#else
        /* If we don't have libwacom, copy all pen-related ones from the
           tablet vs all mouse-related ones */
        switch (type) {
@@ -501,7 +518,6 @@ tool_set_bits(const struct tablet_dispatch *tablet,
        default:
                break;
        }
-#endif
 }
 
 static struct libinput_tool *
-- 
2.1.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to