From 2286440b46637ab4e66c174fb56b2782fa24db0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20B=C3=A1lint=20Misius?= Date: Sat, 21 Dec 2024 23:55:50 +0100 Subject: [PATCH] Update refresh rate when the window is moved to another display --- src/PowderToySDL.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp index c96885618..96612dc10 100644 --- a/src/PowderToySDL.cpp +++ b/src/PowderToySDL.cpp @@ -144,6 +144,21 @@ void blit(pixel *vid) SDL_RenderPresent(sdl_renderer); } +void UpdateRefreshRate() +{ + std::optional refreshRate; + int displayIndex = SDL_GetWindowDisplayIndex(sdl_window); + if (displayIndex >= 0) + { + SDL_DisplayMode displayMode; + if (!SDL_GetCurrentDisplayMode(displayIndex, &displayMode) && displayMode.refresh_rate) + { + refreshRate = displayMode.refresh_rate; + } + } + ui::Engine::Ref().SetRefreshRate(refreshRate); +} + void SDLOpen() { if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) @@ -156,7 +171,6 @@ void SDLOpen() SDLSetScreen(); int displayIndex = SDL_GetWindowDisplayIndex(sdl_window); - std::optional refreshRate; if (displayIndex >= 0) { SDL_Rect rect; @@ -165,13 +179,8 @@ void SDLOpen() desktopWidth = rect.w; desktopHeight = rect.h; } - SDL_DisplayMode displayMode; - if (!SDL_GetCurrentDisplayMode(displayIndex, &displayMode) && displayMode.refresh_rate) - { - refreshRate = displayMode.refresh_rate; - } } - ui::Engine::Ref().SetRefreshRate(refreshRate); + UpdateRefreshRate(); StopTextInput(); } @@ -431,6 +440,10 @@ static void EventProcess(const SDL_Event &event) calculatedInitialMouse = true; } break; + + case SDL_WINDOWEVENT_DISPLAY_CHANGED: + UpdateRefreshRate(); + break; } break; }