From be8ceb861cdbd120dd9300dcc34bfe322171ea74 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 7 Jan 2024 22:20:40 +0100 Subject: [PATCH] 1 sec cooldown for reduced fps mode --- src/main_screen.cpp | 14 ++++++++++++-- src/main_screen.hpp | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main_screen.cpp b/src/main_screen.cpp index a15fc487..1e7245fe 100644 --- a/src/main_screen.cpp +++ b/src/main_screen.cpp @@ -75,6 +75,8 @@ bool MainScreen::handleEvent(SDL_Event& e) { if (e.type == SDL_EVENT_DROP_FILE) { std::cout << "DROP FILE: " << e.drop.file << "\n"; cg.sendFilePath(e.drop.file); + _render_interval = 1.f/60.f; // TODO: magic + _time_since_event = 0.f; return true; // TODO: forward return succ from sendFilePath() } @@ -116,11 +118,14 @@ bool MainScreen::handleEvent(SDL_Event& e) { //std::cout << "TOMAT: window shown " << e.window.timestamp << "\n"; } } + _render_interval = 1.f/60.f; // TODO: magic + _time_since_event = 0.f; return true; // forward? } if ( _fps_perf_mode <= 1 && ( + // those are all the events imgui polls e.type == SDL_EVENT_MOUSE_MOTION || e.type == SDL_EVENT_MOUSE_WHEEL || e.type == SDL_EVENT_MOUSE_BUTTON_DOWN || @@ -135,6 +140,7 @@ bool MainScreen::handleEvent(SDL_Event& e) { ) ) { _render_interval = 1.f/60.f; // TODO: magic + _time_since_event = 0.f; } return false; @@ -203,14 +209,18 @@ Screen* MainScreen::render(float time_delta, bool&) { // powersave forces 250ms _render_interval = 1.f/4.f; } else if ( - _fps_perf_mode == 1 || // TODO: magic - _window_hidden + _time_since_event > 1.f && ( // 1sec cool down + _fps_perf_mode == 1 || // TODO: magic + _window_hidden + ) ) { _render_interval = std::min(1.f/4.f, pm_interval); } else { _render_interval = std::min(1.f/60.f, pm_interval); } + _time_since_event += time_delta; + return nullptr; } diff --git a/src/main_screen.hpp b/src/main_screen.hpp index fb404e6c..9c5e7f1d 100644 --- a/src/main_screen.hpp +++ b/src/main_screen.hpp @@ -66,6 +66,7 @@ struct MainScreen final : public Screen { bool _window_hidden {false}; bool _window_hidden_ts {0}; + float _time_since_event {0.f}; MainScreen(SDL_Renderer* renderer_, std::string save_path, std::string save_password, std::vector plugins); ~MainScreen(void);