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:
parent
2d9beeb217
commit
94c19a0a72
|
@ -190,8 +190,6 @@ ProcXIWarpPointer(ClientPtr client)
|
||||||
/* if we don't update the device, we get a jump next time it moves */
|
/* if we don't update the device, we get a jump next time it moves */
|
||||||
pDev->last.valuators[0] = x;
|
pDev->last.valuators[0] = x;
|
||||||
pDev->last.valuators[1] = y;
|
pDev->last.valuators[1] = y;
|
||||||
pDev->last.remainder[0] = 0;
|
|
||||||
pDev->last.remainder[1] = 0;
|
|
||||||
miPointerUpdateSprite(pDev);
|
miPointerUpdateSprite(pDev);
|
||||||
|
|
||||||
/* FIXME: XWarpPointer is supposed to generate an event. It doesn't do it
|
/* FIXME: XWarpPointer is supposed to generate an event. It doesn't do it
|
||||||
|
|
|
@ -291,15 +291,12 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
|
||||||
{
|
{
|
||||||
ScreenPtr scr = miPointerGetScreen(pDev);
|
ScreenPtr scr = miPointerGetScreen(pDev);
|
||||||
int i;
|
int i;
|
||||||
double val, ret;
|
|
||||||
DeviceIntPtr lastSlave;
|
DeviceIntPtr lastSlave;
|
||||||
|
|
||||||
/* master->last.valuators[0]/[1] is in screen coords and the actual
|
/* master->last.valuators[0]/[1] is in screen coords and the actual
|
||||||
* position of the pointer */
|
* position of the pointer */
|
||||||
pDev->last.valuators[0] = master->last.valuators[0];
|
pDev->last.valuators[0] = master->last.valuators[0];
|
||||||
pDev->last.valuators[1] = master->last.valuators[1];
|
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)
|
if (!pDev->valuator)
|
||||||
return;
|
return;
|
||||||
|
@ -307,19 +304,17 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
|
||||||
/* scale back to device coordinates */
|
/* scale back to device coordinates */
|
||||||
if(pDev->valuator->numAxes > 0)
|
if(pDev->valuator->numAxes > 0)
|
||||||
{
|
{
|
||||||
val = pDev->last.valuators[0] + pDev->last.remainder[0];
|
pDev->last.valuators[0] = rescaleValuatorAxis(pDev->last.valuators[0],
|
||||||
ret = rescaleValuatorAxis(val, NULL, pDev->valuator->axes + 0,
|
NULL,
|
||||||
scr->width);
|
pDev->valuator->axes + 0,
|
||||||
pDev->last.valuators[0] = trunc(ret);
|
scr->width);
|
||||||
pDev->last.remainder[0] = ret - trunc(ret);
|
|
||||||
}
|
}
|
||||||
if(pDev->valuator->numAxes > 1)
|
if(pDev->valuator->numAxes > 1)
|
||||||
{
|
{
|
||||||
val = pDev->last.valuators[1] + pDev->last.remainder[1];
|
pDev->last.valuators[1] = rescaleValuatorAxis(pDev->last.valuators[1],
|
||||||
ret = rescaleValuatorAxis(val, NULL, pDev->valuator->axes + 1,
|
NULL,
|
||||||
scr->height);
|
pDev->valuator->axes + 1,
|
||||||
pDev->last.valuators[1] = trunc(ret);
|
scr->height);
|
||||||
pDev->last.remainder[1] = ret - trunc(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* calculate the other axis as well based on info from the old
|
/* 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)
|
if (i >= lastSlave->valuator->numAxes)
|
||||||
{
|
{
|
||||||
pDev->last.valuators[i] = 0;
|
pDev->last.valuators[i] = 0;
|
||||||
pDev->last.remainder[i] = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
val = pDev->last.valuators[i] + pDev->last.remainder[i];
|
double val = pDev->last.valuators[i];
|
||||||
ret = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
|
val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
|
||||||
pDev->valuator->axes + i, 0);
|
pDev->valuator->axes + i, 0);
|
||||||
pDev->last.valuators[i] = trunc(ret);
|
pDev->last.valuators[i] = val;
|
||||||
pDev->last.remainder[i] = ret - trunc(ret);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -523,7 +516,7 @@ GetMotionHistory(DeviceIntPtr pDev, xTimecoord **buff, unsigned long start,
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
|
updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
|
||||||
int *valuators)
|
double *valuators)
|
||||||
{
|
{
|
||||||
char *buff = (char *) pDev->valuator->motion;
|
char *buff = (char *) pDev->valuator->motion;
|
||||||
ValuatorClassPtr v;
|
ValuatorClassPtr v;
|
||||||
|
@ -545,6 +538,7 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
|
||||||
|
|
||||||
for (i = 0; i < v->numAxes; i++)
|
for (i = 0; i < v->numAxes; i++)
|
||||||
{
|
{
|
||||||
|
int val;
|
||||||
/* XI1 doesn't support mixed mode devices */
|
/* XI1 doesn't support mixed mode devices */
|
||||||
if (valuator_get_mode(pDev, i) != valuator_get_mode(pDev, 0))
|
if (valuator_get_mode(pDev, i) != valuator_get_mode(pDev, 0))
|
||||||
break;
|
break;
|
||||||
|
@ -557,7 +551,8 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
|
||||||
buff += sizeof(INT32);
|
buff += sizeof(INT32);
|
||||||
memcpy(buff, &v->axes[i].max_value, sizeof(INT32));
|
memcpy(buff, &v->axes[i].max_value, sizeof(INT32));
|
||||||
buff += sizeof(INT32);
|
buff += sizeof(INT32);
|
||||||
memcpy(buff, &valuators[i], sizeof(INT32));
|
val = valuators[i];
|
||||||
|
memcpy(buff, &val, sizeof(INT32));
|
||||||
buff += sizeof(INT32);
|
buff += sizeof(INT32);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
@ -573,12 +568,14 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, ValuatorMask *mask,
|
||||||
|
|
||||||
for (i = 0; i < MAX_VALUATORS; i++)
|
for (i = 0; i < MAX_VALUATORS; i++)
|
||||||
{
|
{
|
||||||
|
int val;
|
||||||
if (valuator_mask_size(mask) <= i || !valuator_mask_isset(mask, i))
|
if (valuator_mask_size(mask) <= i || !valuator_mask_isset(mask, i))
|
||||||
{
|
{
|
||||||
buff += sizeof(INT32);
|
buff += sizeof(INT32);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memcpy(buff, &valuators[i], sizeof(INT32));
|
val = valuators[i];
|
||||||
|
memcpy(buff, &val, sizeof(INT32));
|
||||||
buff += sizeof(INT32);
|
buff += sizeof(INT32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -704,8 +701,7 @@ moveAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
|
||||||
continue;
|
continue;
|
||||||
val = valuator_mask_get_double(mask, i);
|
val = valuator_mask_get_double(mask, i);
|
||||||
clipAxis(dev, i, &val);
|
clipAxis(dev, i, &val);
|
||||||
dev->last.valuators[i] = trunc(val);
|
dev->last.valuators[i] = val;
|
||||||
dev->last.remainder[i] = val - trunc(val);
|
|
||||||
valuator_mask_set_double(mask, 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 */
|
/* calc other axes, clip, drop back into valuators */
|
||||||
for (i = 0; i < valuator_mask_size(mask); i++)
|
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))
|
if (!valuator_mask_isset(mask, i))
|
||||||
continue;
|
continue;
|
||||||
|
@ -735,8 +731,7 @@ moveRelative(DeviceIntPtr dev, ValuatorMask *mask)
|
||||||
if (valuator_get_mode(dev, i) == Absolute &&
|
if (valuator_get_mode(dev, i) == Absolute &&
|
||||||
((i != 0 && i != 1) || clip_xy))
|
((i != 0 && i != 1) || clip_xy))
|
||||||
clipAxis(dev, i, &val);
|
clipAxis(dev, i, &val);
|
||||||
dev->last.valuators[i] = trunc(val);
|
dev->last.valuators[i] = val;
|
||||||
dev->last.remainder[i] = val - trunc(val);
|
|
||||||
valuator_mask_set_double(mask, 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))
|
if (valuator_mask_isset(mask, 0))
|
||||||
x = valuator_mask_get_double(mask, 0);
|
x = valuator_mask_get_double(mask, 0);
|
||||||
else
|
else
|
||||||
x = dev->last.valuators[0] + dev->last.remainder[0];
|
x = dev->last.valuators[0];
|
||||||
if (valuator_mask_isset(mask, 1))
|
if (valuator_mask_isset(mask, 1))
|
||||||
y = valuator_mask_get_double(mask, 1);
|
y = valuator_mask_get_double(mask, 1);
|
||||||
else
|
else
|
||||||
y = dev->last.valuators[1] + dev->last.remainder[1];
|
y = dev->last.valuators[1];
|
||||||
|
|
||||||
/* scale x&y to screen */
|
/* scale x&y to screen */
|
||||||
*screenx = rescaleValuatorAxis(x, dev->valuator->axes + 0, NULL,
|
*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. */
|
/* Update the MD's co-ordinates, which are always in screen space. */
|
||||||
if (!IsMaster(dev) || !IsFloating(dev)) {
|
if (!IsMaster(dev) || !IsFloating(dev)) {
|
||||||
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
||||||
master->last.valuators[0] = trunc(*screenx);
|
master->last.valuators[0] = *screenx;
|
||||||
master->last.remainder[0] = *screenx - trunc(*screenx);
|
master->last.valuators[1] = *screeny;
|
||||||
master->last.valuators[1] = trunc(*screeny);
|
|
||||||
master->last.remainder[1] = *screeny - trunc(*screeny);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dropy x/y (device coordinates) back into valuators for next event */
|
/* dropy x/y (device coordinates) back into valuators for next event */
|
||||||
dev->last.valuators[0] = trunc(x);
|
dev->last.valuators[0] = x;
|
||||||
dev->last.valuators[1] = trunc(y);
|
dev->last.valuators[1] = y;
|
||||||
dev->last.remainder[0] = x - trunc(x);
|
|
||||||
dev->last.remainder[1] = y - trunc(y);
|
|
||||||
|
|
||||||
if (valuator_mask_isset(mask, 0))
|
if (valuator_mask_isset(mask, 0))
|
||||||
valuator_mask_set_double(mask, 0, x);
|
valuator_mask_set_double(mask, 0, x);
|
||||||
|
@ -1018,12 +1009,12 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
|
||||||
if (valuator_mask_isset(mask, 0))
|
if (valuator_mask_isset(mask, 0))
|
||||||
ox = x = valuator_mask_get_double(mask, 0);
|
ox = x = valuator_mask_get_double(mask, 0);
|
||||||
else
|
else
|
||||||
ox = x = dev->last.valuators[0] + dev->last.remainder[0];
|
ox = x = dev->last.valuators[0];
|
||||||
|
|
||||||
if (valuator_mask_isset(mask, 1))
|
if (valuator_mask_isset(mask, 1))
|
||||||
oy = y = valuator_mask_get_double(mask, 1);
|
oy = y = valuator_mask_get_double(mask, 1);
|
||||||
else
|
else
|
||||||
oy = y = dev->last.valuators[1] + dev->last.remainder[1];
|
oy = y = dev->last.valuators[1];
|
||||||
|
|
||||||
transform(&dev->transform, &x, &y);
|
transform(&dev->transform, &x, &y);
|
||||||
|
|
||||||
|
|
|
@ -521,8 +521,7 @@ typedef struct _DeviceIntRec {
|
||||||
* remainder supports acceleration
|
* remainder supports acceleration
|
||||||
*/
|
*/
|
||||||
struct {
|
struct {
|
||||||
int valuators[MAX_VALUATORS];
|
double valuators[MAX_VALUATORS];
|
||||||
float remainder[MAX_VALUATORS];
|
|
||||||
int numValuators;
|
int numValuators;
|
||||||
DeviceIntPtr slave;
|
DeviceIntPtr slave;
|
||||||
} last;
|
} last;
|
||||||
|
|
Loading…
Reference in New Issue