Same axes as the pen, but axis number 6 is the wheel (which really is a slider)
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- src/xf86libinput.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/xf86libinput.c b/src/xf86libinput.c index a438a46..477ec5c 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -789,7 +789,7 @@ xf86libinput_init_touch(InputInfoPtr pInfo) } -static void +static int xf86libinput_init_tablet_pen_or_eraser(InputInfoPtr pInfo, struct libinput_tablet_tool *tool) { @@ -815,6 +815,37 @@ xf86libinput_init_tablet_pen_or_eraser(InputInfoPtr pInfo, XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_Y), min, max, res * 1000, 0, res * 1000, Absolute); } + + return axis; +} + +static void +xf86libinput_init_tablet_airbrush(InputInfoPtr pInfo, + struct libinput_tablet_tool *tool) +{ + DeviceIntPtr dev = pInfo->dev; + int min, max, res; + int axis; + + /* first axes are shared */ + axis = xf86libinput_init_tablet_pen_or_eraser(pInfo, tool); + if (axis < 5) { + xf86IDrvMsg(pInfo, X_ERROR, "Airbrush tool has missing pressure or tilt axes\n"); + return; + } + + if (!libinput_tablet_tool_has_slider(tool)) { + xf86IDrvMsg(pInfo, X_ERROR, "Airbrush tool is missing the slider axis\n"); + return; + } + + min = -TABLET_AXIS_MAX; + max = TABLET_AXIS_MAX; + res = 0; + + xf86InitValuatorAxisStruct(dev, axis, + XIGetKnownProperty(AXIS_LABEL_PROP_ABS_THROTTLE), + min, max, res * 1000, 0, res * 1000, Absolute); } static void @@ -840,6 +871,8 @@ xf86libinput_init_tablet(InputInfoPtr pInfo) naxes++; if (libinput_tablet_tool_has_tilt(tool)) naxes += 2; + if (libinput_tablet_tool_has_slider(tool)) + naxes++; InitPointerDeviceStruct((DevicePtr)dev, driver_data->options.btnmap, @@ -865,6 +898,9 @@ xf86libinput_init_tablet(InputInfoPtr pInfo) case LIBINPUT_TABLET_TOOL_TYPE_ERASER: xf86libinput_init_tablet_pen_or_eraser(pInfo, tool); break; + case LIBINPUT_TABLET_TOOL_TYPE_AIRBRUSH: + xf86libinput_init_tablet_airbrush(pInfo, tool); + break; default: xf86IDrvMsg(pInfo, X_ERROR, "Tool type not supported yet\n"); break; @@ -1276,6 +1312,12 @@ xf86libinput_handle_tablet_axis(InputInfoPtr pInfo, valuator_mask_set_double(mask, 4, value); } + if (libinput_tablet_tool_has_slider(tool)) { + value = libinput_event_tablet_tool_get_slider_position(event); + value *= TABLET_AXIS_MAX; + valuator_mask_set_double(mask, 5, value); + } + xf86PostMotionEventM(dev, Absolute, mask); } -- 2.5.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel