Backends: SDL3: Update for API changes: SDLK_x renames and SDLK_KP_x removals (#7761, #7762)

Also updated function signature in SDL2 backend to match and because it is expected we will use that data (as per #7672)
This commit is contained in:
ocornut 2024-07-02 11:32:46 +02:00
parent 84cc72f372
commit 12f92518bc
3 changed files with 56 additions and 47 deletions

View File

@ -163,8 +163,9 @@ static void ImGui_ImplSDL2_SetPlatformImeData(ImGuiViewport*, ImGuiPlatformImeDa
} }
} }
static ImGuiKey ImGui_ImplSDL2_KeycodeToImGuiKey(int keycode) static ImGuiKey ImGui_ImplSDL2_KeyEventToImGuiKey(SDL_Keycode keycode, SDL_Scancode scancode)
{ {
IM_UNUSED(scancode);
switch (keycode) switch (keycode)
{ {
case SDLK_TAB: return ImGuiKey_Tab; case SDLK_TAB: return ImGuiKey_Tab;
@ -361,7 +362,7 @@ bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event)
case SDL_KEYUP: case SDL_KEYUP:
{ {
ImGui_ImplSDL2_UpdateKeyModifiers((SDL_Keymod)event->key.keysym.mod); ImGui_ImplSDL2_UpdateKeyModifiers((SDL_Keymod)event->key.keysym.mod);
ImGuiKey key = ImGui_ImplSDL2_KeycodeToImGuiKey(event->key.keysym.sym); ImGuiKey key = ImGui_ImplSDL2_KeyEventToImGuiKey(event->key.keysym.sym, event->key.keysym.scancode);
io.AddKeyEvent(key, (event->type == SDL_KEYDOWN)); io.AddKeyEvent(key, (event->type == SDL_KEYDOWN));
io.SetKeyEventNativeData(key, event->key.keysym.sym, event->key.keysym.scancode, event->key.keysym.scancode); // To support legacy indexing (<1.87 user code). Legacy backend uses SDLK_*** as indices to IsKeyXXX() functions. io.SetKeyEventNativeData(key, event->key.keysym.sym, event->key.keysym.scancode, event->key.keysym.scancode); // To support legacy indexing (<1.87 user code). Legacy backend uses SDLK_*** as indices to IsKeyXXX() functions.
return true; return true;

View File

@ -22,6 +22,7 @@
// CHANGELOG // CHANGELOG
// (minor and older changes stripped away, please see git history for details) // (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-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-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. // 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) switch (keycode)
{ {
case SDLK_TAB: return ImGuiKey_Tab; 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_NUMLOCKCLEAR: return ImGuiKey_NumLock;
case SDLK_PRINTSCREEN: return ImGuiKey_PrintScreen; case SDLK_PRINTSCREEN: return ImGuiKey_PrintScreen;
case SDLK_PAUSE: return ImGuiKey_Pause; 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_LCTRL: return ImGuiKey_LeftCtrl;
case SDLK_LSHIFT: return ImGuiKey_LeftShift; case SDLK_LSHIFT: return ImGuiKey_LeftShift;
case SDLK_LALT: return ImGuiKey_LeftAlt; 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_7: return ImGuiKey_7;
case SDLK_8: return ImGuiKey_8; case SDLK_8: return ImGuiKey_8;
case SDLK_9: return ImGuiKey_9; case SDLK_9: return ImGuiKey_9;
case SDLK_a: return ImGuiKey_A; case SDLK_A: return ImGuiKey_A;
case SDLK_b: return ImGuiKey_B; case SDLK_B: return ImGuiKey_B;
case SDLK_c: return ImGuiKey_C; case SDLK_C: return ImGuiKey_C;
case SDLK_d: return ImGuiKey_D; case SDLK_D: return ImGuiKey_D;
case SDLK_e: return ImGuiKey_E; case SDLK_E: return ImGuiKey_E;
case SDLK_f: return ImGuiKey_F; case SDLK_F: return ImGuiKey_F;
case SDLK_g: return ImGuiKey_G; case SDLK_G: return ImGuiKey_G;
case SDLK_h: return ImGuiKey_H; case SDLK_H: return ImGuiKey_H;
case SDLK_i: return ImGuiKey_I; case SDLK_I: return ImGuiKey_I;
case SDLK_j: return ImGuiKey_J; case SDLK_J: return ImGuiKey_J;
case SDLK_k: return ImGuiKey_K; case SDLK_K: return ImGuiKey_K;
case SDLK_l: return ImGuiKey_L; case SDLK_L: return ImGuiKey_L;
case SDLK_m: return ImGuiKey_M; case SDLK_M: return ImGuiKey_M;
case SDLK_n: return ImGuiKey_N; case SDLK_N: return ImGuiKey_N;
case SDLK_o: return ImGuiKey_O; case SDLK_O: return ImGuiKey_O;
case SDLK_p: return ImGuiKey_P; case SDLK_P: return ImGuiKey_P;
case SDLK_q: return ImGuiKey_Q; case SDLK_Q: return ImGuiKey_Q;
case SDLK_r: return ImGuiKey_R; case SDLK_R: return ImGuiKey_R;
case SDLK_s: return ImGuiKey_S; case SDLK_S: return ImGuiKey_S;
case SDLK_t: return ImGuiKey_T; case SDLK_T: return ImGuiKey_T;
case SDLK_u: return ImGuiKey_U; case SDLK_U: return ImGuiKey_U;
case SDLK_v: return ImGuiKey_V; case SDLK_V: return ImGuiKey_V;
case SDLK_w: return ImGuiKey_W; case SDLK_W: return ImGuiKey_W;
case SDLK_x: return ImGuiKey_X; case SDLK_X: return ImGuiKey_X;
case SDLK_y: return ImGuiKey_Y; case SDLK_Y: return ImGuiKey_Y;
case SDLK_z: return ImGuiKey_Z; case SDLK_Z: return ImGuiKey_Z;
case SDLK_F1: return ImGuiKey_F1; case SDLK_F1: return ImGuiKey_F1;
case SDLK_F2: return ImGuiKey_F2; case SDLK_F2: return ImGuiKey_F2;
case SDLK_F3: return ImGuiKey_F3; 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_DOWN:
case SDL_EVENT_KEY_UP: 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); 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.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. 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; return true;

View File

@ -43,6 +43,8 @@ Breaking changes:
Other changes: Other changes:
- Backends: SDL3: Update for API changes: SDLK_x renames and SDLK_KP_x removals (#7761, #7762)
----------------------------------------------------------------------- -----------------------------------------------------------------------
VERSION 1.90.9 (Released 2024-07-01) VERSION 1.90.9 (Released 2024-07-01)