From fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 9 Sep 2025 22:34:50 +0800 Subject: Implement xcb keyboard. --- include/cru/platform/gui/Keyboard.h | 8 +++++--- include/cru/platform/gui/Window.h | 2 -- include/cru/platform/gui/xcb/Keyboard.h | 7 +++++++ include/cru/platform/gui/xcb/Window.h | 6 ++++-- 4 files changed, 16 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/include/cru/platform/gui/Keyboard.h b/include/cru/platform/gui/Keyboard.h index 224aea04..eb1cc76e 100644 --- a/include/cru/platform/gui/Keyboard.h +++ b/include/cru/platform/gui/Keyboard.h @@ -2,9 +2,6 @@ #include "cru/base/Bitmask.h" #include "cru/platform/gui/Base.h" -#include -#include - namespace cru::platform::gui { // Because of the complexity of keyboard layout, I only add code in US keyboard // layout, the most widely used layout in China. We should try to make it easy @@ -126,6 +123,11 @@ struct KeyModifiers { static constexpr KeyModifier ctrl{0b10}; static constexpr KeyModifier alt{0b100}; static constexpr KeyModifier command{0b1000}; + static constexpr KeyModifier None = KeyModifier::FromOffset(0); + static constexpr KeyModifier Shift = KeyModifier::FromOffset(1); + static constexpr KeyModifier Ctrl = KeyModifier::FromOffset(2); + static constexpr KeyModifier Alt = KeyModifier::FromOffset(3); + static constexpr KeyModifier Command = KeyModifier::FromOffset(4); }; #ifdef CRU_PLATFORM_OSX diff --git a/include/cru/platform/gui/Window.h b/include/cru/platform/gui/Window.h index 7f6923d1..742ef798 100644 --- a/include/cru/platform/gui/Window.h +++ b/include/cru/platform/gui/Window.h @@ -5,8 +5,6 @@ #include "cru/base/Event.h" -#include - namespace cru::platform::gui { namespace details { struct WindowStyleFlagTag; diff --git a/include/cru/platform/gui/xcb/Keyboard.h b/include/cru/platform/gui/xcb/Keyboard.h index 8d25ff7f..41b4abee 100644 --- a/include/cru/platform/gui/xcb/Keyboard.h +++ b/include/cru/platform/gui/xcb/Keyboard.h @@ -2,7 +2,14 @@ #include +#include +#include + namespace cru::platform::gui::xcb { struct XcbUiApplication; + +KeyCode XorgKeysymToKeyCode(xcb_keysym_t keysym); +KeyCode XorgKeycodeToCruKeyCode(XcbUiApplication* application, xcb_keycode_t keycode); +std::unordered_map GetKeyboardState(XcbUiApplication* application); 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 016b5717..9c6b4f43 100644 --- a/include/cru/platform/gui/xcb/Window.h +++ b/include/cru/platform/gui/xcb/Window.h @@ -74,8 +74,8 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { IEvent* MouseDownEvent() override; IEvent* MouseUpEvent() override; IEvent* MouseWheelEvent() override; - virtual IEvent* KeyDownEvent() = 0; - virtual IEvent* KeyUpEvent() = 0; + IEvent* KeyDownEvent() override; + IEvent* KeyUpEvent() override; virtual IInputMethodContext* GetInputMethodContext() = 0; @@ -96,5 +96,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { Event mouse_down_event_; Event mouse_up_event_; Event mouse_wheel_event_; + Event key_down_event_; + Event key_up_event_; }; } // namespace cru::platform::gui::xcb -- cgit v1.2.3