aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/xcb/Input.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-10-17 12:06:14 +0800
committerYuqian Yang <crupest@crupest.life>2025-10-17 12:06:14 +0800
commit32aa6f116acc6e3e20a1ec76cef45b29f7005ad7 (patch)
tree892b71060a88b58d9293d78033000b05818783df /include/cru/platform/gui/xcb/Input.h
parentfaf77949e19dc0d01f75bf8abb783eda70328048 (diff)
downloadcru-32aa6f116acc6e3e20a1ec76cef45b29f7005ad7.tar.gz
cru-32aa6f116acc6e3e20a1ec76cef45b29f7005ad7.tar.bz2
cru-32aa6f116acc6e3e20a1ec76cef45b29f7005ad7.zip
Remove String stage 1.
Diffstat (limited to 'include/cru/platform/gui/xcb/Input.h')
-rw-r--r--include/cru/platform/gui/xcb/Input.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/include/cru/platform/gui/xcb/Input.h b/include/cru/platform/gui/xcb/Input.h
new file mode 100644
index 00000000..77e213de
--- /dev/null
+++ b/include/cru/platform/gui/xcb/Input.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <cru/platform/gui/Input.h>
+
+#include <xcb/xcb.h>
+#include <xkbcommon/xkbcommon.h>
+#include <unordered_map>
+
+namespace cru::platform::gui::xcb {
+struct XcbUiApplication;
+
+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);
+
+/**
+ * Used to convert state field of xcb_button_press_event_t,
+ * xcb_button_release_event_t, xcb_key_press_event_t, xcb_key_release_event_t.
+ */
+KeyModifier ConvertModifiersOfEvent(uint32_t mask);
+
+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