aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/xcb/Keyboard.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-10-05 16:39:31 +0800
committerYuqian Yang <crupest@crupest.life>2025-10-05 16:39:31 +0800
commitf502391ceb2fc7fd441718d2152ef14e2ec24973 (patch)
treeb25b50c7eaaf3309723858098ea113a959eaa407 /include/cru/platform/gui/xcb/Keyboard.h
parent047e0eba34c669ff71535602c09edec587912059 (diff)
downloadcru-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.h28
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