aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/sdl/Input.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-28 15:43:52 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-28 18:20:17 +0800
commit9e596ff10782455615f69b9b54ce22176145b020 (patch)
treee910b6d6ac2037a9c2c4cd50d15005c71690665b /src/platform/gui/sdl/Input.cpp
parent0ef919c18108112d6c35c5a4f6a00440059cbc1a (diff)
downloadcru-9e596ff10782455615f69b9b54ce22176145b020.tar.gz
cru-9e596ff10782455615f69b9b54ce22176145b020.tar.bz2
cru-9e596ff10782455615f69b9b54ce22176145b020.zip
Impl key event handling of sdl native window.
Diffstat (limited to 'src/platform/gui/sdl/Input.cpp')
-rw-r--r--src/platform/gui/sdl/Input.cpp111
1 files changed, 110 insertions, 1 deletions
diff --git a/src/platform/gui/sdl/Input.cpp b/src/platform/gui/sdl/Input.cpp
index 1c7b4475..c985928c 100644
--- a/src/platform/gui/sdl/Input.cpp
+++ b/src/platform/gui/sdl/Input.cpp
@@ -1,4 +1,5 @@
#include "cru/platform/gui/sdl/Input.h"
+#include "cru/platform/gui/Input.h"
namespace cru::platform::gui::sdl {
MouseButton ConvertMouseButton(Uint8 button) {
@@ -13,6 +14,114 @@ MouseButton ConvertMouseButton(Uint8 button) {
return MouseButtons::Unknown;
}
+KeyCode ConvertKeyCode(SDL_Keycode keycode) {
+ switch (keycode) {
+#define CRU_SDL_DEFINE_KEY_CODE_CONVERT(cru_key_code, sdl_key_code) \
+ case SDLK_##sdl_key_code: \
+ return KeyCode::cru_key_code;
+
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Grave, GRAVE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Escape, ESCAPE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F1, F1)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F2, F2)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F3, F3)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F4, F4)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F5, F5)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F6, F6)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F7, F7)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F8, F8)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F9, F9)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F10, F10)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F11, F11)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F12, F12)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N0, 0)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N1, 1)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N2, 2)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N3, 3)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N4, 4)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N5, 5)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N6, 6)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N7, 7)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N8, 8)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N9, 9)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(A, A)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(B, B)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(C, C)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(D, D)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(E, E)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(F, F)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(G, G)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(H, H)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(I, I)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(J, J)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(K, K)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(L, L)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(M, M)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(N, N)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(O, O)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(P, P)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Q, Q)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(R, R)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(S, S)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(T, T)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(U, U)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(V, V)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(W, W)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(X, X)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Y, Y)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Z, Z)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Tab, TAB)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(CapsLock, CAPSLOCK)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(LeftShift, LSHIFT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(LeftCtrl, LCTRL)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(LeftSuper, LGUI)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(LeftAlt, LALT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Minus, MINUS)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Equal, EQUALS)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Backspace, BACKSPACE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(LeftSquareBracket, LEFTBRACKET)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(RightSquareBracket, RIGHTBRACKET)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(BackSlash, BACKSLASH)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Semicolon, SEMICOLON)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Quote, APOSTROPHE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Comma, COMMA)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Period, PERIOD)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Slash, SLASH)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(RightShift, RSHIFT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(RightCtrl, RCTRL)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(RightSuper, RGUI)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(RightAlt, RALT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Insert, INSERT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Delete, DELETE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Home, HOME)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(End, END)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(PageUp, PAGEUP)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(PageDown, PAGEDOWN)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Up, UP)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Left, LEFT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Down, DOWN)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Right, RIGHT)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(PrintScreen, PRINTSCREEN)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(ScrollLock, SCROLLLOCK)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Pause, PAUSE)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad0, KP_0)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad1, KP_1)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad2, KP_2)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad3, KP_3)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad4, KP_4)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad5, KP_5)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad6, KP_6)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad7, KP_7)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad8, KP_8)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(NumPad9, KP_9)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Return, RETURN)
+ CRU_SDL_DEFINE_KEY_CODE_CONVERT(Space, SPACE)
+#undef CRU_SDL_DEFINE_KEY_CODE_CONVERT
+ default:
+ return KeyCode::Unknown;
+ }
+}
+
KeyModifier ConvertKeyModifier(SDL_Keymod keymod) {
KeyModifier result;
if (keymod & SDL_KMOD_SHIFT) result |= KeyModifiers::Shift;
@@ -22,4 +131,4 @@ KeyModifier ConvertKeyModifier(SDL_Keymod keymod) {
}
KeyModifier GetKeyModifier() { return ConvertKeyModifier(SDL_GetModState()); }
-} // namespace cru::cru::platform::gui::sdl
+} // namespace cru::platform::gui::sdl