aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/Keyboard.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform/gui/Keyboard.h')
-rw-r--r--include/cru/platform/gui/Keyboard.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/include/cru/platform/gui/Keyboard.h b/include/cru/platform/gui/Keyboard.h
new file mode 100644
index 00000000..f25b25fa
--- /dev/null
+++ b/include/cru/platform/gui/Keyboard.h
@@ -0,0 +1,140 @@
+#pragma once
+#include "cru/common/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
+// to add new keyboard layout.
+enum class KeyCode {
+ Unknown,
+ LeftButton,
+ MiddleButton,
+ RightButton,
+ Escape,
+ F1,
+ F2,
+ F3,
+ F4,
+ F5,
+ F6,
+ F7,
+ F8,
+ F9,
+ F10,
+ F11,
+ F12,
+ N0,
+ N1,
+ N2,
+ N3,
+ N4,
+ N5,
+ N6,
+ N7,
+ N8,
+ N9,
+ A,
+ B,
+ C,
+ D,
+ E,
+ F,
+ G,
+ H,
+ I,
+ J,
+ K,
+ L,
+ M,
+ N,
+ O,
+ P,
+ Q,
+ R,
+ S,
+ T,
+ U,
+ V,
+ W,
+ X,
+ Y,
+ Z,
+ GraveAccent,
+ Tab,
+ CapsLock,
+ LeftShift,
+ LeftCtrl,
+ LeftSuper,
+ LeftAlt,
+ Minus,
+ Equal,
+ Backspace,
+ LeftSquareBracket,
+ RightSquareBracket,
+ BackSlash,
+ Semicolon,
+ Quote,
+ Comma,
+ Period,
+ Slash,
+ RightShift,
+ RightCtrl,
+ RightSuper,
+ RightAlt,
+ Insert,
+ Delete,
+ Home,
+ End,
+ PageUp,
+ PageDown,
+ Up,
+ Left,
+ Down,
+ Right,
+ PrintScreen,
+ ScrollLock,
+ Pause,
+ NumPad0,
+ NumPad1,
+ NumPad2,
+ NumPad3,
+ NumPad4,
+ NumPad5,
+ NumPad6,
+ NumPad7,
+ NumPad8,
+ NumPad9,
+ LeftCommand,
+ RightCommand,
+ Return,
+ Space
+};
+
+namespace details {
+struct TagKeyModifier {};
+} // namespace details
+
+using KeyModifier = Bitmask<details::TagKeyModifier>;
+
+struct KeyModifiers {
+ static constexpr KeyModifier none{0};
+ static constexpr KeyModifier shift{0b1};
+ static constexpr KeyModifier ctrl{0b10};
+ static constexpr KeyModifier alt{0b100};
+ static constexpr KeyModifier command{0b1000};
+};
+
+#ifdef CRU_PLATFORM_OSX
+constexpr KeyModifier kKeyModifierCommand = KeyModifiers::command;
+#else
+constexpr KeyModifier kKeyModifierCommand = KeyModifiers::ctrl;
+#endif
+
+CRU_PLATFORM_GUI_API String ToString(KeyCode key_code);
+CRU_PLATFORM_GUI_API String ToString(KeyModifier key_modifier,
+ StringView separator = u"+");
+} // namespace cru::platform::gui