Hi, On 08/27/2014 06:31 AM, Peter Hutterer wrote: > We apply calibration to single-touch and absolute devices, but we might as > well do so for multitouch events. > > Signed-off-by: Peter Hutterer <[email protected]> > --- > src/evdev.c | 31 +++++++++++++++++++------------ > 1 file changed, 19 insertions(+), 12 deletions(-) > > diff --git a/src/evdev.c b/src/evdev.c > index 9c53e32..a029887 100644 > --- a/src/evdev.c > +++ b/src/evdev.c > @@ -150,19 +150,20 @@ evdev_device_led_update(struct evdev_device *device, > enum libinput_led leds) > static void > transform_absolute(struct evdev_device *device, int32_t *x, int32_t *y) > { > - if (!device->abs.apply_calibration) { > - *x = device->abs.x; > - *y = device->abs.y; > + int32_t tx, ty; > + > + if (!device->abs.apply_calibration) > return; > - } else { > - *x = device->abs.x * device->abs.calibration[0] + > - device->abs.y * device->abs.calibration[1] + > - device->abs.calibration[2]; > > - *y = device->abs.x * device->abs.calibration[3] + > - device->abs.y * device->abs.calibration[4] + > - device->abs.calibration[5]; > - } > + tx = *x * device->abs.calibration[0] + > + *y * device->abs.calibration[1] + > + device->abs.calibration[2]; > + > + ty = *x * device->abs.calibration[3] + > + *y * device->abs.calibration[4] + > + device->abs.calibration[5]; > + *x = tx; > + *y = ty;
Why not simple write: *x = (long calculation); *y = (long calculation); And get rid of tx and ty? Otherwise looks good. Regards, Hans > } > > static inline double > @@ -194,7 +195,7 @@ evdev_flush_pending_event(struct evdev_device *device, > uint64_t time) > struct libinput *libinput = device->base.seat->libinput; > struct motion_params motion; > int32_t cx, cy; > - double x, y; > + int32_t x, y; > int slot; > int seat_slot; > struct libinput_device *base = &device->base; > @@ -239,6 +240,7 @@ evdev_flush_pending_event(struct evdev_device *device, > uint64_t time) > seat->slot_map |= 1 << seat_slot; > x = device->mt.slots[slot].x; > y = device->mt.slots[slot].y; > + transform_absolute(device, &x, &y); > > touch_notify_touch_down(base, time, slot, seat_slot, x, y); > break; > @@ -253,6 +255,7 @@ evdev_flush_pending_event(struct evdev_device *device, > uint64_t time) > if (seat_slot == -1) > break; > > + transform_absolute(device, &x, &y); > touch_notify_touch_motion(base, time, slot, seat_slot, x, y); > break; > case EVDEV_ABSOLUTE_MT_UP: > @@ -288,11 +291,15 @@ evdev_flush_pending_event(struct evdev_device *device, > uint64_t time) > > seat->slot_map |= 1 << seat_slot; > > + cx = device->abs.x; > + cy = device->abs.y; > transform_absolute(device, &cx, &cy); > > touch_notify_touch_down(base, time, -1, seat_slot, cx, cy); > break; > case EVDEV_ABSOLUTE_MOTION: > + cx = device->abs.x; > + cy = device->abs.y; > transform_absolute(device, &cx, &cy); > x = cx; > y = cy; > _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
