| 4342 | } |
| 4343 | |
| 4344 | static void ImGui::UpdateKeyboardInputs() |
| 4345 | { |
| 4346 | ImGuiContext& g = *GImGui; |
| 4347 | ImGuiIO& io = g.IO; |
| 4348 | |
| 4349 | // Import legacy keys or verify they are not used |
| 4350 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 4351 | if (io.BackendUsingLegacyKeyArrays == 0) |
| 4352 | { |
| 4353 | // Backend used new io.AddKeyEvent() API: Good! Verify that old arrays are never written to externally. |
| 4354 | for (int n = 0; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4355 | 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!"); |
| 4356 | } |
| 4357 | else |
| 4358 | { |
| 4359 | if (g.FrameCount == 0) |
| 4360 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4361 | IM_ASSERT(g.IO.KeyMap[n] == -1 && "Backend is not allowed to write to io.KeyMap[0..511]!"); |
| 4362 | |
| 4363 | // Build reverse KeyMap (Named -> Legacy) |
| 4364 | for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) |
| 4365 | if (io.KeyMap[n] != -1) |
| 4366 | { |
| 4367 | IM_ASSERT(IsLegacyKey((ImGuiKey)io.KeyMap[n])); |
| 4368 | io.KeyMap[io.KeyMap[n]] = n; |
| 4369 | } |
| 4370 | |
| 4371 | // Import legacy keys into new ones |
| 4372 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4373 | if (io.KeysDown[n] || io.BackendUsingLegacyKeyArrays == 1) |
| 4374 | { |
| 4375 | const ImGuiKey key = (ImGuiKey)(io.KeyMap[n] != -1 ? io.KeyMap[n] : n); |
| 4376 | IM_ASSERT(io.KeyMap[n] == -1 || IsNamedKey(key)); |
| 4377 | io.KeysData[key].Down = io.KeysDown[n]; |
| 4378 | if (key != n) |
| 4379 | io.KeysDown[key] = io.KeysDown[n]; // Allow legacy code using io.KeysDown[GetKeyIndex()] with old backends |
| 4380 | io.BackendUsingLegacyKeyArrays = 1; |
| 4381 | } |
| 4382 | if (io.BackendUsingLegacyKeyArrays == 1) |
| 4383 | { |
| 4384 | GetKeyData(ImGuiMod_Ctrl)->Down = io.KeyCtrl; |
| 4385 | GetKeyData(ImGuiMod_Shift)->Down = io.KeyShift; |
| 4386 | GetKeyData(ImGuiMod_Alt)->Down = io.KeyAlt; |
| 4387 | GetKeyData(ImGuiMod_Super)->Down = io.KeySuper; |
| 4388 | } |
| 4389 | } |
| 4390 | |
| 4391 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 4392 | const bool nav_gamepad_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (io.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; |
| 4393 | if (io.BackendUsingLegacyNavInputArray && nav_gamepad_active) |
| 4394 | { |
| 4395 | #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) |
| 4396 | #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) |
| 4397 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceDown, ImGuiNavInput_Activate); |
| 4398 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceRight, ImGuiNavInput_Cancel); |
| 4399 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceLeft, ImGuiNavInput_Menu); |
| 4400 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceUp, ImGuiNavInput_Input); |
| 4401 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadDpadLeft, ImGuiNavInput_DpadLeft); |
nothing calls this directly
no test coverage detected