summaryrefslogtreecommitdiff
path: root/src/window/window.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/window/window.h')
-rw-r--r--src/window/window.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/window/window.h b/src/window/window.h
new file mode 100644
index 0000000..216c866
--- /dev/null
+++ b/src/window/window.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#include <forstio/async/async.h>
+#include <forstio/common.h>
+
+#include <string_view>
+#include <variant>
+
+#include "video_mode.h"
+
+namespace saw {
+
+class window {
+public:
+ class event {
+ public:
+ struct resize {
+ size_t width;
+ size_t height;
+ };
+
+ struct keyboard {
+ uint32_t key;
+ uint32_t scan;
+ bool pressed;
+ bool repeat;
+ };
+
+ struct mouse {
+ uint16_t button_mask;
+ bool pressed;
+ uint32_t x;
+ uint32_t y;
+ };
+
+ struct mouse_move {
+ uint32_t x;
+ uint32_t y;
+ };
+ };
+
+ using variant_event = std::variant<event::resize, event::keyboard,
+ event::mouse, event::mouse_move>;
+
+ virtual ~window() = default;
+
+ virtual void show() = 0;
+ virtual void hide() = 0;
+
+ virtual const video_mode &videoMode() const = 0;
+ virtual const std::string_view title() const = 0;
+
+ virtual void resize(size_t width, size_t height) = 0;
+
+ virtual conveyor<variant_event> on_event() = 0;
+};
+} // namespace saw