mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-06 10:50:11 +01:00
//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 <Jan_B@gmx.ch>.
This commit is contained in:
parent
fe18885917
commit
828cdc528d
1 changed files with 9 additions and 4 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue