Input: Make DeviceEvent use doubles internally
Change the DeviceEvent InternalEvent to use doubles for its valuators, instead of data and data_frac. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
626f487b97
commit
2d9beeb217
|
@ -773,13 +773,10 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i <= last_valuator && i < v->numAxes; i++)
|
for (i = 0; i <= last_valuator && i < v->numAxes; i++)
|
||||||
{
|
|
||||||
if (BitIsOn(&event->valuators.mask, i))
|
|
||||||
{
|
{
|
||||||
/* XXX: Relative/Absolute mode */
|
/* XXX: Relative/Absolute mode */
|
||||||
|
if (BitIsOn(&event->valuators.mask, i))
|
||||||
v->axisVal[i] = event->valuators.data[i];
|
v->axisVal[i] = event->valuators.data[i];
|
||||||
v->axisVal[i] += (event->valuators.data_frac[i] * 1.0f / (1 << 16) / (1 << 16));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->type == ET_KeyPress) {
|
if (event->type == ET_KeyPress) {
|
||||||
|
|
|
@ -633,8 +633,9 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
|
||||||
if (BitIsOn(ev->valuators.mask, i))
|
if (BitIsOn(ev->valuators.mask, i))
|
||||||
{
|
{
|
||||||
SetBit(ptr, i);
|
SetBit(ptr, i);
|
||||||
axisval->integral = ev->valuators.data[i];
|
axisval->integral = trunc(ev->valuators.data[i]);
|
||||||
axisval->frac = ev->valuators.data_frac[i];
|
axisval->frac = (ev->valuators.data[i] - axisval->integral) *
|
||||||
|
(1UL << 32);
|
||||||
axisval++;
|
axisval++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,9 +196,7 @@ set_valuators(DeviceIntPtr dev, DeviceEvent* event, ValuatorMask *mask)
|
||||||
SetBit(event->valuators.mask, i);
|
SetBit(event->valuators.mask, i);
|
||||||
if (valuator_get_mode(dev, i) == Absolute)
|
if (valuator_get_mode(dev, i) == Absolute)
|
||||||
SetBit(event->valuators.mode, i);
|
SetBit(event->valuators.mode, i);
|
||||||
event->valuators.data[i] = valuator_mask_get(mask, i);
|
event->valuators.data[i] = valuator_mask_get_double(mask, i);
|
||||||
event->valuators.data_frac[i] =
|
|
||||||
dev->last.remainder[i] * (1 << 16) * (1 << 16);
|
|
||||||
}
|
}
|
||||||
else if (valuator_get_mode(dev, i) == Absolute)
|
else if (valuator_get_mode(dev, i) == Absolute)
|
||||||
event->valuators.data[i] = dev->valuator->axisVal[i];
|
event->valuators.data[i] = dev->valuator->axisVal[i];
|
||||||
|
|
|
@ -95,8 +95,7 @@ struct _DeviceEvent
|
||||||
struct {
|
struct {
|
||||||
uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
|
uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
|
||||||
uint8_t mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/
|
uint8_t mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/
|
||||||
int32_t data[MAX_VALUATORS]; /**< Valuator data */
|
double data[MAX_VALUATORS]; /**< Valuator data */
|
||||||
int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */
|
|
||||||
} valuators;
|
} valuators;
|
||||||
struct {
|
struct {
|
||||||
uint32_t base; /**< XKB base modifiers */
|
uint32_t base; /**< XKB base modifiers */
|
||||||
|
|
|
@ -374,8 +374,8 @@ static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out,
|
||||||
{
|
{
|
||||||
FP3232 vi, vo;
|
FP3232 vi, vo;
|
||||||
|
|
||||||
vi.integral = in->valuators.data[i];
|
vi.integral = trunc(in->valuators.data[i]);
|
||||||
vi.frac = in->valuators.data_frac[i];
|
vi.frac = (in->valuators.data[i] - vi.integral) * (1UL << 32);
|
||||||
|
|
||||||
vo = *values;
|
vo = *values;
|
||||||
|
|
||||||
|
@ -617,8 +617,7 @@ static void test_convert_XIDeviceEvent(void)
|
||||||
{
|
{
|
||||||
XISetMask(in.valuators.mask, i);
|
XISetMask(in.valuators.mask, i);
|
||||||
|
|
||||||
in.valuators.data[i] = i;
|
in.valuators.data[i] = i + (i * 0.0020);
|
||||||
in.valuators.data_frac[i] = i + 20;
|
|
||||||
test_XIDeviceEvent(&in);
|
test_XIDeviceEvent(&in);
|
||||||
XIClearMask(in.valuators.mask, i);
|
XIClearMask(in.valuators.mask, i);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue