summaryrefslogtreecommitdiff
path: root/modules/window/window.h
diff options
context:
space:
mode:
Diffstat (limited to 'modules/window/window.h')
-rw-r--r--modules/window/window.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/modules/window/window.h b/modules/window/window.h
new file mode 100644
index 0000000..36786de
--- /dev/null
+++ b/modules/window/window.h
@@ -0,0 +1,79 @@
+#pragma once
+
+#include "video_mode.h"
+
+#include <forstio/async/async.h>
+#include <forstio/core/common.h>
+#include <forstio/codec/schema.h>
+
+#include <string_view>
+#include <variant>
+
+namespace saw {
+namespace gfx {
+namespace schema {
+using namespace saw::schema;
+using WindowResize = Struct<
+ Member<UInt32, "width">,
+ Member<UInt32, "height">
+>;
+using WindowEvents = Union<
+ Member<WindowResize, "resize">
+>;
+}
+
+template<typename T>
+class window;
+}
+}
+
+#include "linux_xcb.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 &get_video_mode() 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
+*/