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

Reply via email to