aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/xcb/Window.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-09 19:10:14 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-09 19:10:14 +0800
commitf761d4ef25ab0e695c79ae5c2ede1f850f1607af (patch)
treee6b674fd33d7ef3660e8c114473aa290ea3c3a4c /include/cru/platform/gui/xcb/Window.h
parent2f1ea611385b5bf8985a5b0571eb71976b9a8e52 (diff)
downloadcru-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.h20
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