Instead of a separate variables, keep just one array with all values. Keep
x/y for readability though, they just point to the first two spots in the
array.

Aside from prettier function signatures, we can now call up priv->naxes once
instead of relying on magic state.

Signed-off-by: Peter Hutterer <[email protected]>
---
Just backing this up on the list, I can't apply this patch until the server
is fixed anyway.

 src/wcmCommon.c |  173 +++++++++++++++++++++++++++----------------------------
 1 files changed, 85 insertions(+), 88 deletions(-)

diff --git a/src/wcmCommon.c b/src/wcmCommon.c
index 5287bf5..fff4b8a 100644
--- a/src/wcmCommon.c
+++ b/src/wcmCommon.c
@@ -42,7 +42,7 @@ static void commonDispatchDevice(WacomCommonPtr common, 
unsigned int channel,
        const WacomChannelPtr pChannel, int suppress);
 static void resetSampleCounter(const WacomChannelPtr pChannel);
 static void sendAButton(InputInfoPtr pInfo, int button, int mask,
-               int rx, int ry, int rz, int v3, int v4, int v5);
+                       int naxes, int *valuators);
 
 /*****************************************************************************
  * Utility functions
@@ -238,8 +238,7 @@ static void wcmSetScreen(InputInfoPtr pInfo, int v0, int v1)
  *   previous one.
  ****************************************************************************/
 
-static void wcmSendButtons(InputInfoPtr pInfo, int buttons, int rx, int ry,
-               int rz, int v3, int v4, int v5)
+static void wcmSendButtons(InputInfoPtr pInfo, int buttons, int naxes, int 
*valuators)
 {
        int button, mask;
        WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
@@ -257,7 +256,7 @@ static void wcmSendButtons(InputInfoPtr pInfo, int buttons, 
int rx, int ry,
 
                                if (buttons == 1) {
                                        /* Button 1 pressed */
-                                       sendAButton(pInfo, 0, 1, rx, ry, rz, 
v3, v4, v5);
+                                       sendAButton(pInfo, 0, 1, naxes, 
valuators);
                                } else {
                                        /* send all pressed buttons down */
                                        for (button=2; button<=WCM_MAX_BUTTONS; 
button++)
@@ -266,8 +265,7 @@ static void wcmSendButtons(InputInfoPtr pInfo, int buttons, 
int rx, int ry,
                                                if ( buttons & mask )
                                                {
                                                        /* set to the 
configured button */
-                                                       sendAButton(pInfo, 
button-1, 1, rx, ry,
-                                                                       rz, v3, 
v4, v5);
+                                                       sendAButton(pInfo, 
button-1, 1, naxes, valuators);
                                                }
                                        }
                                }
@@ -281,7 +279,7 @@ static void wcmSendButtons(InputInfoPtr pInfo, int buttons, 
int rx, int ry,
                                        {
                                                /* set to the configured 
buttons */
                                                sendAButton(pInfo, button-1, 
mask & buttons,
-                                                       rx, ry, rz, v3, v4, v5);
+                                                           naxes, valuators);
                                        }
                                }
                        }
@@ -297,8 +295,8 @@ static void wcmSendButtons(InputInfoPtr pInfo, int buttons, 
int rx, int ry,
                                if ((mask & priv->oldButtons) != (mask & 
buttons) || (mask & buttons) )
                                {
                                        /* set to the configured button */
-                                       sendAButton(pInfo, button-1, 0, rx, ry,
-                                               rz, v3, v4, v5);
+                                       sendAButton(pInfo, button-1, 0,
+                                                   naxes, valuators);
                                }
                        }
                }
@@ -311,8 +309,8 @@ static void wcmSendButtons(InputInfoPtr pInfo, int buttons, 
int rx, int ry,
                        if ((mask & priv->oldButtons) != (mask & buttons))
                        {
                                /* set to the configured button */
-                               sendAButton(pInfo, button-1, mask & buttons, 
rx, ry,
-                                       rz, v3, v4, v5);
+                               sendAButton(pInfo, button-1, mask & buttons,
+                                           naxes, valuators);
                        }
                }
        }
@@ -378,7 +376,7 @@ static int countPresses(int keybtn, unsigned int* keys, int 
size)
  *   Send one button event, called by wcmSendButtons
  ****************************************************************************/
 static void sendAButton(InputInfoPtr pInfo, int button, int mask,
-               int rx, int ry, int rz, int v3, int v4, int v5)
+                       int naxes, int *valuators)
 {
        WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
 #ifdef DEBUG
@@ -386,8 +384,6 @@ static void sendAButton(InputInfoPtr pInfo, int button, int 
mask,
 #endif
        int i;
 
-       int naxes = priv->naxes;
-
        if (!priv->button[button])  /* ignore this button event */
                return;
 
@@ -400,8 +396,8 @@ static void sendAButton(InputInfoPtr pInfo, int button, int 
mask,
        if (!priv->keys[button][0])
        {
                /* No button action configured, send button */
-               xf86PostButtonEvent(pInfo->dev, is_absolute(pInfo), 
priv->button[button], (mask != 0), 0, naxes,
-                                   rx, ry, rz, v3, v4, v5);
+               xf86PostButtonEventP(pInfo->dev, is_absolute(pInfo), 
priv->button[button], (mask != 0), 0, naxes,
+                                   valuators);
                return;
        }
 
@@ -419,10 +415,10 @@ static void sendAButton(InputInfoPtr pInfo, int button, 
int mask,
                                {
                                        int btn_no = (action & AC_CODE);
                                        int is_press = (action & 
AC_KEYBTNPRESS);
-                                       xf86PostButtonEvent(pInfo->dev,
+                                       xf86PostButtonEventP(pInfo->dev,
                                                            is_absolute(pInfo), 
btn_no,
                                                            is_press, 0, naxes,
-                                                           rx, ry, rz, v3, v4, 
v5);
+                                                           valuators);
                                }
                                break;
                        case AC_KEY:
@@ -440,14 +436,14 @@ static void sendAButton(InputInfoPtr pInfo, int button, 
int mask,
                        /* FIXME: this should be implemented as 4 values,
                         * there's no reason to have a DBLCLICK */
                        case AC_DBLCLICK:
-                               xf86PostButtonEvent(pInfo->dev, 
is_absolute(pInfo),
-                                                   1,1,0,naxes, 
rx,ry,rz,v3,v4,v5);
-                               xf86PostButtonEvent(pInfo->dev, 
is_absolute(pInfo),
-                                                   
1,0,0,naxes,rx,ry,rz,v3,v4,v5);
-                               xf86PostButtonEvent(pInfo->dev, 
is_absolute(pInfo),
-                                                   1,1,0,naxes, 
rx,ry,rz,v3,v4,v5);
-                               xf86PostButtonEvent(pInfo->dev, 
is_absolute(pInfo),
-                                                   
1,0,0,naxes,rx,ry,rz,v3,v4,v5);
+                               xf86PostButtonEventP(pInfo->dev, 
is_absolute(pInfo),
+                                                   1,1,0,naxes,valuators);
+                               xf86PostButtonEventP(pInfo->dev, 
is_absolute(pInfo),
+                                                   1,0,0,naxes,valuators);
+                               xf86PostButtonEventP(pInfo->dev, 
is_absolute(pInfo),
+                                                   1,1,0,naxes,valuators);
+                               xf86PostButtonEventP(pInfo->dev, 
is_absolute(pInfo),
+                                                   1,0,0,naxes,valuators);
                                break;
                        case AC_DISPLAYTOGGLE:
                                toggleDisplay(pInfo);
@@ -472,10 +468,10 @@ static void sendAButton(InputInfoPtr pInfo, int button, 
int mask,
 
                                        if (countPresses(btn_no, 
&priv->keys[button][i],
                                                        
ARRAY_SIZE(priv->keys[button]) - i))
-                                               xf86PostButtonEvent(pInfo->dev,
+                                               xf86PostButtonEventP(pInfo->dev,
                                                                
is_absolute(pInfo), btn_no,
                                                                0, 0, naxes,
-                                                               rx, ry, rz, v3, 
v4, v5);
+                                                               valuators);
                                }
                                break;
                        case AC_KEY:
@@ -578,10 +574,10 @@ static int getWheelButton(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
  ****************************************************************************/
 
 static void sendWheelStripEvents(InputInfoPtr pInfo, const WacomDeviceState* 
ds,
-               int x, int y, int z, int v3, int v4, int v5)
+                                int naxes, int *valuators)
 {
        WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
-       int fakeButton = 0, naxes = priv->naxes;
+       int fakeButton = 0;
 
        DBG(10, priv, "\n");
 
@@ -595,11 +591,11 @@ static void sendWheelStripEvents(InputInfoPtr pInfo, 
const WacomDeviceState* ds,
            case 0: /* no spec. action defined */
            case AC_BUTTON:
                /* send both button on/off in the same event for pad */ 
-               xf86PostButtonEvent(pInfo->dev, is_absolute(pInfo), fakeButton 
& AC_CODE,
-                       1,0,naxes,x,y,z,v3,v4,v5);
+               xf86PostButtonEventP(pInfo->dev, is_absolute(pInfo), fakeButton 
& AC_CODE,
+                       1,0,naxes,valuators);
 
-               xf86PostButtonEvent(pInfo->dev, is_absolute(pInfo), fakeButton 
& AC_CODE,
-                       0,0,naxes,x,y,z,v3,v4,v5);
+               xf86PostButtonEventP(pInfo->dev, is_absolute(pInfo), fakeButton 
& AC_CODE,
+                       0,0,naxes,valuators);
            break;
 
            case AC_KEY:
@@ -617,20 +613,20 @@ static void sendWheelStripEvents(InputInfoPtr pInfo, 
const WacomDeviceState* ds,
  *   Send events common between pad and stylus/cursor/eraser.
  ****************************************************************************/
 
-static void sendCommonEvents(InputInfoPtr pInfo, const WacomDeviceState* ds, 
int x, int y, int z, int v3, int v4, int v5)
+static void sendCommonEvents(InputInfoPtr pInfo, const WacomDeviceState* ds, 
int naxes, int *valuators)
 {
        WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
        int buttons = ds->buttons;
 
        /* send button events when state changed or first time in prox and 
button unpresses */
        if (priv->oldButtons != buttons || (!priv->oldProximity && !buttons))
-               wcmSendButtons(pInfo,buttons,x,y,z,v3,v4,v5);
+               wcmSendButtons(pInfo, buttons, naxes, valuators);
 
        /* emulate wheel/strip events when defined */
        if ( ds->relwheel || ds->abswheel || 
                ( (ds->stripx - priv->oldStripX) && ds->stripx && 
priv->oldStripX) || 
                        ((ds->stripy - priv->oldStripY) && ds->stripy && 
priv->oldStripY) )
-               sendWheelStripEvents(pInfo, ds, x, y, z, v3, v4, v5);
+               sendWheelStripEvents(pInfo, ds, naxes, valuators);
 }
 
 /* rotate x and y before post X inout events */
@@ -705,15 +701,18 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
        int id = ds->device_id;
        int serial = (int)ds->serial_num;
        int is_proximity = ds->proximity;
-       int x = ds->x;
-       int y = ds->y;
-       int z = ds->pressure;
        int buttons = ds->buttons;
        int tx = ds->tiltx;
        int ty = ds->tilty;
        WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
        int naxes = priv->naxes;
-       int v3, v4, v5;
+       int valuators[6] = {0};
+       int *x = &valuators[0];
+       int *y = &valuators[1];
+
+       *x = ds->x;
+       *y = ds->y;
+       valuators[2] = ds->pressure;
 
        if (priv->serial && serial != priv->serial)
        {
@@ -726,8 +725,8 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
        /* don't move the cursor when going out-prox */
        if (!ds->proximity)
        {
-               x = priv->oldX;
-               y = priv->oldY;
+               *x = priv->oldX;
+               *y = priv->oldY;
        }
 
        /* use tx and ty to report stripx and stripy */
@@ -744,34 +743,34 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
                        (type == ERASER_ID) ? "eraser" :
                        (type == TOUCH_ID) ? "touch" : "pad",
                priv->oldProximity ? "true" : "false",
-               x, y, z, is_button ? "true" : "false", buttons,
+               *x, *y, valuators[2], is_button ? "true" : "false", buttons,
                tx, ty, ds->abswheel, ds->rotation, ds->throttle);
 
        if (ds->proximity)
-               wcmRotateCoordinates(pInfo, &x, &y);
+               wcmRotateCoordinates(pInfo, x, y);
 
        if (IsCursor(priv)) 
        {
-               v3 = ds->rotation;
-               v4 = ds->throttle;
+               valuators[3] = ds->rotation;
+               valuators[4] = ds->throttle;
        }
        else  /* Intuos styli have tilt */
        {
-               v3 = tx;
-               v4 = ty;
+               valuators[3] = tx;
+               valuators[4] = ty;
        }
-       v5 = ds->abswheel;
+       valuators[5] = ds->abswheel;
 
        DBG(6, priv, "%s prox=%d\tx=%d"
-               "\ty=%d\tz=%d\tv3=%d\tv4=%d\tv5=%d\tid=%d"
+               "\ty=%d\tz=%d\tv3=%d\tvaluators[4]=%d\tvaluators[5]=%d\tid=%d"
                "\tserial=%u\tbutton=%s\tbuttons=%d\n",
                is_absolute(pInfo) ? "abs" : "rel",
                is_proximity,
-               x, y, z, v3, v4, v5, id, serial,
+               *x, *y, valuators[2], valuators[3], valuators[4], valuators[5], 
id, serial,
                is_button ? "true" : "false", buttons);
 
-       priv->currentX = x;
-       priv->currentY = y;
+       priv->currentX = *x;
+       priv->currentY = *y;
 
        /* update the old records */
        if(!priv->oldProximity)
@@ -782,19 +781,19 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
 
        if (!is_absolute(pInfo))
        {
-               x -= priv->oldX;
-               y -= priv->oldY;
-               z -= priv->oldZ;
+               *x -= priv->oldX;
+               *y -= priv->oldY;
+               valuators[2] -= priv->oldZ;
                if (IsCursor(priv))
                {
-                       v3 -= priv->oldRot;
-                       v4 -= priv->oldThrottle;
+                       valuators[3] -= priv->oldRot;
+                       valuators[4] -= priv->oldThrottle;
                } else
                {
-                       v3 -= priv->oldTiltX;
-                       v4 -= priv->oldTiltY;
+                       valuators[3] -= priv->oldTiltX;
+                       valuators[4] -= priv->oldTiltY;
                }
-               v5 -= priv->oldWheel;
+               valuators[5] -= priv->oldWheel;
        }
 
        if (type != PAD_ID)
@@ -806,31 +805,30 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
                         * screen and modify the axes before posting events */
                        if(!(priv->flags & BUTTONS_ONLY_FLAG))
                        {
-                               wcmSetScreen(pInfo, x, y);
+                               wcmSetScreen(pInfo, *x, *y);
                        }
 
                        /* unify acceleration in both directions 
                         * for relative mode to draw a circle 
                         */
                        if (!is_absolute(pInfo))
-                               x *= priv->factorY / priv->factorX;
+                               *x *= priv->factorY / priv->factorX;
                        else
                        {
                                /* Padding virtual values */
                                wcmVirtualTabletPadding(pInfo);
-                               x += priv->leftPadding;
-                               y += priv->topPadding;
+                               *x += priv->leftPadding;
+                               *y += priv->topPadding;
                        }
 
                        /* don't emit proximity events if device does not 
support proximity */
                        if ((pInfo->dev->proximity && !priv->oldProximity))
-                               xf86PostProximityEvent(pInfo->dev, 1, 0, naxes, 
x, y, z, v3, v4, v5);
+                               xf86PostProximityEventP(pInfo->dev, 1, 0, 
naxes, valuators);
 
                        /* Move the cursor to where it should be before sending 
button events */
                        if(!(priv->flags & BUTTONS_ONLY_FLAG))
                        {
-                               xf86PostMotionEvent(pInfo->dev, 
is_absolute(pInfo),
-                                       0, naxes, x, y, z, v3, v4, v5);
+                               xf86PostMotionEventP(pInfo->dev, 
is_absolute(pInfo), 0, naxes, valuators);
                                /* For relative events, reset the axes as
                                 * we've already moved the device by the
                                 * relative amount. Otherwise, a button
@@ -839,12 +837,12 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
                                 */
                                if (!is_absolute(pInfo))
                                {
-                                       x = y = z = 0;
-                                       v3 = v4 = v5 = 0;
+                                       *x = *y = valuators[2] = 0;
+                                       valuators[3] = valuators[4] = 
valuators[5] = 0;
                                }
                        }
 
-                       sendCommonEvents(pInfo, ds, x, y, z, v3, v4, v5);
+                       sendCommonEvents(pInfo, ds, naxes, valuators);
                }
                else /* not in proximity */
                {
@@ -853,46 +851,45 @@ void wcmSendEvents(InputInfoPtr pInfo, const 
WacomDeviceState* ds)
                        /* reports button up when the device has been
                         * down and becomes out of proximity */
                        if (priv->oldButtons)
-                               wcmSendButtons(pInfo,buttons,x,y,z,v3,v4,v5);
+                               wcmSendButtons(pInfo,buttons,naxes,valuators);
 
                        if (priv->oldProximity)
-                               
xf86PostProximityEvent(pInfo->dev,0,0,naxes,x,y,z,v3,v4,v5);
+                               
xf86PostProximityEventP(pInfo->dev,0,0,naxes,valuators);
                } /* not in proximity */
        }
        else
        {
-               if (v3 || v4 || v5 || buttons || ds->relwheel)
+               if (valuators[3] || valuators[4] || valuators[5] || buttons || 
ds->relwheel)
                {
-                       x = 0;
-                       y = 0;
-                       if ( v3 || v4 || v5 )
-                               wcmSetScreen(pInfo, x, y);
+                       *x = 0;
+                       *y = 0;
+                       if ( valuators[3] || valuators[4] || valuators[5] )
+                               wcmSetScreen(pInfo, *x, *y);
                }
 
                if (!priv->oldProximity && is_proximity)
-                       xf86PostProximityEvent(pInfo->dev, 1, 0, naxes, x, y, 
z, v3, v4, v5);
+                       xf86PostProximityEventP(pInfo->dev, 1, 0, 
naxes,valuators);
 
-               if (v3 || v4 || v5 || buttons || ds->relwheel)
+               if (valuators[3] || valuators[4] || valuators[5] || buttons || 
ds->relwheel)
                {
-                       sendCommonEvents(pInfo, ds, x, y, z, v3, v4, v5);
+                       sendCommonEvents(pInfo, ds, naxes, valuators);
 
                        /* xf86PostMotionEvent is only needed to post the 
valuators
                         * It should NOT move the cursor.
                         */
-                       if ( v3 || v4 || v5 )
+                       if ( valuators[3] || valuators[4] || valuators[5] )
                        {
-                               xf86PostMotionEvent(pInfo->dev, 
is_absolute(pInfo),
-                                       0, naxes, x, y, z, v3, v4, v5);
+                               xf86PostMotionEventP(pInfo->dev, 
is_absolute(pInfo), 0, naxes, valuators);
                        }
                }
                else
                {
                        if (priv->oldButtons)
-                               wcmSendButtons(pInfo, buttons,
-                                       x, y, z, v3, v4, v5);
+                               wcmSendButtons(pInfo, buttons, naxes,
+                                               valuators);
                }
                if (priv->oldProximity && !is_proximity)
-                       xf86PostProximityEvent(pInfo->dev, 0, 0, naxes, x, y, 
z, v3, v4, v5);
+                       xf86PostProximityEventP(pInfo->dev, 0, 0, naxes, 
valuators);
        }
        priv->oldProximity = is_proximity;
        priv->old_device_id = id;
-- 
1.7.2


------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to