| 4170 | } |
| 4171 | |
| 4172 | static void ImGui::UpdateKeyboardInputs() |
| 4173 | { |
| 4174 | ImGuiContext& g = *GImGui; |
| 4175 | ImGuiIO& io = g.IO; |
| 4176 | |
| 4177 | // Import legacy keys or verify they are not used |
| 4178 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 4179 | if (io.BackendUsingLegacyKeyArrays == 0) |
| 4180 | { |
| 4181 | // Backend used new io.AddKeyEvent() API: Good! Verify that old arrays are never written to externally. |
| 4182 | for (int n = 0; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4183 | 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!"); |
| 4184 | } |
| 4185 | else |
| 4186 | { |
| 4187 | if (g.FrameCount == 0) |
| 4188 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4189 | IM_ASSERT(g.IO.KeyMap[n] == -1 && "Backend is not allowed to write to io.KeyMap[0..511]!"); |
| 4190 | |
| 4191 | // Build reverse KeyMap (Named -> Legacy) |
| 4192 | for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++) |
| 4193 | if (io.KeyMap[n] != -1) |
| 4194 | { |
| 4195 | IM_ASSERT(IsLegacyKey((ImGuiKey)io.KeyMap[n])); |
| 4196 | io.KeyMap[io.KeyMap[n]] = n; |
| 4197 | } |
| 4198 | |
| 4199 | // Import legacy keys into new ones |
| 4200 | for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++) |
| 4201 | if (io.KeysDown[n] || io.BackendUsingLegacyKeyArrays == 1) |
| 4202 | { |
| 4203 | const ImGuiKey key = (ImGuiKey)(io.KeyMap[n] != -1 ? io.KeyMap[n] : n); |
| 4204 | IM_ASSERT(io.KeyMap[n] == -1 || IsNamedKey(key)); |
| 4205 | io.KeysData[key].Down = io.KeysDown[n]; |
| 4206 | if (key != n) |
| 4207 | io.KeysDown[key] = io.KeysDown[n]; // Allow legacy code using io.KeysDown[GetKeyIndex()] with old backends |
| 4208 | io.BackendUsingLegacyKeyArrays = 1; |
| 4209 | } |
| 4210 | if (io.BackendUsingLegacyKeyArrays == 1) |
| 4211 | { |
| 4212 | GetKeyData(ImGuiMod_Ctrl)->Down = io.KeyCtrl; |
| 4213 | GetKeyData(ImGuiMod_Shift)->Down = io.KeyShift; |
| 4214 | GetKeyData(ImGuiMod_Alt)->Down = io.KeyAlt; |
| 4215 | GetKeyData(ImGuiMod_Super)->Down = io.KeySuper; |
| 4216 | } |
| 4217 | } |
| 4218 | |
| 4219 | #ifndef IMGUI_DISABLE_OBSOLETE_KEYIO |
| 4220 | const bool nav_gamepad_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (io.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; |
| 4221 | if (io.BackendUsingLegacyNavInputArray && nav_gamepad_active) |
| 4222 | { |
| 4223 | #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) |
| 4224 | #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) |
| 4225 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceDown, ImGuiNavInput_Activate); |
| 4226 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceRight, ImGuiNavInput_Cancel); |
| 4227 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceLeft, ImGuiNavInput_Menu); |
| 4228 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadFaceUp, ImGuiNavInput_Input); |
| 4229 | MAP_LEGACY_NAV_INPUT_TO_KEY1(ImGuiKey_GamepadDpadLeft, ImGuiNavInput_DpadLeft); |
nothing calls this directly
no test coverage detected