Some Wacom tablets can report the rotation of the pen about its barrel
in the ABS_Z axis. Report this via LIBINPUT_TABLET_AXIS_TWIST.

Signed-off-by: Jason Gerecke <killert...@gmail.com>
Acked-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev-tablet.c | 6 ++++++
 src/evdev-tablet.h | 6 ++++++
 src/libinput.c     | 1 +
 src/libinput.h     | 5 ++++-
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
index b924800..a7101da 100644
--- a/src/evdev-tablet.c
+++ b/src/evdev-tablet.c
@@ -47,6 +47,7 @@ tablet_process_absolute(struct tablet_dispatch *tablet,
        switch (e->code) {
        case ABS_X:
        case ABS_Y:
+       case ABS_Z:
        case ABS_PRESSURE:
        case ABS_TILT_X:
        case ABS_TILT_Y:
@@ -147,6 +148,7 @@ tablet_check_notify_axes(struct tablet_dispatch *tablet,
                        break;
                case LIBINPUT_TABLET_AXIS_TILT_X:
                case LIBINPUT_TABLET_AXIS_TILT_Y:
+               case LIBINPUT_TABLET_AXIS_TWIST:
                        tablet->axes[a] = normalize_double_ended(absinfo);
                        break;
                default:
@@ -332,6 +334,10 @@ tablet_get_tool(struct tablet_dispatch *tablet,
                                       LIBINPUT_TABLET_AXIS_TILT_Y))
                                set_bit(tool->axis_caps,
                                        LIBINPUT_TABLET_AXIS_TILT_Y);
+                       if (bit_is_set(tablet->axis_caps,
+                                      LIBINPUT_TABLET_AXIS_TWIST))
+                               set_bit(tool->axis_caps,
+                                       LIBINPUT_TABLET_AXIS_TWIST);
                        break;
                default:
                        break;
diff --git a/src/evdev-tablet.h b/src/evdev-tablet.h
index cb37577..73c178d 100644
--- a/src/evdev-tablet.h
+++ b/src/evdev-tablet.h
@@ -72,6 +72,9 @@ evcode_to_axis(const uint32_t evcode)
        case ABS_Y:
                axis = LIBINPUT_TABLET_AXIS_Y;
                break;
+       case ABS_Z:
+               axis = LIBINPUT_TABLET_AXIS_TWIST;
+               break;
        case ABS_DISTANCE:
                axis = LIBINPUT_TABLET_AXIS_DISTANCE;
                break;
@@ -116,6 +119,9 @@ axis_to_evcode(const enum libinput_tablet_axis axis)
        case LIBINPUT_TABLET_AXIS_TILT_Y:
                evcode = ABS_TILT_Y;
                break;
+       case LIBINPUT_TABLET_AXIS_TWIST:
+               evcode = ABS_Z;
+               break;
        default:
                abort();
        }
diff --git a/src/libinput.c b/src/libinput.c
index d6c1685..64b0f95 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -532,6 +532,7 @@ libinput_event_tablet_get_axis_value(struct 
libinput_event_tablet *event,
                case LIBINPUT_TABLET_AXIS_PRESSURE:
                case LIBINPUT_TABLET_AXIS_TILT_X:
                case LIBINPUT_TABLET_AXIS_TILT_Y:
+               case LIBINPUT_TABLET_AXIS_TWIST:
                        return event->axes[axis];
                default:
                        return 0;
diff --git a/src/libinput.h b/src/libinput.h
index 78bb9ef..03df3bb 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -277,7 +277,8 @@ enum libinput_tablet_axis {
        LIBINPUT_TABLET_AXIS_PRESSURE = 3,
        LIBINPUT_TABLET_AXIS_TILT_X = 4,
        LIBINPUT_TABLET_AXIS_TILT_Y = 5,
-       LIBINPUT_TABLET_AXIS_CNT = LIBINPUT_TABLET_AXIS_TILT_Y + 1
+       LIBINPUT_TABLET_AXIS_TWIST = 6,
+       LIBINPUT_TABLET_AXIS_CNT = LIBINPUT_TABLET_AXIS_TWIST + 1
 };
 
 /**
@@ -1022,6 +1023,8 @@ libinput_event_tablet_axis_has_changed(struct 
libinput_event_tablet *event,
  * - @ref LIBINPUT_TABLET_AXIS_TILT_X and @ref LIBINPUT_TABLET_AXIS_TILT_Y -
  *   normalized value between -1 and 1 that indicates the X or Y tilt of the
  *   tool
+ * - @ref LIBINPUT_TABLET_AXIS_TWIST - normalized value between -1 and 1
+ *   that indicates the rotation of the tool about its long axis
  *
  * @param event The libinput tablet event
  * @param axis The axis to retrieve the value of
-- 
2.1.3

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

Reply via email to