Input: Convert transformAbsolute to work on doubles

Change transformAbsolute to use doubles internally.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Daniel Stone 2011-03-02 14:50:29 +00:00 committed by Peter Hutterer
parent 3463078f96
commit cdf202250e

View File

@ -1026,32 +1026,37 @@ FreeEventList(InternalEvent *list, int num_events)
* back into x/y. * back into x/y.
*/ */
static void static void
transform(struct pixman_f_transform *m, int *x, int *y) transform(struct pixman_f_transform *m, double *x, double *y)
{ {
struct pixman_f_vector p = {.v = {*x, *y, 1}}; struct pixman_f_vector p = {.v = {*x, *y, 1}};
pixman_f_transform_point(m, &p); pixman_f_transform_point(m, &p);
*x = lround(p.v[0]); *x = p.v[0];
*y = lround(p.v[1]); *y = p.v[1];
} }
static void static void
transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
{ {
int x, y, ox, oy; double x, y, ox, oy;
ox = x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) : if (valuator_mask_isset(mask, 0))
dev->last.valuators[0]; ox = x = valuator_mask_get_double(mask, 0);
oy = y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) : else
dev->last.valuators[1]; ox = x = dev->last.valuators[0] + dev->last.remainder[0];
if (valuator_mask_isset(mask, 1))
oy = y = valuator_mask_get_double(mask, 1);
else
oy = y = dev->last.valuators[1] + dev->last.remainder[1];
transform(&dev->transform, &x, &y); transform(&dev->transform, &x, &y);
if (valuator_mask_isset(mask, 0) || ox != x) if (valuator_mask_isset(mask, 0) || ox != x)
valuator_mask_set(mask, 0, x); valuator_mask_set_double(mask, 0, x);
if (valuator_mask_isset(mask, 1) || oy != y) if (valuator_mask_isset(mask, 1) || oy != y)
valuator_mask_set(mask, 1, y); valuator_mask_set_double(mask, 1, y);
} }
/** /**