#include "cru/platform/gui/sdl/Input.h" #include "cru/platform/gui/Input.h" namespace cru::platform::gui::sdl { MouseButton ConvertMouseButton(Uint8 button) { switch (button) { case SDL_BUTTON_LEFT: return MouseButtons::Left; case SDL_BUTTON_MIDDLE: return MouseButtons::Middle; case SDL_BUTTON_RIGHT: return MouseButtons::Right; } 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; if (keymod & SDL_KMOD_CTRL) result |= KeyModifiers::Ctrl; if (keymod & SDL_KMOD_ALT) result |= KeyModifiers::Alt; return result; } KeyModifier GetKeyModifier() { return ConvertKeyModifier(SDL_GetModState()); } } // namespace cru::platform::gui::sdl