[Scummvm-git-logs] scummvm master -> 900d7632645498a4c5ffde135aa5db8d87bd5785
criezy
criezy at scummvm.org
Sun Aug 15 12:59:31 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
8a8557e94d BACKENDS: OPENGLSDL: Fix logic errors in window size management
51cff582b5 BACKENDS: OPENGLSDL: Disable storing and restoring window sizes for SDL1
1aaab76b44 BACKENDS: OPENGLSDL: Fix aspect ratio on auto-calculated window sizes
900d763264 BACKENDS: OPENGLSDL: Enlarge window if stored dimensions are not sufficient
Commit: 8a8557e94d3b0562183b23ef882b2358db1b34ac
https://github.com/scummvm/scummvm/commit/8a8557e94d3b0562183b23ef882b2358db1b34ac
Author: Lothar Serra Mari (mail at serra.me)
Date: 2021-08-15T13:58:48+01:00
Commit Message:
BACKENDS: OPENGLSDL: Fix logic errors in window size management
Changed paths:
backends/graphics/openglsdl/openglsdl-graphics.cpp
backends/graphics/openglsdl/openglsdl-graphics.h
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index 495e4166d9..3ca4a8e008 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -303,17 +303,13 @@ void OpenGLSdlGraphicsManager::notifyResize(const int width, const int height) {
currentWidth = (int)(currentWidth / scale);
currentHeight = (int)(currentHeight / scale);
#endif
- // Reset maximized flag
- _windowIsMaximized = false;
// Check if the ScummVM window is maximized and store the current
// window dimensions.
- if ((SDL_GetWindowFlags(_window->getSDLWindow()) & SDL_WINDOW_MAXIMIZED) == 128) {
- _windowIsMaximized = true;
+ if (SDL_GetWindowFlags(_window->getSDLWindow()) & SDL_WINDOW_MAXIMIZED) {
ConfMan.setInt("window_maximized_width", currentWidth, Common::ConfigManager::kApplicationDomain);
ConfMan.setInt("window_maximized_height", currentHeight, Common::ConfigManager::kApplicationDomain);
} else {
- _windowIsMaximized = false;
ConfMan.setInt("last_window_width", currentWidth, Common::ConfigManager::kApplicationDomain);
ConfMan.setInt("last_window_height", currentHeight, Common::ConfigManager::kApplicationDomain);
}
@@ -353,13 +349,14 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
// Fetch current desktop resolution and determining max. width and height
Common::Rect desktopRes = _window->getDesktopResolution();
- if (_windowIsMaximized == true) {
+ bool _isMaximized = (SDL_GetWindowFlags(_window->getSDLWindow()) & SDL_WINDOW_MAXIMIZED);
+ if (_isMaximized && ConfMan.hasKey("window_maximized_width", Common::ConfigManager::kApplicationDomain) && ConfMan.hasKey("window_maximized_height", Common::ConfigManager::kApplicationDomain)) {
// Set the window size to the values stored when the window was maximized
- // for the last time. We also need to reset any scaling here.
+ // for the last time.
requestedWidth = ConfMan.getInt("window_maximized_width", Common::ConfigManager::kApplicationDomain);
requestedHeight = ConfMan.getInt("window_maximized_height", Common::ConfigManager::kApplicationDomain);
- } else if (ConfMan.hasKey("last_window_width", Common::ConfigManager::kApplicationDomain) && ConfMan.hasKey("last_window_height", Common::ConfigManager::kApplicationDomain)) {
+ } else if (!_isMaximized && ConfMan.hasKey("last_window_width", Common::ConfigManager::kApplicationDomain) && ConfMan.hasKey("last_window_height", Common::ConfigManager::kApplicationDomain)) {
// Restore previously stored window dimensions.
requestedWidth = ConfMan.getInt("last_window_width", Common::ConfigManager::kApplicationDomain);
requestedHeight = ConfMan.getInt("last_window_height", Common::ConfigManager::kApplicationDomain);
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h
index 98fdd8b926..6feb1ad6f6 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.h
+++ b/backends/graphics/openglsdl/openglsdl-graphics.h
@@ -93,7 +93,6 @@ private:
bool _gotResize;
bool _wantsFullScreen;
- bool _windowIsMaximized;
uint _ignoreResizeEvents;
struct VideoMode {
Commit: 51cff582b5ad8faa8e5c8f9c10b01ef7af318021
https://github.com/scummvm/scummvm/commit/51cff582b5ad8faa8e5c8f9c10b01ef7af318021
Author: Lothar Serra Mari (mail at serra.me)
Date: 2021-08-15T13:58:48+01:00
Commit Message:
BACKENDS: OPENGLSDL: Disable storing and restoring window sizes for SDL1
The previous implementation was already broken, since the values were never stored in the config file
since that part was already guarded by SDL_VERSION_ATLEAST.
Since we have no way to properly determine if a window is maximized or not for
SDL1, I recommend skipping this part in the compilation.
Now, the function at least works properly for SDL2 - it was broken on _both_ versions before.
Changed paths:
backends/graphics/openglsdl/openglsdl-graphics.cpp
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index 3ca4a8e008..f32efaa5d6 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -349,6 +349,7 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
// Fetch current desktop resolution and determining max. width and height
Common::Rect desktopRes = _window->getDesktopResolution();
+#if SDL_VERSION_ATLEAST(2, 0, 0)
bool _isMaximized = (SDL_GetWindowFlags(_window->getSDLWindow()) & SDL_WINDOW_MAXIMIZED);
if (_isMaximized && ConfMan.hasKey("window_maximized_width", Common::ConfigManager::kApplicationDomain) && ConfMan.hasKey("window_maximized_height", Common::ConfigManager::kApplicationDomain)) {
// Set the window size to the values stored when the window was maximized
@@ -377,6 +378,18 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
ConfMan.flushToDisk();
}
+#else
+ // Set the basic window size based on the desktop resolution
+ // since we cannot reliably determine the current window state
+ // on SDL1.
+ requestedWidth = desktopRes.width() * 0.3f;
+ requestedHeight = desktopRes.height() * 0.4f;
+
+ // Apply scaler
+ requestedWidth *= _graphicsScale;
+ requestedHeight *= _graphicsScale;
+#endif
+
// Determine current aspect ratio
uint maxAllowedWidth = desktopRes.width();
uint maxAllowedHeight = desktopRes.height();
Commit: 1aaab76b442a20ee9bbfe6a794c313dc881d60c3
https://github.com/scummvm/scummvm/commit/1aaab76b442a20ee9bbfe6a794c313dc881d60c3
Author: Lothar Serra Mari (mail at serra.me)
Date: 2021-08-15T13:58:48+01:00
Commit Message:
BACKENDS: OPENGLSDL: Fix aspect ratio on auto-calculated window sizes
Changed paths:
backends/graphics/openglsdl/openglsdl-graphics.cpp
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index f32efaa5d6..74f2059b09 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -365,12 +365,8 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
} else {
// Set the basic window size based on the desktop resolution
// since we have no values stored, e.g. on first launch.
- requestedWidth = desktopRes.width() * 0.3f;
- requestedHeight = desktopRes.height() * 0.4f;
-
- // Apply scaler
- requestedWidth *= _graphicsScale;
- requestedHeight *= _graphicsScale;
+ requestedWidth = MAX<uint>(desktopRes.width() / 2, 640);
+ requestedHeight = requestedWidth * 3 / 4;
// Save current window dimensions
ConfMan.setInt("last_window_width", requestedWidth, Common::ConfigManager::kApplicationDomain);
@@ -382,18 +378,15 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
// Set the basic window size based on the desktop resolution
// since we cannot reliably determine the current window state
// on SDL1.
- requestedWidth = desktopRes.width() * 0.3f;
- requestedHeight = desktopRes.height() * 0.4f;
+ requestedWidth = MAX<uint>(desktopRes.width() / 2, 640);
+ requestedHeight = requestedWidth * 3 / 4;
- // Apply scaler
- requestedWidth *= _graphicsScale;
- requestedHeight *= _graphicsScale;
#endif
- // Determine current aspect ratio
+ // Set allowed dimensions
uint maxAllowedWidth = desktopRes.width();
uint maxAllowedHeight = desktopRes.height();
- float ratio = (float)requestedWidth / requestedHeight;
+ float ratio = (float)requestedWidth / (float)requestedHeight;
// Check if we request a larger window than physically possible,
// e.g. by starting with additional launcher parameters forcing
Commit: 900d7632645498a4c5ffde135aa5db8d87bd5785
https://github.com/scummvm/scummvm/commit/900d7632645498a4c5ffde135aa5db8d87bd5785
Author: Lothar Serra Mari (mail at serra.me)
Date: 2021-08-15T13:58:48+01:00
Commit Message:
BACKENDS: OPENGLSDL: Enlarge window if stored dimensions are not sufficient
Changed paths:
backends/graphics/openglsdl/openglsdl-graphics.cpp
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index 74f2059b09..9f1b5397b9 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -358,7 +358,7 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
requestedHeight = ConfMan.getInt("window_maximized_height", Common::ConfigManager::kApplicationDomain);
} else if (!_isMaximized && ConfMan.hasKey("last_window_width", Common::ConfigManager::kApplicationDomain) && ConfMan.hasKey("last_window_height", Common::ConfigManager::kApplicationDomain)) {
- // Restore previously stored window dimensions.
+ // Load previously stored window dimensions.
requestedWidth = ConfMan.getInt("last_window_width", Common::ConfigManager::kApplicationDomain);
requestedHeight = ConfMan.getInt("last_window_height", Common::ConfigManager::kApplicationDomain);
@@ -383,6 +383,14 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested
#endif
+ // In order to prevent any unnecessary downscaling (e.g. when launching
+ // a game in 800x600 while having a smaller screen size stored in the configuration file),
+ // we override the window dimensions with the "real" resolution request made by the engine.
+ if ((requestedWidth < _lastRequestedWidth * _graphicsScale || requestedHeight < _lastRequestedHeight * _graphicsScale) && ConfMan.getActiveDomain()) {
+ requestedWidth = _lastRequestedWidth * _graphicsScale;
+ requestedHeight = _lastRequestedHeight * _graphicsScale;
+ }
+
// Set allowed dimensions
uint maxAllowedWidth = desktopRes.width();
uint maxAllowedHeight = desktopRes.height();
More information about the Scummvm-git-logs
mailing list