From 159e443a2209eb3ea305e84b847b76ef1637d005 Mon Sep 17 00:00:00 2001 From: Roland Mainz Date: Mon, 13 Dec 2004 02:13:32 +0000 Subject: [PATCH] //bugs.freedesktop.org/show_bug.cgi?id=1688) attachment #1530 (https://bugs.freedesktop.org/attachment.cgi?id=1530): Fix the current implementation to make it possible to slow down the mouse pointer or use arbitrary fractions (without running into rounding error issues). The change is using the same method of preserving rounding errors that the exponential method is already using. Patch by Jan Brunner . --- hw/xfree86/common/xf86Xinput.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index eb871a40d..0d89f895c 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -932,10 +932,15 @@ xf86PostMotionEvent(DeviceIntPtr device, /* modeled from xf86Events.c */ if (device->ptrfeed->ctrl.threshold) { if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) { - valuator[0] = (dx * device->ptrfeed->ctrl.num) / - device->ptrfeed->ctrl.den; - valuator[1] = (dy * device->ptrfeed->ctrl.num) / - device->ptrfeed->ctrl.den; + local->dxremaind = ((float)dx * (float)(device->ptrfeed->ctrl.num)) / + (float)(device->ptrfeed->ctrl.den) + local->dxremaind; + valuator[0] = (int)local->dxremaind; + local->dxremaind = local->dxremaind - (float)valuator[0]; + + local->dyremaind = ((float)dy * (float)(device->ptrfeed->ctrl.num)) / + (float)(device->ptrfeed->ctrl.den) + local->dyremaind; + valuator[1] = (int)local->dyremaind; + local->dyremaind = local->dyremaind - (float)valuator[1]; } } else if (dx || dy) {