Change RawDeviceEvent to use doubles for valuators internally, rather than data(_raw) and data(_raw)_frac.
Signed-off-by: Daniel Stone <[email protected]> Reviewed-by: Peter Hutterer <[email protected]> --- dix/eventconvert.c | 13 ++++++++----- dix/getevents.c | 20 ++++++-------------- include/eventstr.h | 6 ++---- test/xi2/protocol-eventconvert.c | 14 ++++++-------- 4 files changed, 22 insertions(+), 31 deletions(-) diff --git a/dix/eventconvert.c b/dix/eventconvert.c index fa8ba9e..54e9020 100644 --- a/dix/eventconvert.c +++ b/dix/eventconvert.c @@ -649,7 +649,7 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi) int vallen, nvals; int i, len = sizeof(xXIRawEvent); char *ptr; - FP3232 *axisval; + FP3232 *axisval, *axisval_raw; nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask)); len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once @@ -671,16 +671,19 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi) ptr = (char*)&raw[1]; axisval = (FP3232*)(ptr + raw->valuators_len * 4); + axisval_raw = axisval + nvals; for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++) { if (BitIsOn(ev->valuators.mask, i)) { SetBit(ptr, i); - axisval->integral = ev->valuators.data[i]; - axisval->frac = ev->valuators.data_frac[i]; - (axisval + nvals)->integral = ev->valuators.data_raw[i]; - (axisval + nvals)->frac = ev->valuators.data_raw_frac[i]; + axisval->integral = trunc(ev->valuators.data[i]); + axisval->frac = ev->valuators.data[i] - axisval->integral; + axisval_raw->integral = trunc(ev->valuators.data_raw[i]); + axisval_raw->frac = ev->valuators.data_raw[i] - + axisval_raw->integral; axisval++; + axisval_raw++; } } diff --git a/dix/getevents.c b/dix/getevents.c index 9eecfdd..331613a 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -178,20 +178,16 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail) } static void -set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, int32_t* data, - int32_t* data_frac) +set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, double* data) { int i; - double val; for (i = 0; i < valuator_mask_size(mask); i++) { if (valuator_mask_isset(mask, i)) { SetBit(event->valuators.mask, i); - val = valuator_mask_get_double(mask, i); - data[i] = trunc(val); - data_frac[i] = (val - data[i]) * (1UL << 32); + data[i] = valuator_mask_get_double(mask, i); } } } @@ -969,13 +965,11 @@ GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type, valuator_mask_copy(&mask, mask_in); init_raw(pDev, raw, ms, type, key_code); - set_raw_valuators(raw, &mask, raw->valuators.data_raw, - raw->valuators.data_raw_frac); + set_raw_valuators(raw, &mask, raw->valuators.data_raw); clipValuators(pDev, &mask); - set_raw_valuators(raw, &mask, raw->valuators.data, - raw->valuators.data_frac); + set_raw_valuators(raw, &mask, raw->valuators.data); event = &events->device_event; init_event(pDev, event, ms); @@ -1145,8 +1139,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons valuator_mask_copy(&mask, mask_in); init_raw(pDev, raw, ms, type, buttons); - set_raw_valuators(raw, &mask, raw->valuators.data_raw, - raw->valuators.data_raw_frac); + set_raw_valuators(raw, &mask, raw->valuators.data_raw); if (flags & POINTER_ABSOLUTE) { @@ -1178,8 +1171,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons moveRelative(pDev, &mask); } - set_raw_valuators(raw, &mask, raw->valuators.data, - raw->valuators.data_frac); + set_raw_valuators(raw, &mask, raw->valuators.data); positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative, scr, &mask, &screenx, &screeny); diff --git a/include/eventstr.h b/include/eventstr.h index ecaeddc..0645585 100644 --- a/include/eventstr.h +++ b/include/eventstr.h @@ -199,10 +199,8 @@ struct _RawDeviceEvent } detail; struct { uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ - int32_t data[MAX_VALUATORS]; /**< Valuator data */ - int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ - int32_t data_raw[MAX_VALUATORS]; /**< Valuator data as posted */ - int32_t data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */ + double data[MAX_VALUATORS]; /**< Valuator data */ + double data_raw[MAX_VALUATORS]; /**< Valuator data as posted */ } valuators; uint32_t flags; /**< Flags to be copied into the generated event */ }; diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c index 5eb4531..2e915e8 100644 --- a/test/xi2/protocol-eventconvert.c +++ b/test/xi2/protocol-eventconvert.c @@ -95,8 +95,8 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out, value = (FP3232*)(((unsigned char*)&out[1]) + out->valuators_len * 4); value += nvals; - vi.integral = in->valuators.data[i]; - vi.frac = in->valuators.data_frac[i]; + vi.integral = trunc(in->valuators.data[i]); + vi.frac = in->valuators.data[i] - vi.integral; vo.integral = value->integral; vo.frac = value->frac; @@ -112,8 +112,8 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out, raw_value = value + bits_set; - vi.integral = in->valuators.data_raw[i]; - vi.frac = in->valuators.data_raw_frac[i]; + vi.integral = trunc(in->valuators.data_raw[i]); + vi.frac = in->valuators.data_raw[i] - vi.integral; vo.integral = raw_value->integral; vo.frac = raw_value->frac; @@ -252,10 +252,8 @@ static void test_convert_XIRawEvent(void) { XISetMask(in.valuators.mask, i); - in.valuators.data[i] = i; - in.valuators.data_raw[i] = i + 10; - in.valuators.data_frac[i] = i + 20; - in.valuators.data_raw_frac[i] = i + 30; + in.valuators.data[i] = i + (i * 0.0010); + in.valuators.data_raw[i] = (i + 10) + (i * 0.0030); test_XIRawEvent(&in); XIClearMask(in.valuators.mask, i); } -- 1.7.5.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
