diff --git a/Source/options.cpp b/Source/options.cpp index e0c44a28e..f6a6a8357 100644 --- a/Source/options.cpp +++ b/Source/options.cpp @@ -39,6 +39,7 @@ #include "options.h" #include "qol/monhealthbar.h" #include "qol/xpbar.h" +#include "utils/display.h" #include "utils/file_util.h" #include "utils/language.h" #include "utils/log.hpp" @@ -677,6 +678,7 @@ void OptionEntryResolution::CheckResolutionsAreInitialized() const return; std::vector sizes; + float scaleFactor = GetDpiScalingFactor(); // Add resolutions #ifdef USE_SDL1 @@ -687,7 +689,9 @@ void OptionEntryResolution::CheckResolutionsAreInitialized() const if (modes[i]->w < modes[i]->h) { std::swap(modes[i]->w, modes[i]->h); } - sizes.emplace_back(Size { modes[i]->w, modes[i]->h * scaleFactor }); + sizes.emplace_back(Size { + static_cast(modes[i]->w * scaleFactor), + static_cast(modes[i]->h * scaleFactor) }); } } #else @@ -700,7 +704,9 @@ void OptionEntryResolution::CheckResolutionsAreInitialized() const if (mode.w < mode.h) { std::swap(mode.w, mode.h); } - sizes.emplace_back(Size { mode.w, mode.h * scaleFactor }); + sizes.emplace_back(Size { + static_cast(mode.w * scaleFactor), + static_cast(mode.h * scaleFactor) }); } #endif diff --git a/Source/utils/display.cpp b/Source/utils/display.cpp index 510be9051..51ce2f34a 100644 --- a/Source/utils/display.cpp +++ b/Source/utils/display.cpp @@ -110,8 +110,32 @@ Size GetPreferredWindowSize() AdjustToScreenGeometry(windowSize); return windowSize; } + } // namespace +float GetDpiScalingFactor() +{ +#ifdef USE_SDL1 + return 1.0F; +#else + if (renderer == nullptr) + return 1.0F; + + int renderWidth; + int renderHeight; + SDL_GetRendererOutputSize(renderer, &renderWidth, &renderHeight); + + int windowWidth; + int windowHeight; + SDL_GetWindowSize(ghMainWnd, &windowWidth, &windowHeight); + + float hfactor = static_cast(renderWidth) / windowWidth; + float vhfactor = static_cast(renderHeight) / windowHeight; + + return std::min(hfactor, vhfactor); +#endif +} + #ifdef USE_SDL1 void SetVideoMode(int width, int height, int bpp, uint32_t flags) { diff --git a/Source/utils/display.h b/Source/utils/display.h index 7ccc46a8d..d3c753db9 100644 --- a/Source/utils/display.h +++ b/Source/utils/display.h @@ -26,6 +26,8 @@ extern SDLPaletteUniquePtr Palette; extern SDL_Surface *PalSurface; extern unsigned int pal_surface_palette_version; +float GetDpiScalingFactor(); + #ifdef USE_SDL1 void SetVideoMode(int width, int height, int bpp, uint32_t flags); void SetVideoModeToPrimary(bool fullscreen, int width, int height);