aboutsummaryrefslogtreecommitdiff
path: root/src/core/window_manager.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-27 10:50:02 +0200
committerhachem <im@hachem.wtf>2026-08-27 10:50:02 +0200
commit90398614bcc9e1c1bde7a0f65a0db66173a1d8b4 (patch)
tree1cd0e18d46e6eb16f33afcb9561aad4d4dfb3ba3 /src/core/window_manager.h
parent4b64b2bd17433f427197af3679c9c8f5ad5ad1a4 (diff)
add: window manager and opengl context
Diffstat (limited to 'src/core/window_manager.h')
-rw-r--r--src/core/window_manager.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/core/window_manager.h b/src/core/window_manager.h
new file mode 100644
index 0000000..d3a915c
--- /dev/null
+++ b/src/core/window_manager.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "core/window.h"
+
+#include <memory>
+#include <vector>
+
+namespace Hsdbg
+{
+ class WindowManager
+ {
+ public:
+ WindowManager();
+ ~WindowManager();
+
+ WindowManager(const WindowManager&) = delete;
+ WindowManager(WindowManager&&) = delete;
+ auto operator=(const WindowManager&) -> WindowManager& = delete;
+ auto operator=(WindowManager&&) -> WindowManager& = delete;
+
+ static auto get() -> WindowManager&;
+
+ auto create_window(const WindowSpec& spec) -> Window&;
+ auto destroy_window(const Window& window) -> void;
+
+ auto poll_events() -> void;
+ auto wait_events(double timeout_seconds) -> void;
+
+ auto window_count() const -> size_t { return m_windows.size(); }
+
+ private:
+ static auto on_error(int code, const char* description) -> void;
+
+ static WindowManager* s_instance;
+
+ std::vector<std::unique_ptr<Window>> m_windows;
+ };
+}