diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-06-12 21:41:41 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-06-13 20:22:51 +0800 |
| commit | 6f7b994684032060f0a2d7af82f4f3572293b8d6 (patch) | |
| tree | 793d328cbcd6761365267550b55db45aee9b21fc /src/io/renderManager.cpp | |
| parent | 6a51ab4525c59e9fe2bdbd92493019b0a98c6b94 (diff) | |
internal!: organized internal structure, using cmake now
Diffstat (limited to 'src/io/renderManager.cpp')
| -rw-r--r-- | src/io/renderManager.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/io/renderManager.cpp b/src/io/renderManager.cpp new file mode 100644 index 0000000..a8dff68 --- /dev/null +++ b/src/io/renderManager.cpp @@ -0,0 +1,38 @@ +#include "renderManager.hpp" +#include "../debug/log.hpp" + +CRenderManager::CRenderManager() + : screen(ftxui::ScreenInteractive::TerminalOutput()) { + if (std::atexit([]() { + if (g_pRenderManager) + g_pRenderManager->exitLoop(); + })) + log(ERR, "Failed to register RenderManager atexit handler, will fallback to quick_exit after hang"); + log(LOG, "RenderManager: initialized"); +}; + +CRenderManager::~CRenderManager() { + exitLoop(); + log(SYS, "RenderManager: bye"); +} + +void CRenderManager::exitLoop() { + if (renderer) { + try { + screen.ExitLoopClosure()(); + screen.Exit(); + } catch (const std::exception &e) { + log(WARN, "Exception in exitLoop: {}", e.what()); + } catch (...) { + log(WARN, "Unknown exception in exitLoop"); + } + } +} + +void CRenderManager::enterLoop() { + screen.Loop(renderer); +} + +void CRenderManager::setRenderer(ftxui::Component component) { + renderer = std::move(component); +} |
