summaryrefslogtreecommitdiff
path: root/src/io/renderManager.cpp
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-06-12 21:41:41 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-06-13 20:22:51 +0800
commit6f7b994684032060f0a2d7af82f4f3572293b8d6 (patch)
tree793d328cbcd6761365267550b55db45aee9b21fc /src/io/renderManager.cpp
parent6a51ab4525c59e9fe2bdbd92493019b0a98c6b94 (diff)
internal!: organized internal structure, using cmake now
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);
+}