diff --git a/src/chat_gui4.cpp b/src/chat_gui4.cpp index b9890ea..628928e 100644 --- a/src/chat_gui4.cpp +++ b/src/chat_gui4.cpp @@ -386,6 +386,7 @@ void ChatGui4::renderMessageBodyFile(Message3Registry& reg, const Message3 e) { [](const auto& path) -> bool { return std::filesystem::is_directory(path); }, [this, ®, e](const auto& path) { if (reg.valid(e)) { // still valid + // TODO: trim file? reg.emplace(e, path.string()); _rmm.throwEventUpdate(reg, e); } diff --git a/src/main.cpp b/src/main.cpp index ec0f3ba..ec2bdd7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,9 +12,19 @@ #include #include #include +#include +#include int main(int argc, char** argv) { - if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { + // setup hints + if (SDL_SetHint(SDL_HINT_VIDEO_ALLOW_SCREENSAVER, "1") != SDL_TRUE) { + std::cerr << "Failed to set '" << SDL_HINT_VIDEO_ALLOW_SCREENSAVER << "' to 1\n"; + } + + auto last_time = std::chrono::steady_clock::now(); + + // actual setup + if (SDL_Init(SDL_INIT_VIDEO) < 0) { std::cerr << "SDL_Init failed (" << SDL_GetError() << ")\n"; return 1; } @@ -54,8 +64,13 @@ int main(int argc, char** argv) { std::unique_ptr screen = std::make_unique(renderer.get()); + bool quit = false; while (!quit) { + auto new_time = std::chrono::steady_clock::now(); + //const float time_delta {std::chrono::duration(new_time - last_time).count()}; + last_time = new_time; + SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_EVENT_QUIT) { @@ -73,6 +88,11 @@ int main(int argc, char** argv) { break; } + //float fps_target = 60.f; + //if (SDL_GetWindowFlags(window.get()) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) { + //fps_target = 30.f; + //} + ImGui_ImplSDLRenderer3_NewFrame(); ImGui_ImplSDL3_NewFrame(); ImGui::NewFrame(); @@ -91,6 +111,11 @@ int main(int argc, char** argv) { // clearing after present is (should) more performant, but first frame is a mess SDL_SetRenderDrawColor(renderer.get(), 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE); SDL_RenderClear(renderer.get()); + + std::this_thread::sleep_for( // time left to get to 60fps + std::chrono::duration(0.0166f) // 60fps frame duration + - std::chrono::duration(std::chrono::steady_clock::now() - new_time) // time used for rendering + ); } return 0; diff --git a/src/main_screen.cpp b/src/main_screen.cpp index 8ed75df..20cb1c1 100644 --- a/src/main_screen.cpp +++ b/src/main_screen.cpp @@ -84,7 +84,7 @@ Screen* MainScreen::poll(bool& quit) { cg.render(); - { + if constexpr (false) { bool open = !quit; ImGui::ShowDemoWindow(&open); quit = !open;