Input: Convert DeviceIntRec::last to use doubles

Change the last real user of a split integer/fractional co-ordinate
system, DeviceIntRec's last->{valuators,remainder} to just have one set
of doubles.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Daniel Stone 2011-03-03 15:46:45 +00:00 committed by Peter Hutterer
parent 2d9beeb217
commit 94c19a0a72
3 changed files with 30 additions and 42 deletions

View File

@ -190,8 +190,6 @@ ProcXIWarpPointer(ClientPtr client)
/* if we don't update the device, we get a jump next time it moves */
pDev->last.valuators[0] = x;
pDev->last.valuators[1] = y;
pDev->last.remainder[0] = 0;
pDev->last.remainder[1] = 0;
miPointerUpdateSprite(pDev);
/* FIXME: XWarpPointer is supposed to generate an event. It doesn't do it

View File

@ -291,15 +291,12 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
{
ScreenPtr scr = miPointerGetScreen(pDev);
int i;
double val, ret;
DeviceIntPtr lastSlave;
/* master->last.valuators[0]/[1] is in screen coords and the actual
* position of the pointer */
pDev->last.valuators[0] = master->last.valuators[0];
pDev->last.valuators[1] = master->last.valuators[1];
pDev->last.remainder[0] = master->last.remainder[0];
pDev->last.remainder[1] = master->last.remainder[1];
if (!pDev->valuator)
return;
@ -307,19 +304,17 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
/* scale back to device coordinates */
if(pDev->valuator->numAxes > 0)
{
val = pDev->last.valuators[0] + pDev->last.remainder[0];
ret = rescaleValuatorAxis(val, NULL, pDev->valuator->axes + 0,
scr->width);
pDev->last.valuators[0] = trunc(ret);
pDev->last.remainder[0] = ret - trunc(ret);
pDev->last.valuators[0] = rescaleValuatorAxis(pDev->last.valuators[0],
NULL,
pDev->valuator->axes + 0,
scr->width);
}
if(pDev->valuator->numAxes > 1)
{
val = pDev->last.valuators[1] + pDev->last.remainder[1];
ret = rescaleValuatorAxis(val, NULL, pDev->valuator->axes + 1,
scr->height);
pDev->last.valuators[1] = trunc(ret);
pDev->last.remainder[1] = ret - trunc(ret);
pDev->last.valuators[1] = rescaleValuatorAxis(pDev->last.valuators[1],
NULL,
pDev->valuator->axes + 1,
scr->height);
}
/* calculate the other axis as well based on info from the old
@ -331,15 +326,13 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
if (i >= lastSlave->valuator->numAxes)
{
pDev->last.valuators[i] = 0;
pDev->last.remainder[i] = 0;
}
else
{
val = pDev->last.valuators[i] + pDev->last.remainder[i];
ret = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
double val = pDev->last.valuators[i];
val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
pDev->valuator->axes + i, 0);
pDev->last.valuators[i] = trunc(ret);
pDev->last.remainder[i] = ret - trunc(ret);
pDev->last.valuators[i] = val;
}
}
}
@ -523,7 +516,7 @@ GetMotionHistory(DeviceIntPtr pDev, xTimecoord **buff, unsigned long start,
*/
static void
updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
int *valuators)
double *valuators)
{
char *buff = (char *) pDev->valuator->motion;
ValuatorClassPtr v;
@ -545,6 +538,7 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
for (i = 0; i < v->numAxes; i++)
{
int val;
/* XI1 doesn't support mixed mode devices */
if (valuator_get_mode(pDev, i) != valuator_get_mode(pDev, 0))
break;
@ -557,7 +551,8 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
buff += sizeof(INT32);
memcpy(buff, &v->axes[i].max_value, sizeof(INT32));
buff += sizeof(INT32);
memcpy(buff, &valuators[i], sizeof(INT32));
val = valuators[i];
memcpy(buff, &val, sizeof(INT32));
buff += sizeof(INT32);
}
} else
@ -573,12 +568,14 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
for (i = 0; i < MAX_VALUATORS; i++)
{
int val;
if (valuator_mask_size(mask) <= i || !valuator_mask_isset(mask, i))
{
buff += sizeof(INT32);
continue;
}
memcpy(buff, &valuators[i], sizeof(INT32));
val = valuators[i];
memcpy(buff, &val, sizeof(INT32));
buff += sizeof(INT32);
}
}
@ -704,8 +701,7 @@ moveAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
continue;
val = valuator_mask_get_double(mask, i);
clipAxis(dev, i, &val);
dev->last.valuators[i] = trunc(val);
dev->last.remainder[i] = val - trunc(val);
dev->last.valuators[i] = val;
valuator_mask_set_double(mask, i, val);
}
}
@ -725,7 +721,7 @@ moveRelative(DeviceIntPtr dev, ValuatorMask *mask)
/* calc other axes, clip, drop back into valuators */
for (i = 0; i < valuator_mask_size(mask); i++)
{
double val = dev->last.valuators[i] + dev->last.remainder[i];
double val = dev->last.valuators[i];
if (!valuator_mask_isset(mask, i))
continue;
@ -735,8 +731,7 @@ moveRelative(DeviceIntPtr dev, ValuatorMask *mask)
if (valuator_get_mode(dev, i) == Absolute &&
((i != 0 && i != 1) || clip_xy))
clipAxis(dev, i, &val);
dev->last.valuators[i] = trunc(val);
dev->last.remainder[i] = val - trunc(val);
dev->last.valuators[i] = val;
valuator_mask_set_double(mask, i, val);
}
}
@ -786,11 +781,11 @@ positionSprite(DeviceIntPtr dev, int mode, ScreenPtr scr, ValuatorMask *mask,
if (valuator_mask_isset(mask, 0))
x = valuator_mask_get_double(mask, 0);
else
x = dev->last.valuators[0] + dev->last.remainder[0];
x = dev->last.valuators[0];
if (valuator_mask_isset(mask, 1))
y = valuator_mask_get_double(mask, 1);
else
y = dev->last.valuators[1] + dev->last.remainder[1];
y = dev->last.valuators[1];
/* scale x&y to screen */
*screenx = rescaleValuatorAxis(x, dev->valuator->axes + 0, NULL,
@ -822,17 +817,13 @@ positionSprite(DeviceIntPtr dev, int mode, ScreenPtr scr, ValuatorMask *mask,
/* Update the MD's co-ordinates, which are always in screen space. */
if (!IsMaster(dev) || !IsFloating(dev)) {
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
master->last.valuators[0] = trunc(*screenx);
master->last.remainder[0] = *screenx - trunc(*screenx);
master->last.valuators[1] = trunc(*screeny);
master->last.remainder[1] = *screeny - trunc(*screeny);
master->last.valuators[0] = *screenx;
master->last.valuators[1] = *screeny;
}
/* dropy x/y (device coordinates) back into valuators for next event */
dev->last.valuators[0] = trunc(x);
dev->last.valuators[1] = trunc(y);
dev->last.remainder[0] = x - trunc(x);
dev->last.remainder[1] = y - trunc(y);
dev->last.valuators[0] = x;
dev->last.valuators[1] = y;
if (valuator_mask_isset(mask, 0))
valuator_mask_set_double(mask, 0, x);
@ -1018,12 +1009,12 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
if (valuator_mask_isset(mask, 0))
ox = x = valuator_mask_get_double(mask, 0);
else
ox = x = dev->last.valuators[0] + dev->last.remainder[0];
ox = x = dev->last.valuators[0];
if (valuator_mask_isset(mask, 1))
oy = y = valuator_mask_get_double(mask, 1);
else
oy = y = dev->last.valuators[1] + dev->last.remainder[1];
oy = y = dev->last.valuators[1];
transform(&dev->transform, &x, &y);

View File

@ -521,8 +521,7 @@ typedef struct _DeviceIntRec {
* remainder supports acceleration
*/
struct {
int valuators[MAX_VALUATORS];
float remainder[MAX_VALUATORS];
double valuators[MAX_VALUATORS];
int numValuators;
DeviceIntPtr slave;
} last;