On Thu, Aug 28, 2014 at 03:02:33PM +0200, Hans de Goede wrote:
> 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?

it's easy to overlook  but x is used in the calculation of ty, so we can't
change it yet.

Cheers,
   Peter

> 
> >  }
> >  
> >  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

Reply via email to