diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/platform/gui/Keyboard.h | 8 | ||||
-rw-r--r-- | include/cru/platform/gui/Window.h | 2 | ||||
-rw-r--r-- | include/cru/platform/gui/xcb/Keyboard.h | 7 | ||||
-rw-r--r-- | include/cru/platform/gui/xcb/Window.h | 6 |
4 files changed, 16 insertions, 7 deletions
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 <string> -#include <string_view> - 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 <string_view> - 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 <cru/platform/gui/Keyboard.h> +#include <xcb/xcb.h> +#include <unordered_map> + namespace cru::platform::gui::xcb { struct XcbUiApplication; + +KeyCode XorgKeysymToKeyCode(xcb_keysym_t keysym); +KeyCode XorgKeycodeToCruKeyCode(XcbUiApplication* application, xcb_keycode_t keycode); +std::unordered_map<KeyCode, bool> 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<NativeMouseButtonEventArgs>* MouseDownEvent() override; IEvent<NativeMouseButtonEventArgs>* MouseUpEvent() override; IEvent<NativeMouseWheelEventArgs>* MouseWheelEvent() override; - virtual IEvent<NativeKeyEventArgs>* KeyDownEvent() = 0; - virtual IEvent<NativeKeyEventArgs>* KeyUpEvent() = 0; + IEvent<NativeKeyEventArgs>* KeyDownEvent() override; + IEvent<NativeKeyEventArgs>* KeyUpEvent() override; virtual IInputMethodContext* GetInputMethodContext() = 0; @@ -96,5 +96,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { Event<NativeMouseButtonEventArgs> mouse_down_event_; Event<NativeMouseButtonEventArgs> mouse_up_event_; Event<NativeMouseWheelEventArgs> mouse_wheel_event_; + Event<NativeKeyEventArgs> key_down_event_; + Event<NativeKeyEventArgs> key_up_event_; }; } // namespace cru::platform::gui::xcb |