| Message ID | 1306814267-23972-1-git-send-email-peter.hutterer@who-t.net |
|---|---|
| State | Accepted, archived |
| Commit | fe4b818700453b76d9f46749dac5d12540b91e63 |
| Headers | show |
diff --git a/dix/getevents.c b/dix/getevents.c index 13789f6..6dcee3e 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1052,17 +1052,38 @@ FreeEventList(InternalEvent *list, int num_events) free(list); } +/** + * Transform vector x/y according to matrix m and drop the rounded coords + * back into x/y. + */ static void -transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y) +transform(struct pixman_f_transform *m, int *x, int *y) { struct pixman_f_vector p = {.v = {*x, *y, 1}}; - - pixman_f_transform_point(&dev->transform, &p); + pixman_f_transform_point(m, &p); *x = lround(p.v[0]); *y = lround(p.v[1]); } +static void +transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) +{ + int x, y; + + x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) : + dev->last.valuators[0]; + y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) : + dev->last.valuators[1]; + + transform(&dev->transform, &x, &y); + + if (valuator_mask_isset(mask, 0)) + valuator_mask_set(mask, 0, x); + if (valuator_mask_isset(mask, 1)) + valuator_mask_set(mask, 1, y); +} + /** * Generate internal events representing this pointer event and enqueue them * on the event queue. @@ -1175,16 +1196,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons } } - x = (valuator_mask_isset(&mask, 0) ? valuator_mask_get(&mask, 0) : - pDev->last.valuators[0]); - y = (valuator_mask_isset(&mask, 1) ? valuator_mask_get(&mask, 1) : - pDev->last.valuators[1]); - transformAbsolute(pDev, &mask, &x, &y); - if (valuator_mask_isset(&mask, 0)) - valuator_mask_set(&mask, 0, x); - if (valuator_mask_isset(&mask, 1)) - valuator_mask_set(&mask, 1, y); - + transformAbsolute(pDev, &mask); moveAbsolute(pDev, &x, &y, &mask); } else { if (flags & POINTER_ACCELERATE) {
On 05/31/2011 05:57 AM, Peter Hutterer wrote: > We passed in the mask, but didn't do anything with it. Move the logic to > take the axes out of the valuator masks into transformAbsolute. > > Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Simon Thum <simon.thum@gmx.de> > --- > dix/getevents.c | 38 +++++++++++++++++++++++++------------- > 1 files changed, 25 insertions(+), 13 deletions(-) > > diff --git a/dix/getevents.c b/dix/getevents.c > index 13789f6..6dcee3e 100644 > --- a/dix/getevents.c > +++ b/dix/getevents.c > @@ -1052,17 +1052,38 @@ FreeEventList(InternalEvent *list, int num_events) > free(list); > } > > +/** > + * Transform vector x/y according to matrix m and drop the rounded coords > + * back into x/y. > + */ > static void > -transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y) > +transform(struct pixman_f_transform *m, int *x, int *y) > { > struct pixman_f_vector p = {.v = {*x, *y, 1}}; > - > - pixman_f_transform_point(&dev->transform, &p); > + pixman_f_transform_point(m, &p); > > *x = lround(p.v[0]); > *y = lround(p.v[1]); > } > > +static void > +transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) > +{ > + int x, y; > + > + x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) : > + dev->last.valuators[0]; > + y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) : > + dev->last.valuators[1]; > + > + transform(&dev->transform, &x, &y); > + > + if (valuator_mask_isset(mask, 0)) > + valuator_mask_set(mask, 0, x); > + if (valuator_mask_isset(mask, 1)) > + valuator_mask_set(mask, 1, y); > +} > + > /** > * Generate internal events representing this pointer event and enqueue them > * on the event queue. > @@ -1175,16 +1196,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons > } > } > > - x = (valuator_mask_isset(&mask, 0) ? valuator_mask_get(&mask, 0) : > - pDev->last.valuators[0]); > - y = (valuator_mask_isset(&mask, 1) ? valuator_mask_get(&mask, 1) : > - pDev->last.valuators[1]); > - transformAbsolute(pDev, &mask, &x, &y); > - if (valuator_mask_isset(&mask, 0)) > - valuator_mask_set(&mask, 0, x); > - if (valuator_mask_isset(&mask, 1)) > - valuator_mask_set(&mask, 1, y); > - > + transformAbsolute(pDev, &mask); > moveAbsolute(pDev, &x, &y, &mask); > } else { > if (flags & POINTER_ACCELERATE) {
We passed in the mask, but didn't do anything with it. Move the logic to take the axes out of the valuator masks into transformAbsolute. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> --- dix/getevents.c | 38 +++++++++++++++++++++++++------------- 1 files changed, 25 insertions(+), 13 deletions(-)