| 8472 | } |
| 8473 | |
| 8474 | static void ImGui::UpdateKeyboardInputs() |
| 8475 | { |
| 8476 | ImGuiContext& g = *GImGui; |
| 8477 | ImGuiIO& io = g.IO; |
| 8478 | |
| 8479 | // Import legacy keys or verify they are not used |
| 8480 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 8481 | if (io.BackendUsingLegacyKeyArrays == 0) |
| 8482 | { |
| 8483 | // Backend used new io.AddKeyEvent() API: Good! Verify that old arrays are never written to externally. |
| 8484 | for (int n = 0; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 8485 | IM_ASSERT((io.KeysDown[n] == false || IsKeyDown((ImGuiKey)n)) && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!"); |
| 8486 | } |
| 8487 | else |
| 8488 | { |
| 8489 | if (g.FrameCount == 0) |
| 8490 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 8491 | IM_ASSERT(g.IO.KeyMap[n] == -1 && "Backend is not allowed to write to io.KeyMap[0..511]!"); |
| 8492 | |
| 8493 | // Build reverse KeyMap (Named -> Legacy) |
| 8494 | for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) |
| 8495 | if (io.KeyMap[n] != -1) |
| 8496 | { |
| 8497 | IM_ASSERT(IsLegacyKey((ImGuiKey)io.KeyMap[n])); |
| 8498 | io.KeyMap[io.KeyMap[n]] = n; |
| 8499 | } |
| 8500 | |
| 8501 | // Import legacy keys into new ones |
| 8502 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 8503 | if (io.KeysDown[n] || io.BackendUsingLegacyKeyArrays == 1) |
| 8504 | { |
| 8505 | const ImGuiKey key = (ImGuiKey)(io.KeyMap[n] != -1 ? io.KeyMap[n] : n); |
| 8506 | IM_ASSERT(io.KeyMap[n] == -1 || IsNamedKey(key)); |
| 8507 | io.KeysData[key].Down = io.KeysDown[n]; |
| 8508 | if (key != n) |
| 8509 | io.KeysDown[key] = io.KeysDown[n]; // Allow legacy code using io.KeysDown[GetKeyIndex()] with old backends |
| 8510 | io.BackendUsingLegacyKeyArrays = 1; |
| 8511 | } |
| 8512 | if (io.BackendUsingLegacyKeyArrays == 1) |
| 8513 | { |
| 8514 | GetKeyData(ImGuiMod_Ctrl)->Down = io.KeyCtrl; |
| 8515 | GetKeyData(ImGuiMod_Shift)->Down = io.KeyShift; |
| 8516 | GetKeyData(ImGuiMod_Alt)->Down = io.KeyAlt; |
| 8517 | GetKeyData(ImGuiMod_Super)->Down = io.KeySuper; |
| 8518 | } |
| 8519 | } |
| 8520 | |
| 8521 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 8522 | const bool nav_gamepad_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (io.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; |
| 8523 | if (io.BackendUsingLegacyNavInputArray && nav_gamepad_active) |
| 8524 | { |
| 8525 | #define MAP_LEGACY_NAV_INPUT_TO_KEY1(_KEY, _NAV1) do { io.KeysData[_KEY].Down = (io.NavInputs[_NAV1] > 0.0f); io.KeysData[_KEY].AnalogValue = io.NavInputs[_NAV1]; } while (0) |
| 8526 | #define MAP_LEGACY_NAV_INPUT_TO_KEY2(_KEY, _NAV1, _NAV2) do { io.KeysData[_KEY].Down = (io.NavInputs[_NAV1] > 0.0f) || (io.NavInputs[_NAV2] > 0.0f); io.KeysData[_KEY].AnalogValue = ImMax(io.NavInputs[_NAV1], io.NavInputs[_NAV2]); } while (0) |
| 8527 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceDown, ImGuiNavInput_Activate); |
| 8528 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceRight, ImGuiNavInput_Cancel); |
| 8529 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceLeft, ImGuiNavInput_Menu); |
| 8530 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceUp, ImGuiNavInput_Input); |
| 8531 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadDpadLeft, ImGuiNavInput_DpadLeft); |
nothing calls this directly
no test coverage detected