[PATCH 1/3] dix: don't pass x/y to transformAbsolute
Simon Thum
simon.thum at gmx.de
Thu Jun 2 03:54:00 PDT 2011
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 at who-t.net>
Reviewed-by: Simon Thum <simon.thum at 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) {
More information about the xorg-devel
mailing list