aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-09 22:34:50 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-09 22:34:50 +0800
commitfee3a550f00f6df4b341ca6ed47ef7e9a748a9ba (patch)
tree88c4584eb92523ee15dceae79237070f7f8bedf5 /include
parent20fc1e5595e4f498d297c09934dbfcc005982f54 (diff)
downloadcru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.tar.gz
cru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.tar.bz2
cru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.zip
Implement xcb keyboard.
Diffstat (limited to 'include')
-rw-r--r--include/cru/platform/gui/Keyboard.h8
-rw-r--r--include/cru/platform/gui/Window.h2
-rw-r--r--include/cru/platform/gui/xcb/Keyboard.h7
-rw-r--r--include/cru/platform/gui/xcb/Window.h6
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