From 64f9c902ddf0c8294fd9e5f66cf96661eb12040b Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 20:09:29 +0100 Subject: OPENGL: Smooth mouse experience when black bars are visible. This gets rid of the feeling of the mouse sticking to black borders by using the full output resolution as area for tracking game mouse movement. The same behavior is present in plain SDL output with SDL2. --- backends/graphics/opengl/opengl-graphics.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) (limited to 'backends/graphics/opengl') diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index c80f57a40e..ac6d41d47d 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -551,11 +551,8 @@ void OpenGLGraphicsManager::warpMouse(int x, int y) { return; } - x = (x * _displayWidth) / _gameScreen->getWidth(); - y = (y * _displayHeight) / _gameScreen->getHeight(); - - x += _displayX; - y += _displayY; + x = (x * _outputScreenWidth) / _gameScreen->getWidth(); + y = (y * _outputScreenHeight) / _gameScreen->getHeight(); } setMousePosition(x, y); @@ -946,18 +943,11 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) { y = (y * _overlay->getHeight()) / _outputScreenHeight; } } else if (_gameScreen) { - x -= _displayX; - y -= _displayY; - const int16 width = _gameScreen->getWidth(); const int16 height = _gameScreen->getHeight(); - x = (x * width) / (int)_displayWidth; - y = (y * height) / (int)_displayHeight; - - // Make sure we only supply valid coordinates. - x = CLIP(x, 0, width - 1); - y = CLIP(y, 0, height - 1); + x = (x * width) / (int)_outputScreenWidth; + y = (y * height) / (int)_outputScreenHeight; } } @@ -975,8 +965,8 @@ void OpenGLGraphicsManager::setMousePosition(int x, int y) { _cursorDisplayX = x; _cursorDisplayY = y; } else { - _cursorDisplayX = CLIP(x, _displayX, _displayX + _displayWidth - 1); - _cursorDisplayY = CLIP(y, _displayY, _displayY + _displayHeight - 1); + _cursorDisplayX = _displayX + (x * _displayWidth) / _outputScreenWidth; + _cursorDisplayY = _displayY + (y * _displayHeight) / _outputScreenHeight; } } -- cgit v1.2.3