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