|
@@ -1541,13 +1541,15 @@ void ImGuiIO::ClearEventsQueue()
|
|
|
// Clear current keyboard/gamepad state + current frame text input buffer. Equivalent to releasing all keys/buttons.
|
|
|
void ImGuiIO::ClearInputKeys()
|
|
|
{
|
|
|
- for (int n = 0; n < IM_ARRAYSIZE(KeysData); n++)
|
|
|
+ ImGuiContext& g = *Ctx;
|
|
|
+ for (int key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key++)
|
|
|
{
|
|
|
- if (ImGui::IsMouseKey((ImGuiKey)(n + ImGuiKey_KeysData_OFFSET)))
|
|
|
+ if (ImGui::IsMouseKey((ImGuiKey)key))
|
|
|
continue;
|
|
|
- KeysData[n].Down = false;
|
|
|
- KeysData[n].DownDuration = -1.0f;
|
|
|
- KeysData[n].DownDurationPrev = -1.0f;
|
|
|
+ ImGuiKeyData* key_data = &g.IO.KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
+ key_data->Down = false;
|
|
|
+ key_data->DownDuration = -1.0f;
|
|
|
+ key_data->DownDurationPrev = -1.0f;
|
|
|
}
|
|
|
KeyCtrl = KeyShift = KeyAlt = KeySuper = false;
|
|
|
KeyMods = ImGuiMod_None;
|
|
@@ -1558,7 +1560,7 @@ void ImGuiIO::ClearInputMouse()
|
|
|
{
|
|
|
for (ImGuiKey key = ImGuiKey_Mouse_BEGIN; key < ImGuiKey_Mouse_END; key = (ImGuiKey)(key + 1))
|
|
|
{
|
|
|
- ImGuiKeyData* key_data = &KeysData[key - ImGuiKey_KeysData_OFFSET];
|
|
|
+ ImGuiKeyData* key_data = &KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
key_data->Down = false;
|
|
|
key_data->DownDuration = -1.0f;
|
|
|
key_data->DownDurationPrev = -1.0f;
|
|
@@ -8908,7 +8910,7 @@ ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
|
|
|
key = ConvertSingleModFlagToKey(key);
|
|
|
|
|
|
IM_ASSERT(IsNamedKey(key) && "Support for user key indices was dropped in favor of ImGuiKey. Please update backend & user code.");
|
|
|
- return &g.IO.KeysData[key - ImGuiKey_KeysData_OFFSET];
|
|
|
+ return &g.IO.KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
}
|
|
|
|
|
|
// Those names a provided for debugging purpose and are not meant to be saved persistently not compared.
|
|
@@ -9609,22 +9611,21 @@ static void ImGui::UpdateKeyboardInputs()
|
|
|
|
|
|
// Clear gamepad data if disabled
|
|
|
if ((io.BackendFlags & ImGuiBackendFlags_HasGamepad) == 0)
|
|
|
- for (int i = ImGuiKey_Gamepad_BEGIN; i < ImGuiKey_Gamepad_END; i++)
|
|
|
+ for (int key = ImGuiKey_Gamepad_BEGIN; key < ImGuiKey_Gamepad_END; key++)
|
|
|
{
|
|
|
- io.KeysData[i - ImGuiKey_KeysData_OFFSET].Down = false;
|
|
|
- io.KeysData[i - ImGuiKey_KeysData_OFFSET].AnalogValue = 0.0f;
|
|
|
+ io.KeysData[key - ImGuiKey_NamedKey_BEGIN].Down = false;
|
|
|
+ io.KeysData[key - ImGuiKey_NamedKey_BEGIN].AnalogValue = 0.0f;
|
|
|
}
|
|
|
|
|
|
// Update keys
|
|
|
- for (int i = 0; i < ImGuiKey_KeysData_SIZE; i++)
|
|
|
+ for (int key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key++)
|
|
|
{
|
|
|
- ImGuiKeyData* key_data = &io.KeysData[i];
|
|
|
+ ImGuiKeyData* key_data = &io.KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
key_data->DownDurationPrev = key_data->DownDuration;
|
|
|
key_data->DownDuration = key_data->Down ? (key_data->DownDuration < 0.0f ? 0.0f : key_data->DownDuration + io.DeltaTime) : -1.0f;
|
|
|
if (key_data->DownDuration == 0.0f)
|
|
|
{
|
|
|
- ImGuiKey key = (ImGuiKey)(ImGuiKey_KeysData_OFFSET + i);
|
|
|
- if (IsKeyboardKey(key))
|
|
|
+ if (IsKeyboardKey((ImGuiKey)key))
|
|
|
g.LastKeyboardKeyPressTime = g.Time;
|
|
|
else if (key == ImGuiKey_ReservedForModCtrl || key == ImGuiKey_ReservedForModShift || key == ImGuiKey_ReservedForModAlt || key == ImGuiKey_ReservedForModSuper)
|
|
|
g.LastKeyboardKeyPressTime = g.Time;
|
|
@@ -9634,7 +9635,7 @@ static void ImGui::UpdateKeyboardInputs()
|
|
|
// Update keys/input owner (named keys only): one entry per key
|
|
|
for (ImGuiKey key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key = (ImGuiKey)(key + 1))
|
|
|
{
|
|
|
- ImGuiKeyData* key_data = &io.KeysData[key - ImGuiKey_KeysData_OFFSET];
|
|
|
+ ImGuiKeyData* key_data = &io.KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
ImGuiKeyOwnerData* owner_data = &g.KeysOwnerData[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
owner_data->OwnerCurr = owner_data->OwnerNext;
|
|
|
if (!key_data->Down) // Important: ownership is released on the frame after a release. Ensure a 'MouseDown -> CloseWindow -> MouseUp' chain doesn't lead to someone else seeing the MouseUp.
|
|
@@ -9920,7 +9921,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
|
|
|
|
|
|
bool mouse_moved = false, mouse_wheeled = false, key_changed = false, key_changed_nonchar = false, text_inputted = false;
|
|
|
int mouse_button_changed = 0x00;
|
|
|
- ImBitArray<ImGuiKey_KeysData_SIZE> key_changed_mask;
|
|
|
+ ImBitArray<ImGuiKey_NamedKey_COUNT> key_changed_mask;
|
|
|
|
|
|
int event_n = 0;
|
|
|
for (; event_n < g.InputEventsQueue.Size; event_n++)
|
|
@@ -15602,9 +15603,9 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
{
|
|
|
// User code should never have to go through such hoops! You can generally iterate between ImGuiKey_NamedKey_BEGIN and ImGuiKey_NamedKey_END.
|
|
|
Indent();
|
|
|
- Text("Keys down:"); for (ImGuiKey key = ImGuiKey_KeysData_OFFSET; key < ImGuiKey_COUNT; key = (ImGuiKey)(key + 1)) { if (!IsKeyDown(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); SameLine(); Text("(%.02f)", GetKeyData(key)->DownDuration); }
|
|
|
- Text("Keys pressed:"); for (ImGuiKey key = ImGuiKey_KeysData_OFFSET; key < ImGuiKey_COUNT; key = (ImGuiKey)(key + 1)) { if (!IsKeyPressed(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); }
|
|
|
- Text("Keys released:"); for (ImGuiKey key = ImGuiKey_KeysData_OFFSET; key < ImGuiKey_COUNT; key = (ImGuiKey)(key + 1)) { if (!IsKeyReleased(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); }
|
|
|
+ Text("Keys down:"); for (ImGuiKey key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key = (ImGuiKey)(key + 1)) { if (!IsKeyDown(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); SameLine(); Text("(%.02f)", GetKeyData(key)->DownDuration); }
|
|
|
+ Text("Keys pressed:"); for (ImGuiKey key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key = (ImGuiKey)(key + 1)) { if (!IsKeyPressed(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); }
|
|
|
+ Text("Keys released:"); for (ImGuiKey key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key = (ImGuiKey)(key + 1)) { if (!IsKeyReleased(key)) continue; SameLine(); Text(IsNamedKey(key) ? "\"%s\"" : "\"%s\" %d", GetKeyName(key), key); }
|
|
|
Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
|
|
|
Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; SameLine(); Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
|
|
|
DebugRenderKeyboardPreview(GetWindowDrawList());
|