//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
f1768677f7
commit
159e443a22
|
@ -932,10 +932,15 @@ xf86PostMotionEvent(DeviceIntPtr device,
|
||||||
/* modeled from xf86Events.c */
|
/* modeled from xf86Events.c */
|
||||||
if (device->ptrfeed->ctrl.threshold) {
|
if (device->ptrfeed->ctrl.threshold) {
|
||||||
if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) {
|
if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) {
|
||||||
valuator[0] = (dx * device->ptrfeed->ctrl.num) /
|
local->dxremaind = ((float)dx * (float)(device->ptrfeed->ctrl.num)) /
|
||||||
device->ptrfeed->ctrl.den;
|
(float)(device->ptrfeed->ctrl.den) + local->dxremaind;
|
||||||
valuator[1] = (dy * device->ptrfeed->ctrl.num) /
|
valuator[0] = (int)local->dxremaind;
|
||||||
device->ptrfeed->ctrl.den;
|
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) {
|
else if (dx || dy) {
|
||||||
|
|
Loading…
Reference in New Issue