summaryrefslogtreecommitdiff
path: root/src/io/renderManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/renderManager.cpp')
-rw-r--r--src/io/renderManager.cpp38
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);
+}