diff options
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); +} |
