|
@@ -22,6 +22,7 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
+// 2024-07-02: Update for SDL3 api changes: SDLK_x renames and SDLK_KP_x removals (#7761, #7762).
|
|
|
// 2024-07-01: Update for SDL3 api changes: SDL_SetTextInputRect() changed to SDL_SetTextInputArea().
|
|
|
// 2024-06-26: Update for SDL3 api changes: SDL_StartTextInput()/SDL_StopTextInput()/SDL_SetTextInputRect() functions signatures.
|
|
|
// 2024-06-24: Update for SDL3 api changes: SDL_EVENT_KEY_DOWN/SDL_EVENT_KEY_UP contents.
|
|
@@ -146,8 +147,29 @@ static void ImGui_ImplSDL3_SetPlatformImeData(ImGuiViewport* viewport, ImGuiPlat
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static ImGuiKey ImGui_ImplSDL3_KeycodeToImGuiKey(int keycode)
|
|
|
+static ImGuiKey ImGui_ImplSDL3_KeyEventToImGuiKey(SDL_Keycode keycode, SDL_Scancode scancode)
|
|
|
{
|
|
|
+ // Keypad doesn't have individual key values in SDL3
|
|
|
+ switch (scancode)
|
|
|
+ {
|
|
|
+ case SDL_SCANCODE_KP_0: return ImGuiKey_Keypad0;
|
|
|
+ case SDL_SCANCODE_KP_1: return ImGuiKey_Keypad1;
|
|
|
+ case SDL_SCANCODE_KP_2: return ImGuiKey_Keypad2;
|
|
|
+ case SDL_SCANCODE_KP_3: return ImGuiKey_Keypad3;
|
|
|
+ case SDL_SCANCODE_KP_4: return ImGuiKey_Keypad4;
|
|
|
+ case SDL_SCANCODE_KP_5: return ImGuiKey_Keypad5;
|
|
|
+ case SDL_SCANCODE_KP_6: return ImGuiKey_Keypad6;
|
|
|
+ case SDL_SCANCODE_KP_7: return ImGuiKey_Keypad7;
|
|
|
+ case SDL_SCANCODE_KP_8: return ImGuiKey_Keypad8;
|
|
|
+ case SDL_SCANCODE_KP_9: return ImGuiKey_Keypad9;
|
|
|
+ case SDL_SCANCODE_KP_PERIOD: return ImGuiKey_KeypadDecimal;
|
|
|
+ case SDL_SCANCODE_KP_DIVIDE: return ImGuiKey_KeypadDivide;
|
|
|
+ case SDL_SCANCODE_KP_MULTIPLY: return ImGuiKey_KeypadMultiply;
|
|
|
+ case SDL_SCANCODE_KP_MINUS: return ImGuiKey_KeypadSubtract;
|
|
|
+ case SDL_SCANCODE_KP_PLUS: return ImGuiKey_KeypadAdd;
|
|
|
+ case SDL_SCANCODE_KP_ENTER: return ImGuiKey_KeypadEnter;
|
|
|
+ case SDL_SCANCODE_KP_EQUALS: return ImGuiKey_KeypadEqual;
|
|
|
+ }
|
|
|
switch (keycode)
|
|
|
{
|
|
|
case SDLK_TAB: return ImGuiKey_Tab;
|
|
@@ -181,23 +203,6 @@ static ImGuiKey ImGui_ImplSDL3_KeycodeToImGuiKey(int keycode)
|
|
|
case SDLK_NUMLOCKCLEAR: return ImGuiKey_NumLock;
|
|
|
case SDLK_PRINTSCREEN: return ImGuiKey_PrintScreen;
|
|
|
case SDLK_PAUSE: return ImGuiKey_Pause;
|
|
|
- case SDLK_KP_0: return ImGuiKey_Keypad0;
|
|
|
- case SDLK_KP_1: return ImGuiKey_Keypad1;
|
|
|
- case SDLK_KP_2: return ImGuiKey_Keypad2;
|
|
|
- case SDLK_KP_3: return ImGuiKey_Keypad3;
|
|
|
- case SDLK_KP_4: return ImGuiKey_Keypad4;
|
|
|
- case SDLK_KP_5: return ImGuiKey_Keypad5;
|
|
|
- case SDLK_KP_6: return ImGuiKey_Keypad6;
|
|
|
- case SDLK_KP_7: return ImGuiKey_Keypad7;
|
|
|
- case SDLK_KP_8: return ImGuiKey_Keypad8;
|
|
|
- case SDLK_KP_9: return ImGuiKey_Keypad9;
|
|
|
- case SDLK_KP_PERIOD: return ImGuiKey_KeypadDecimal;
|
|
|
- case SDLK_KP_DIVIDE: return ImGuiKey_KeypadDivide;
|
|
|
- case SDLK_KP_MULTIPLY: return ImGuiKey_KeypadMultiply;
|
|
|
- case SDLK_KP_MINUS: return ImGuiKey_KeypadSubtract;
|
|
|
- case SDLK_KP_PLUS: return ImGuiKey_KeypadAdd;
|
|
|
- case SDLK_KP_ENTER: return ImGuiKey_KeypadEnter;
|
|
|
- case SDLK_KP_EQUALS: return ImGuiKey_KeypadEqual;
|
|
|
case SDLK_LCTRL: return ImGuiKey_LeftCtrl;
|
|
|
case SDLK_LSHIFT: return ImGuiKey_LeftShift;
|
|
|
case SDLK_LALT: return ImGuiKey_LeftAlt;
|
|
@@ -217,32 +222,32 @@ static ImGuiKey ImGui_ImplSDL3_KeycodeToImGuiKey(int keycode)
|
|
|
case SDLK_7: return ImGuiKey_7;
|
|
|
case SDLK_8: return ImGuiKey_8;
|
|
|
case SDLK_9: return ImGuiKey_9;
|
|
|
- case SDLK_a: return ImGuiKey_A;
|
|
|
- case SDLK_b: return ImGuiKey_B;
|
|
|
- case SDLK_c: return ImGuiKey_C;
|
|
|
- case SDLK_d: return ImGuiKey_D;
|
|
|
- case SDLK_e: return ImGuiKey_E;
|
|
|
- case SDLK_f: return ImGuiKey_F;
|
|
|
- case SDLK_g: return ImGuiKey_G;
|
|
|
- case SDLK_h: return ImGuiKey_H;
|
|
|
- case SDLK_i: return ImGuiKey_I;
|
|
|
- case SDLK_j: return ImGuiKey_J;
|
|
|
- case SDLK_k: return ImGuiKey_K;
|
|
|
- case SDLK_l: return ImGuiKey_L;
|
|
|
- case SDLK_m: return ImGuiKey_M;
|
|
|
- case SDLK_n: return ImGuiKey_N;
|
|
|
- case SDLK_o: return ImGuiKey_O;
|
|
|
- case SDLK_p: return ImGuiKey_P;
|
|
|
- case SDLK_q: return ImGuiKey_Q;
|
|
|
- case SDLK_r: return ImGuiKey_R;
|
|
|
- case SDLK_s: return ImGuiKey_S;
|
|
|
- case SDLK_t: return ImGuiKey_T;
|
|
|
- case SDLK_u: return ImGuiKey_U;
|
|
|
- case SDLK_v: return ImGuiKey_V;
|
|
|
- case SDLK_w: return ImGuiKey_W;
|
|
|
- case SDLK_x: return ImGuiKey_X;
|
|
|
- case SDLK_y: return ImGuiKey_Y;
|
|
|
- case SDLK_z: return ImGuiKey_Z;
|
|
|
+ case SDLK_A: return ImGuiKey_A;
|
|
|
+ case SDLK_B: return ImGuiKey_B;
|
|
|
+ case SDLK_C: return ImGuiKey_C;
|
|
|
+ case SDLK_D: return ImGuiKey_D;
|
|
|
+ case SDLK_E: return ImGuiKey_E;
|
|
|
+ case SDLK_F: return ImGuiKey_F;
|
|
|
+ case SDLK_G: return ImGuiKey_G;
|
|
|
+ case SDLK_H: return ImGuiKey_H;
|
|
|
+ case SDLK_I: return ImGuiKey_I;
|
|
|
+ case SDLK_J: return ImGuiKey_J;
|
|
|
+ case SDLK_K: return ImGuiKey_K;
|
|
|
+ case SDLK_L: return ImGuiKey_L;
|
|
|
+ case SDLK_M: return ImGuiKey_M;
|
|
|
+ case SDLK_N: return ImGuiKey_N;
|
|
|
+ case SDLK_O: return ImGuiKey_O;
|
|
|
+ case SDLK_P: return ImGuiKey_P;
|
|
|
+ case SDLK_Q: return ImGuiKey_Q;
|
|
|
+ case SDLK_R: return ImGuiKey_R;
|
|
|
+ case SDLK_S: return ImGuiKey_S;
|
|
|
+ case SDLK_T: return ImGuiKey_T;
|
|
|
+ case SDLK_U: return ImGuiKey_U;
|
|
|
+ case SDLK_V: return ImGuiKey_V;
|
|
|
+ case SDLK_W: return ImGuiKey_W;
|
|
|
+ case SDLK_X: return ImGuiKey_X;
|
|
|
+ case SDLK_Y: return ImGuiKey_Y;
|
|
|
+ case SDLK_Z: return ImGuiKey_Z;
|
|
|
case SDLK_F1: return ImGuiKey_F1;
|
|
|
case SDLK_F2: return ImGuiKey_F2;
|
|
|
case SDLK_F3: return ImGuiKey_F3;
|
|
@@ -338,8 +343,9 @@ bool ImGui_ImplSDL3_ProcessEvent(const SDL_Event* event)
|
|
|
case SDL_EVENT_KEY_DOWN:
|
|
|
case SDL_EVENT_KEY_UP:
|
|
|
{
|
|
|
+ //IMGUI_DEBUG_LOG("SDL_EVENT_KEY_%d: key=%d, scancode=%d, mod=%X\n", (event->type == SDL_EVENT_KEY_DOWN) ? "DOWN" : "UP", event->key.key, event->key.scancode, event->key.mod);
|
|
|
ImGui_ImplSDL3_UpdateKeyModifiers((SDL_Keymod)event->key.mod);
|
|
|
- ImGuiKey key = ImGui_ImplSDL3_KeycodeToImGuiKey(event->key.key);
|
|
|
+ ImGuiKey key = ImGui_ImplSDL3_KeyEventToImGuiKey(event->key.key, event->key.scancode);
|
|
|
io.AddKeyEvent(key, (event->type == SDL_EVENT_KEY_DOWN));
|
|
|
io.SetKeyEventNativeData(key, event->key.key, event->key.scancode, event->key.scancode); // To support legacy indexing (<1.87 user code). Legacy backend uses SDLK_*** as indices to IsKeyXXX() functions.
|
|
|
return true;
|