Fix weird stair-stepping upward mouse movement on devices with a low scaling factor caused by rounding error (Nexus 9)

This commit is contained in:
Cameron Gutman 2015-10-15 01:48:31 -07:00
parent 4b92b8f714
commit 8938f51292

View File

@ -97,15 +97,34 @@ public class TouchContext {
int deltaY = eventY - lastTouchY; int deltaY = eventY - lastTouchY;
// Scale the deltas based on the factors passed to our constructor // Scale the deltas based on the factors passed to our constructor
deltaX = (int)Math.round((double)deltaX * xFactor); deltaX = (int)Math.round((double)Math.abs(deltaX) * xFactor);
deltaY = (int)Math.round((double)deltaY * yFactor); deltaY = (int)Math.round((double)Math.abs(deltaY) * yFactor);
// Fix up the signs
if (eventX < lastTouchX) {
deltaX = -deltaX;
}
if (eventY < lastTouchY) {
deltaY = -deltaY;
}
// If the scaling factor ended up rounding deltas to zero, wait until they are
// non-zero to update lastTouch that way devices that report small touch events often
// will work correctly
if (deltaX != 0) {
lastTouchX = eventX;
}
if (deltaY != 0) {
lastTouchY = eventY;
}
conn.sendMouseMove((short)deltaX, (short)deltaY); conn.sendMouseMove((short)deltaX, (short)deltaY);
} }
else {
lastTouchX = eventX; lastTouchX = eventX;
lastTouchY = eventY; lastTouchY = eventY;
} }
}
return true; return true;
} }