From 20fc1e5595e4f498d297c09934dbfcc005982f54 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 9 Sep 2025 20:15:44 +0800 Subject: Implement mouse button events. --- include/cru/platform/gui/Base.h | 12 +++++++++--- include/cru/platform/gui/xcb/Keyboard.h | 8 ++++++++ include/cru/platform/gui/xcb/Window.h | 9 ++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 include/cru/platform/gui/xcb/Keyboard.h (limited to 'include/cru/platform/gui') diff --git a/include/cru/platform/gui/Base.h b/include/cru/platform/gui/Base.h index 83d07582..affce4cd 100644 --- a/include/cru/platform/gui/Base.h +++ b/include/cru/platform/gui/Base.h @@ -28,10 +28,16 @@ struct TagMouseButton {}; } // namespace details using MouseButton = Bitmask; +struct MouseButtons { + constexpr static MouseButton None = MouseButton::FromOffset(0); + constexpr static MouseButton Left = MouseButton::FromOffset(1); + constexpr static MouseButton Middle = MouseButton::FromOffset(2); + constexpr static MouseButton Right = MouseButton::FromOffset(3); +}; namespace mouse_buttons { -constexpr MouseButton left{0b1}; -constexpr MouseButton middle{0b10}; -constexpr MouseButton right{0b100}; +constexpr MouseButton left{MouseButtons::Left}; +constexpr MouseButton middle{MouseButtons::Middle}; +constexpr MouseButton right{MouseButtons::Right}; } // namespace mouse_buttons } // namespace cru::platform::gui diff --git a/include/cru/platform/gui/xcb/Keyboard.h b/include/cru/platform/gui/xcb/Keyboard.h new file mode 100644 index 00000000..8d25ff7f --- /dev/null +++ b/include/cru/platform/gui/xcb/Keyboard.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace cru::platform::gui::xcb { +struct XcbUiApplication; +KeyModifier GetCurrentKeyModifiers(XcbUiApplication* application); +} // namespace cru::platform::gui::xcb diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h index 1676dced..016b5717 100644 --- a/include/cru/platform/gui/xcb/Window.h +++ b/include/cru/platform/gui/xcb/Window.h @@ -71,9 +71,9 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { IEvent* MouseEnterLeaveEvent() override; IEvent* MouseMoveEvent() override; - virtual IEvent* MouseDownEvent() = 0; - virtual IEvent* MouseUpEvent() = 0; - virtual IEvent* MouseWheelEvent() = 0; + IEvent* MouseDownEvent() override; + IEvent* MouseUpEvent() override; + IEvent* MouseWheelEvent() override; virtual IEvent* KeyDownEvent() = 0; virtual IEvent* KeyUpEvent() = 0; @@ -93,5 +93,8 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { Event mouse_enter_leave_event_; Event mouse_move_event_; + Event mouse_down_event_; + Event mouse_up_event_; + Event mouse_wheel_event_; }; } // namespace cru::platform::gui::xcb -- cgit v1.2.3