diff options
author | Johannes Schickel | 2011-02-19 20:44:06 +0100 |
---|---|---|
committer | Johannes Schickel | 2011-02-19 20:46:47 +0100 |
commit | 32d0e4c15fb33f80db194087850466664a43516a (patch) | |
tree | fe3c8288fd87b325d1059f52953bb5501c04f8b9 | |
parent | 9954eb5a996a137a9a26abb766212e3fa471e3fe (diff) | |
download | scummvm-rg350-32d0e4c15fb33f80db194087850466664a43516a.tar.gz scummvm-rg350-32d0e4c15fb33f80db194087850466664a43516a.tar.bz2 scummvm-rg350-32d0e4c15fb33f80db194087850466664a43516a.zip |
OPENGLSDL: Avoid warping in warpMouse when the logical coordinates did not change.
This fixes a slight move of the mouse cursor when the hardware mouse position
is at a subpixel from the logical coordinates.
-rw-r--r-- | backends/graphics/openglsdl/openglsdl-graphics.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index b10c94b03f..c7ce0aa7de 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -195,6 +195,18 @@ void OpenGLSdlGraphicsManager::warpMouse(int x, int y) { int scaledX = x; int scaledY = y; + int16 currentX = _cursorState.x; + int16 currentY = _cursorState.y; + + adjustMousePosition(currentX, currentY); + + // Do not adjust the real screen position, when the current game / overlay + // coordinates match the requested coordinates. This avoids a slight + // movement which might occur otherwise when the mouse is at a subpixel + // position. + if (x == currentX && y == currentY) + return; + if (_videoMode.mode == OpenGL::GFX_NORMAL) { if (_videoMode.hardwareWidth != _videoMode.overlayWidth) scaledX = scaledX * _videoMode.hardwareWidth / _videoMode.overlayWidth; |