aboutsummaryrefslogtreecommitdiff
path: root/backends/graphics/surfacesdl
diff options
context:
space:
mode:
authorColin Snover2017-10-01 16:23:22 -0500
committerColin Snover2017-10-07 12:30:29 -0500
commit6e157429b7a5a64af6265d075c88595df2d6fd79 (patch)
tree6e16e359d2f427ff0aa17ae229780509595ee1b1 /backends/graphics/surfacesdl
parent24f5d456195df3b65ed2876cbca2e2981f3d1a07 (diff)
downloadscummvm-rg350-6e157429b7a5a64af6265d075c88595df2d6fd79.tar.gz
scummvm-rg350-6e157429b7a5a64af6265d075c88595df2d6fd79.tar.bz2
scummvm-rg350-6e157429b7a5a64af6265d075c88595df2d6fd79.zip
BACKENDS: Fix window sizing of games that switch between multiple resolutions
Diffstat (limited to 'backends/graphics/surfacesdl')
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.cpp45
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.h2
2 files changed, 33 insertions, 14 deletions
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index de54145d5f..897cdcb352 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -598,19 +598,11 @@ void SurfaceSdlGraphicsManager::detectSupportedFormats() {
}
#endif
-bool SurfaceSdlGraphicsManager::setGraphicsMode(int mode) {
- Common::StackLock lock(_graphicsMutex);
-
- assert(_transactionMode == kTransactionActive);
-
- if (_oldVideoMode.setup && _oldVideoMode.mode == mode)
- return true;
-
- int newScaleFactor = 1;
-
+int SurfaceSdlGraphicsManager::getGraphicsModeScale(int mode) const {
+ int scale;
switch (mode) {
case GFX_NORMAL:
- newScaleFactor = 1;
+ scale = 1;
break;
#ifdef USE_SCALERS
case GFX_DOUBLESIZE:
@@ -623,18 +615,34 @@ bool SurfaceSdlGraphicsManager::setGraphicsMode(int mode) {
#ifdef USE_HQ_SCALERS
case GFX_HQ2X:
#endif
- newScaleFactor = 2;
+ scale = 2;
break;
case GFX_TRIPLESIZE:
case GFX_ADVMAME3X:
#ifdef USE_HQ_SCALERS
case GFX_HQ3X:
#endif
- newScaleFactor = 3;
+ scale = 3;
break;
#endif
-
default:
+ scale = -1;
+ }
+
+ return scale;
+}
+
+bool SurfaceSdlGraphicsManager::setGraphicsMode(int mode) {
+ Common::StackLock lock(_graphicsMutex);
+
+ assert(_transactionMode == kTransactionActive);
+
+ if (_oldVideoMode.setup && _oldVideoMode.mode == mode)
+ return true;
+
+ int newScaleFactor = getGraphicsModeScale(mode);
+
+ if (newScaleFactor == -1) {
warning("unknown gfx mode %d", mode);
return false;
}
@@ -774,6 +782,15 @@ void SurfaceSdlGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFo
return;
#endif
+ if ((int)w != _videoMode.screenWidth || (int)h != _videoMode.screenHeight) {
+ const bool useDefault = defaultGraphicsModeConfig();
+ if (useDefault && w > 320) {
+ resetGraphicsScale();
+ } else {
+ setGraphicsMode(getGraphicsModeIdByName(ConfMan.get("gfx_mode")));
+ }
+ }
+
_videoMode.screenWidth = w;
_videoMode.screenHeight = h;
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index e93cf410ea..62a4a38d3e 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -190,6 +190,8 @@ protected:
/** Hardware screen */
SDL_Surface *_hwscreen;
+ virtual int getGraphicsModeScale(int mode) const override;
+
#if SDL_VERSION_ATLEAST(2, 0, 0)
/* SDL2 features a different API for 2D graphics. We create a wrapper
* around this API to keep the code paths as close as possible. */