diff --git a/hw/xfree86/drivers/inputtest/inputtestdrv.man b/hw/xfree86/drivers/inputtest/inputtestdrv.man index 4ec872c6d..4741783d5 100644 --- a/hw/xfree86/drivers/inputtest/inputtestdrv.man +++ b/hw/xfree86/drivers/inputtest/inputtestdrv.man @@ -70,6 +70,9 @@ Sets the maximum number of simultaneous touches for touch devices. .TP 7 .BI "Option \*qPointerButtonCount\*q \*q" int \*q Sets the maximum number of buttons in pointer devices. +.TP 7 +.BI "Option \*qPointerHasPressure\*q \*q" bool \*q +Selects whether "Abs Pressure" is available at the axis 4 in pointer devices. .SH INTERFACE WITH THE DRIVER The communication with the driver is a binary protocol defined in diff --git a/hw/xfree86/drivers/inputtest/xf86-input-inputtest.c b/hw/xfree86/drivers/inputtest/xf86-input-inputtest.c index 099770b2b..b2cc14e8c 100644 --- a/hw/xfree86/drivers/inputtest/xf86-input-inputtest.c +++ b/hw/xfree86/drivers/inputtest/xf86-input-inputtest.c @@ -47,7 +47,7 @@ #include "xf86-input-inputtest-protocol.h" -#define MAX_POINTER_NUM_AXES 4 /* x, y, hscroll, vscroll */ +#define MAX_POINTER_NUM_AXES 5 /* x, y, hscroll, vscroll, [pressure] */ #define TOUCH_NUM_AXES 4 /* x, y, hscroll, vscroll */ #define TOUCH_MAX_SLOTS 15 @@ -303,6 +303,7 @@ init_pointer(InputInfoPtr pInfo) DeviceIntPtr dev= pInfo->dev; int min, max, res; int nbuttons = 7; + bool has_pressure = false; int num_axes = 0; unsigned char btnmap[MAX_BUTTONS + 1]; @@ -310,6 +311,8 @@ init_pointer(InputInfoPtr pInfo) Atom axislabels[MAX_POINTER_NUM_AXES]; nbuttons = xf86SetIntOption(pInfo->options, "PointerButtonCount", 7); + has_pressure = xf86SetBoolOption(pInfo->options, "PointerHasPressure", + false); init_button_map(btnmap, ARRAY_SIZE(btnmap)); init_button_labels(btnlabels, ARRAY_SIZE(btnlabels)); @@ -318,6 +321,8 @@ init_pointer(InputInfoPtr pInfo) axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_HSCROLL); axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_VSCROLL); + if (has_pressure) + axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE); InitPointerDeviceStruct((DevicePtr)dev, btnmap, @@ -338,6 +343,12 @@ init_pointer(InputInfoPtr pInfo) SetScrollValuator(dev, 2, SCROLL_TYPE_HORIZONTAL, 15, 0); SetScrollValuator(dev, 3, SCROLL_TYPE_VERTICAL, 15, 0); + + if (has_pressure) { + xf86InitValuatorAxisStruct(dev, 4, + XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE), + 0, 1000, 1, 1, 1, Absolute); + } } static void @@ -346,6 +357,7 @@ init_pointer_absolute(InputInfoPtr pInfo) DeviceIntPtr dev = pInfo->dev; int min, max, res; int nbuttons = 7; + bool has_pressure = false; int num_axes = 0; unsigned char btnmap[MAX_BUTTONS + 1]; @@ -353,6 +365,8 @@ init_pointer_absolute(InputInfoPtr pInfo) Atom axislabels[MAX_POINTER_NUM_AXES]; nbuttons = xf86SetIntOption(pInfo->options, "PointerButtonCount", 7); + has_pressure = xf86SetBoolOption(pInfo->options, "PointerHasPressure", + false); init_button_map(btnmap, ARRAY_SIZE(btnmap)); init_button_labels(btnlabels, ARRAY_SIZE(btnlabels)); @@ -361,6 +375,8 @@ init_pointer_absolute(InputInfoPtr pInfo) axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y); axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_HSCROLL); axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_VSCROLL); + if (has_pressure) + axislabels[num_axes++] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE); InitPointerDeviceStruct((DevicePtr)dev, btnmap, @@ -382,6 +398,11 @@ init_pointer_absolute(InputInfoPtr pInfo) SetScrollValuator(dev, 2, SCROLL_TYPE_HORIZONTAL, 15, 0); SetScrollValuator(dev, 3, SCROLL_TYPE_VERTICAL, 15, 0); + if (has_pressure) { + xf86InitValuatorAxisStruct(dev, 4, + XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE), + 0, 1000, 1, 1, 1, Absolute); + } } static void