And clean up the code to use less ABI ifdefs.
Signed-off-by: Peter Hutterer <[email protected]>
Reviewed-by: Ping Cheng <[email protected]>
---
src/xf86Wacom.c | 312 ++++++++++++++++++++++++++++++------------------------
1 files changed, 173 insertions(+), 139 deletions(-)
diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
index d4cdae8..ebac2ce 100644
--- a/src/xf86Wacom.c
+++ b/src/xf86Wacom.c
@@ -51,6 +51,8 @@
#include <xserver-properties.h>
#include <X11/extensions/XKB.h>
#include <xkbsrv.h>
+#else
+#define XIGetKnownProperty(prop) 0
#endif
static int wcmDevOpen(DeviceIntPtr pWcm);
@@ -398,6 +400,175 @@ static void wcmInitialToolSize(InputInfoPtr pInfo)
return;
}
+static int
+wcmInitAxes(DeviceIntPtr pWcm)
+{
+ InputInfoPtr pInfo = (InputInfoPtr)pWcm->public.devicePrivate;
+ WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
+ WacomCommonPtr common = priv->common;
+
+ Atom label;
+ int min, max, min_res, max_res, res;
+ int mode;
+
+
+ /* first two valuators are initialised elsewhere */
+ if (!IsPad(priv))
+ {
+ wcmInitialToolSize(pInfo);
+
+ if (wcmInitArea(pInfo) == FALSE)
+ return FALSE;
+
+ wcmInitialCoordinates(priv->pInfo, 0);
+ wcmInitialCoordinates(priv->pInfo, 1);
+
+ /* Rotation rotates the Max X and Y */
+ wcmRotateTablet(pInfo, common->wcmRotate);
+ }
+
+
+ /* third valuator: pressure */
+
+ if (!IsPad(priv))
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE);
+ min = 0;
+ /* pressure normalized to FILTER_PRESSURE_RES */
+ max = FILTER_PRESSURE_RES;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+
+ } else {
+ /* The pad doesn't have a pressure axis, so initialise third
+ * axis as unknown relative axis on the pad. This way, we
+ * can leave the strip/abswheel axes on later axes and don't
+ * run the danger of clients misinterpreting the axis info
+ */
+ label = None;
+ min = max = -1;
+ min_res = 0;
+ max_res = res = -1;
+ mode = Relative;
+ }
+
+
+ InitValuatorAxisStruct(pInfo->dev, 2,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+ label,
+#endif
+ min, max, res, min_res, max_res
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+ , mode
+#endif
+ );
+
+ /* fourth valuator: tilt-x, cursor:z-rotation, pad:strip-x */
+
+ if (IsCursor(priv))
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_RZ);
+ min = -900;
+ max = -899;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ } else if (IsPad(priv))
+ {
+ label = None; /* XXX: what is this axis? */
+ min = 0;
+ max = 1; /* dummy value if !HasFeature(WCM_STRIP) */
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ if (TabletHasFeature(common, WCM_STRIP))
+ max = common->wcmMaxStripX;
+ } else
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_X),
+ min = -64;
+ max = 63;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ }
+
+ InitValuatorAxisStruct(pInfo->dev, 3,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+ label,
+#endif
+ min, max, res, min_res, max_res
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+ , mode
+#endif
+ );
+
+ /* fifth valuator: tilt-y, cursor:throttle, pad:strip-y */
+
+ if (IsCursor(priv))
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_THROTTLE);
+ min = -1023;
+ max = 1023;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ } else if (IsPad(priv))
+ {
+ label = None; /* XXX: what is this axis? */
+ min = 0;
+ max = 1; /* dummy value if !HasFeature(WCM_STRIP) */
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ if (TabletHasFeature(common, WCM_STRIP))
+ max = common->wcmMaxStripY;
+ } else
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_Y);
+ min = -64;
+ max = 63;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ }
+
+ InitValuatorAxisStruct(pInfo->dev, 4,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+ label,
+#endif
+ min, max, res, min_res, max_res
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+ , mode
+#endif
+ );
+
+ /* sixth valuator: airbrush: abs-wheel, artpen: rotation, pad:abs-wheel
*/
+
+ if (IsStylus(priv))
+ {
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_WHEEL);
+ max = MAX_ROTATION_RANGE + MIN_ROTATION - 1;
+ min = MIN_ROTATION;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ } else if ((TabletHasFeature(common, WCM_RING)) && IsPad(priv))
+ {
+ /* Touch ring */
+ label = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_WHEEL);
+ min = 0;
+ max = 71;
+ min_res = max_res = res = 1;
+ mode = Absolute;
+ }
+
+ InitValuatorAxisStruct(pInfo->dev, 5,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+ label,
+#endif
+ min, max, res, min_res, max_res
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+ , mode
+#endif
+ );
+
+ return TRUE;
+}
+
/*****************************************************************************
* wcmDevInit --
* Set up the device's buttons, axes and keys
@@ -407,7 +578,6 @@ static int wcmDevInit(DeviceIntPtr pWcm)
{
InputInfoPtr pInfo = (InputInfoPtr)pWcm->public.devicePrivate;
WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
- WacomCommonPtr common = priv->common;
unsigned char butmap[WCM_MAX_BUTTONS+1];
int nbaxes, nbbuttons, nbkeys;
int loop;
@@ -506,144 +676,8 @@ static int wcmDevInit(DeviceIntPtr pWcm)
return FALSE;
}
- if (!IsPad(priv))
- {
- wcmInitialToolSize(pInfo);
-
- if (wcmInitArea(pInfo) == FALSE)
- {
- return FALSE;
- }
-
- wcmInitialCoordinates(priv->pInfo, 0);
- wcmInitialCoordinates(priv->pInfo, 1);
-
- /* Rotation rotates the Max X and Y */
- wcmRotateTablet(pInfo, common->wcmRotate);
-
- /* pressure normalized to FILTER_PRESSURE_RES */
- InitValuatorAxisStruct(pInfo->dev, 2,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
-
XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE),
-#endif
- 0, FILTER_PRESSURE_RES, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
-
- } else {
- /* The pad doesn't have a pressure axis, so initialise third
- * axis as unknown relative axis on the pad. This way, we
- * can leave the strip/abswheel axes on later axes and don't
- * run the danger of clients misinterpreting the axis info
- */
- InitValuatorAxisStruct(pInfo->dev, 2,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- None,
-#endif
- -1, -1, 0, -1, -1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Relative
-#endif
- );
- }
-
- if (IsCursor(priv))
- {
- /* z-rot and throttle */
- InitValuatorAxisStruct(pInfo->dev, 3,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_RZ),
-#endif
- -900, 899, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- InitValuatorAxisStruct(pInfo->dev, 4,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_THROTTLE),
-#endif
- -1023, 1023, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- }
- else if (IsPad(priv))
- {
- /* strip-x and strip-y */
- if (TabletHasFeature(common, WCM_STRIP))
- {
- InitValuatorAxisStruct(pInfo->dev, 3,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- 0, /* XXX what is this axis?*/
-#endif
- 0, common->wcmMaxStripX, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- InitValuatorAxisStruct(pInfo->dev, 4,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- 0, /* XXX what is this axis?*/
-#endif
- 0, common->wcmMaxStripY, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- }
- }
- else
- {
- /* tilt-x and tilt-y */
- InitValuatorAxisStruct(pInfo->dev, 3,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_X),
-#endif
- -64, 63, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- InitValuatorAxisStruct(pInfo->dev, 4,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_Y),
-#endif
- -64, 63, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- }
-
- if (IsStylus(priv))
- {
- int maxRotation = MAX_ROTATION_RANGE + MIN_ROTATION - 1;
- /* Art Marker Pen rotation or Airbrush absolute Wheel */
- InitValuatorAxisStruct(pInfo->dev, 5,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_WHEEL),
-#endif
- MIN_ROTATION, maxRotation, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
- }
- else if ((TabletHasFeature(common, WCM_RING)) && IsPad(priv))
- /* Touch ring */
- InitValuatorAxisStruct(pInfo->dev, 5,
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
- XIGetKnownProperty(AXIS_LABEL_PROP_ABS_WHEEL),
-#endif
- 0, 71, 1, 1, 1
-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
- , Absolute
-#endif
- );
+ if (!wcmInitAxes(pWcm))
+ return FALSE;
if (IsTouch(priv))
{
--
1.7.3.3
------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel