Input: Don't call positionSprite for non-pointer devices

If the device doesn't have any valuators, or if it has less than two of
them, don't bother calling positionSprite.  Users with one-dimensional
pointing devices may be upset.

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 16:50:55 +00:00 committed by Peter Hutterer
parent 4c364a312d
commit 51437995a5

View File

@ -792,28 +792,19 @@ positionSprite(DeviceIntPtr dev, int mode,
int old_screenx, old_screeny;
double val, ret;
/* scale x&y to screen */
if (dev->valuator && dev->valuator->numAxes > 0) {
val = *x + x_frac;
ret = rescaleValuatorAxis(val, dev->valuator->axes + 0, NULL,
scr->width);
*screenx = trunc(ret);
*screenx_frac = ret - trunc(ret);
} else {
*screenx = dev->last.valuators[0];
*screenx_frac = dev->last.remainder[0];
}
if (!dev->valuator || dev->valuator->numAxes < 2)
return;
if (dev->valuator && dev->valuator->numAxes > 1) {
val = *y + y_frac;
ret = rescaleValuatorAxis(val, dev->valuator->axes + 1, NULL,
scr->height);
*screeny = trunc(ret);
*screeny_frac = ret - trunc(ret);
} else {
*screeny = dev->last.valuators[1];
*screeny_frac = dev->last.remainder[1];
}
/* scale x&y to screen */
val = *x + x_frac;
ret = rescaleValuatorAxis(val, dev->valuator->axes + 0, NULL, scr->width);
*screenx = trunc(ret);
*screenx_frac = ret - trunc(ret);
val = *y + y_frac;
ret = rescaleValuatorAxis(val, dev->valuator->axes + 1, NULL, scr->height);
*screeny = trunc(ret);
*screeny_frac = ret - trunc(ret);
/* Hit the left screen edge? */
if (*screenx <= 0 && *screenx_frac < 0.0f)