diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-10-05 16:39:31 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-10-05 16:39:31 +0800 |
commit | f502391ceb2fc7fd441718d2152ef14e2ec24973 (patch) | |
tree | b25b50c7eaaf3309723858098ea113a959eaa407 /include/cru/platform/gui/xcb/Keyboard.h | |
parent | 047e0eba34c669ff71535602c09edec587912059 (diff) | |
download | cru-f502391ceb2fc7fd441718d2152ef14e2ec24973.tar.gz cru-f502391ceb2fc7fd441718d2152ef14e2ec24973.tar.bz2 cru-f502391ceb2fc7fd441718d2152ef14e2ec24973.zip |
Use xkb.
Diffstat (limited to 'include/cru/platform/gui/xcb/Keyboard.h')
-rw-r--r-- | include/cru/platform/gui/xcb/Keyboard.h | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/include/cru/platform/gui/xcb/Keyboard.h b/include/cru/platform/gui/xcb/Keyboard.h index a3e66e2b..e1fc7fec 100644 --- a/include/cru/platform/gui/xcb/Keyboard.h +++ b/include/cru/platform/gui/xcb/Keyboard.h @@ -3,15 +3,33 @@ #include <cru/platform/gui/Keyboard.h> #include <xcb/xcb.h> +#include <xkbcommon/xkbcommon.h> #include <unordered_map> namespace cru::platform::gui::xcb { struct XcbUiApplication; -KeyCode XorgKeysymToKeyCode(xcb_keysym_t keysym); -std::vector<xcb_keysym_t> XorgKeycodeToKeysyms(XcbUiApplication* application, xcb_keycode_t keycode); -KeyCode XorgKeycodeToCruKeyCode(XcbUiApplication* application, xcb_keycode_t keycode); -std::string XorgKeysymToUtf8(xcb_keysym_t keysym, bool upper = false); -std::unordered_map<KeyCode, bool> GetKeyboardState(XcbUiApplication* application); +KeyCode XorgKeysymToCruKeyCode(xcb_keysym_t keysym); +std::vector<xcb_keysym_t> XorgKeycodeToKeysyms(XcbUiApplication* application, + xcb_keycode_t keycode); +KeyCode XorgKeycodeToCruKeyCode(XcbUiApplication* application, + xcb_keycode_t keycode); +std::unordered_map<KeyCode, bool> GetKeyboardState( + XcbUiApplication* application); KeyModifier GetCurrentKeyModifiers(XcbUiApplication* application); + +class XcbKeyboardManager { + public: + explicit XcbKeyboardManager(XcbUiApplication* application); + ~XcbKeyboardManager(); + + std::string KeysymToUtf8(xcb_keysym_t keysym); + std::string KeycodeToUtf8(xcb_keycode_t keycode); + + private: + XcbUiApplication* application_; + xkb_context* xkb_context_; + xkb_keymap* xkb_keymap_; + xkb_state* xkb_state_; +}; } // namespace cru::platform::gui::xcb |