diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-09-09 19:10:14 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-09-09 19:10:14 +0800 |
commit | f761d4ef25ab0e695c79ae5c2ede1f850f1607af (patch) | |
tree | e6b674fd33d7ef3660e8c114473aa290ea3c3a4c /include/cru/platform/gui/xcb/Window.h | |
parent | 2f1ea611385b5bf8985a5b0571eb71976b9a8e52 (diff) | |
download | cru-f761d4ef25ab0e695c79ae5c2ede1f850f1607af.tar.gz cru-f761d4ef25ab0e695c79ae5c2ede1f850f1607af.tar.bz2 cru-f761d4ef25ab0e695c79ae5c2ede1f850f1607af.zip |
Develop some xcb window.
Diffstat (limited to 'include/cru/platform/gui/xcb/Window.h')
-rw-r--r-- | include/cru/platform/gui/xcb/Window.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h index 2d5651e7..1676dced 100644 --- a/include/cru/platform/gui/xcb/Window.h +++ b/include/cru/platform/gui/xcb/Window.h @@ -4,11 +4,14 @@ #include "Base.h" #include <xcb/xcb.h> +#include <optional> namespace cru::platform::gui::xcb { class XcbUiApplication; class XcbWindow : public XcbResource, public virtual INativeWindow { + friend XcbUiApplication; + public: explicit XcbWindow(XcbUiApplication* application); ~XcbWindow() override; @@ -66,8 +69,8 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { virtual IEvent<Size>* ResizeEvent() = 0; virtual IEvent<FocusChangeType>* FocusEvent() = 0; - virtual IEvent<MouseEnterLeaveType>* MouseEnterLeaveEvent() = 0; - virtual IEvent<Point>* MouseMoveEvent() = 0; + IEvent<MouseEnterLeaveType>* MouseEnterLeaveEvent() override; + IEvent<Point>* MouseMoveEvent() override; virtual IEvent<NativeMouseButtonEventArgs>* MouseDownEvent() = 0; virtual IEvent<NativeMouseButtonEventArgs>* MouseUpEvent() = 0; virtual IEvent<NativeMouseWheelEventArgs>* MouseWheelEvent() = 0; @@ -76,8 +79,19 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { virtual IInputMethodContext* GetInputMethodContext() = 0; + public: + std::optional<xcb_window_t> GetXcbWindow(); + + private: + xcb_window_t DoCreateWindow(); + void HandleEvent(xcb_generic_event_t* event); + static std::optional<xcb_window_t> GetEventWindow(xcb_generic_event_t* event); + private: XcbUiApplication* application_; - xcb_window_t xcb_window_; + std::optional<xcb_window_t> xcb_window_; + + Event<MouseEnterLeaveType> mouse_enter_leave_event_; + Event<Point> mouse_move_event_; }; } // namespace cru::platform::gui::xcb |