Input: Make RawDeviceEvent use doubles internally
Change RawDeviceEvent to use doubles for valuators internally, rather than data(_raw) and data(_raw)_frac. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
3b7fb0f68d
commit
626f487b97
|
@ -649,7 +649,7 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
|
||||||
int vallen, nvals;
|
int vallen, nvals;
|
||||||
int i, len = sizeof(xXIRawEvent);
|
int i, len = sizeof(xXIRawEvent);
|
||||||
char *ptr;
|
char *ptr;
|
||||||
FP3232 *axisval;
|
FP3232 *axisval, *axisval_raw;
|
||||||
|
|
||||||
nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask));
|
nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask));
|
||||||
len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once
|
len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once
|
||||||
|
@ -671,16 +671,19 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
|
||||||
|
|
||||||
ptr = (char*)&raw[1];
|
ptr = (char*)&raw[1];
|
||||||
axisval = (FP3232*)(ptr + raw->valuators_len * 4);
|
axisval = (FP3232*)(ptr + raw->valuators_len * 4);
|
||||||
|
axisval_raw = axisval + nvals;
|
||||||
for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
|
for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
|
||||||
{
|
{
|
||||||
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;
|
||||||
(axisval + nvals)->integral = ev->valuators.data_raw[i];
|
axisval_raw->integral = trunc(ev->valuators.data_raw[i]);
|
||||||
(axisval + nvals)->frac = ev->valuators.data_raw_frac[i];
|
axisval_raw->frac = ev->valuators.data_raw[i] -
|
||||||
|
axisval_raw->integral;
|
||||||
axisval++;
|
axisval++;
|
||||||
|
axisval_raw++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -167,20 +167,16 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, int32_t* data,
|
set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, double* data)
|
||||||
int32_t* data_frac)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
double val;
|
|
||||||
|
|
||||||
for (i = 0; i < valuator_mask_size(mask); i++)
|
for (i = 0; i < valuator_mask_size(mask); i++)
|
||||||
{
|
{
|
||||||
if (valuator_mask_isset(mask, i))
|
if (valuator_mask_isset(mask, i))
|
||||||
{
|
{
|
||||||
SetBit(event->valuators.mask, i);
|
SetBit(event->valuators.mask, i);
|
||||||
val = valuator_mask_get_double(mask, i);
|
data[i] = valuator_mask_get_double(mask, i);
|
||||||
data[i] = trunc(val);
|
|
||||||
data_frac[i] = (val - data[i]) * (1UL << 32);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -950,13 +946,11 @@ GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
||||||
valuator_mask_copy(&mask, mask_in);
|
valuator_mask_copy(&mask, mask_in);
|
||||||
|
|
||||||
init_raw(pDev, raw, ms, type, key_code);
|
init_raw(pDev, raw, ms, type, key_code);
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data_raw,
|
set_raw_valuators(raw, &mask, raw->valuators.data_raw);
|
||||||
raw->valuators.data_raw_frac);
|
|
||||||
|
|
||||||
clipValuators(pDev, &mask);
|
clipValuators(pDev, &mask);
|
||||||
|
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data,
|
set_raw_valuators(raw, &mask, raw->valuators.data);
|
||||||
raw->valuators.data_frac);
|
|
||||||
|
|
||||||
event = &events->device_event;
|
event = &events->device_event;
|
||||||
init_device_event(event, pDev, ms);
|
init_device_event(event, pDev, ms);
|
||||||
|
@ -1128,8 +1122,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
|
||||||
num_events++;
|
num_events++;
|
||||||
|
|
||||||
init_raw(pDev, raw, ms, type, buttons);
|
init_raw(pDev, raw, ms, type, buttons);
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data_raw,
|
set_raw_valuators(raw, &mask, raw->valuators.data_raw);
|
||||||
raw->valuators.data_raw_frac);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & POINTER_ABSOLUTE)
|
if (flags & POINTER_ABSOLUTE)
|
||||||
|
@ -1163,8 +1156,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & POINTER_NORAW) == 0)
|
if ((flags & POINTER_NORAW) == 0)
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data,
|
set_raw_valuators(raw, &mask, raw->valuators.data);
|
||||||
raw->valuators.data_frac);
|
|
||||||
|
|
||||||
positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative, scr,
|
positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative, scr,
|
||||||
&mask, &screenx, &screeny);
|
&mask, &screenx, &screeny);
|
||||||
|
|
|
@ -199,10 +199,8 @@ struct _RawDeviceEvent
|
||||||
} detail;
|
} detail;
|
||||||
struct {
|
struct {
|
||||||
uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
|
uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
|
||||||
int32_t data[MAX_VALUATORS]; /**< Valuator data */
|
double data[MAX_VALUATORS]; /**< Valuator data */
|
||||||
int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */
|
double data_raw[MAX_VALUATORS]; /**< Valuator data as posted */
|
||||||
int32_t data_raw[MAX_VALUATORS]; /**< Valuator data as posted */
|
|
||||||
int32_t data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */
|
|
||||||
} valuators;
|
} valuators;
|
||||||
uint32_t flags; /**< Flags to be copied into the generated event */
|
uint32_t flags; /**< Flags to be copied into the generated event */
|
||||||
};
|
};
|
||||||
|
|
|
@ -93,8 +93,8 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out,
|
||||||
value = (FP3232*)(((unsigned char*)&out[1]) + out->valuators_len * 4);
|
value = (FP3232*)(((unsigned char*)&out[1]) + out->valuators_len * 4);
|
||||||
value += nvals;
|
value += nvals;
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
vo.integral = value->integral;
|
vo.integral = value->integral;
|
||||||
vo.frac = value->frac;
|
vo.frac = value->frac;
|
||||||
|
@ -109,8 +109,8 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out,
|
||||||
|
|
||||||
raw_value = value + bits_set;
|
raw_value = value + bits_set;
|
||||||
|
|
||||||
vi.integral = in->valuators.data_raw[i];
|
vi.integral = trunc(in->valuators.data_raw[i]);
|
||||||
vi.frac = in->valuators.data_raw_frac[i];
|
vi.frac = in->valuators.data_raw[i] - vi.integral;
|
||||||
|
|
||||||
vo.integral = raw_value->integral;
|
vo.integral = raw_value->integral;
|
||||||
vo.frac = raw_value->frac;
|
vo.frac = raw_value->frac;
|
||||||
|
@ -248,10 +248,8 @@ static void test_convert_XIRawEvent(void)
|
||||||
{
|
{
|
||||||
XISetMask(in.valuators.mask, i);
|
XISetMask(in.valuators.mask, i);
|
||||||
|
|
||||||
in.valuators.data[i] = i;
|
in.valuators.data[i] = i + (i * 0.0010);
|
||||||
in.valuators.data_raw[i] = i + 10;
|
in.valuators.data_raw[i] = (i + 10) + (i * 0.0030);
|
||||||
in.valuators.data_frac[i] = i + 20;
|
|
||||||
in.valuators.data_raw_frac[i] = i + 30;
|
|
||||||
test_XIRawEvent(&in);
|
test_XIRawEvent(&in);
|
||||||
XIClearMask(in.valuators.mask, i);
|
XIClearMask(in.valuators.mask, i);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue