diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp index e455a55dc..0f5856756 100644 --- a/src/PowderToySDL.cpp +++ b/src/PowderToySDL.cpp @@ -146,14 +146,14 @@ void blit(pixel *vid) void UpdateRefreshRate() { - std::optional refreshRate; + RefreshRate 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; + refreshRate = RefreshRateQueried{ displayMode.refresh_rate }; } } ui::Engine::Ref().SetRefreshRate(refreshRate); diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp index 5e1f83710..e3a97c772 100644 --- a/src/gui/game/GameView.cpp +++ b/src/gui/game/GameView.cpp @@ -2618,13 +2618,13 @@ void GameView::OnDraw() fpsInfo << "hindered"; } fpsInfo << "\n Refresh rate: "; - if (auto refreshRate = ui::Engine::Ref().GetRefreshRate()) + auto refreshRate = ui::Engine::Ref().GetRefreshRate(); + fpsInfo << std::visit([](auto &refreshRate) { + return refreshRate.value; + }, refreshRate); + if (std::holds_alternative(refreshRate)) { - fpsInfo << *refreshRate; - } - else - { - fpsInfo << "unknown"; + fpsInfo << " (default)"; } } diff --git a/src/gui/interface/Engine.cpp b/src/gui/interface/Engine.cpp index e8eb02222..160858d1b 100644 --- a/src/gui/interface/Engine.cpp +++ b/src/gui/interface/Engine.cpp @@ -370,7 +370,9 @@ std::optional Engine::GetEffectiveDrawCap() const } if (std::get_if(&drawLimit)) { - effectiveDrawCap = GetRefreshRate(); + effectiveDrawCap = std::visit([](auto &&refreshRate) { + return refreshRate.value; + }, GetRefreshRate()); } return effectiveDrawCap; } diff --git a/src/gui/interface/Engine.h b/src/gui/interface/Engine.h index 84b1f77ac..983a589e4 100644 --- a/src/gui/interface/Engine.h +++ b/src/gui/interface/Engine.h @@ -2,6 +2,7 @@ #include #include #include +#include #include "common/String.h" #include "common/ExplicitSingleton.h" #include "graphics/Pixel.h" @@ -10,6 +11,16 @@ #include #include "FpsLimit.h" +struct RefreshRateDefault +{ + int value = 60; +}; +struct RefreshRateQueried +{ + int value; +}; +using RefreshRate = std::variant; + class Graphics; namespace ui { @@ -96,7 +107,7 @@ namespace ui Window* state_; Point windowTargetPosition; bool ignoreEvents = false; - std::optional refreshRate; + RefreshRate refreshRate; // saved appearances of windows that are in the backround and // thus are not currently being redrawn @@ -140,12 +151,12 @@ namespace ui bool GetResizable () const { return windowFrameOps.resizable; } bool GetBlurryScaling () const { return windowFrameOps.blurryScaling; } - std::optional GetRefreshRate() const + RefreshRate GetRefreshRate() const { return refreshRate; } - void SetRefreshRate(std::optional newRefreshRate) + void SetRefreshRate(RefreshRate newRefreshRate) { refreshRate = newRefreshRate; }