diff --git a/Source/utils/display.cpp b/Source/utils/display.cpp index 67b5542a9..291194e35 100644 --- a/Source/utils/display.cpp +++ b/Source/utils/display.cpp @@ -296,6 +296,34 @@ void ReinitializeRenderer() #endif } +void ResizeWindow() +{ + if (ghMainWnd == nullptr) + return; + + Size windowSize = GetPreferedWindowSize(); + +#ifdef USE_SDL1 + SetVideoModeToPrimary(!gbForceWindowed && sgOptions.Graphics.bFullscreen, windowSize.width, windowSize.height); +#else + int flags = 0; + if (sgOptions.Graphics.bUpscale) { + if (!gbForceWindowed && sgOptions.Graphics.bFullscreen) { + flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; + } + SDL_SetWindowResizable(ghMainWnd, SDL_TRUE); + } else if (!gbForceWindowed && sgOptions.Graphics.bFullscreen) { + flags |= SDL_WINDOW_FULLSCREEN; + SDL_SetWindowResizable(ghMainWnd, SDL_FALSE); + } + SDL_SetWindowFullscreen(ghMainWnd, flags); + + SDL_SetWindowSize(ghMainWnd, windowSize.width, windowSize.height); +#endif + + ReinitializeRenderer(); +} + SDL_Surface *GetOutputSurface() { #ifdef USE_SDL1 diff --git a/Source/utils/ui_fwd.h b/Source/utils/ui_fwd.h index 23de12c27..d9ed997f9 100644 --- a/Source/utils/ui_fwd.h +++ b/Source/utils/ui_fwd.h @@ -14,6 +14,7 @@ Uint16 GetViewportHeight(); bool SpawnWindow(const char *lpWindowName); void ReinitializeRenderer(); +void ResizeWindow(); void UiErrorOkDialog(const char *caption, const char *text, bool error = true); } // namespace devilution