mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-06 04:58:47 +02:00
Misc input related changes to facilitate upcoming merges.
This commit is contained in:
60
imgui.cpp
60
imgui.cpp
@ -4046,6 +4046,18 @@ static void UpdateAliasKey(ImGuiKey key, bool v, float analog_value)
|
||||
key_data->AnalogValue = analog_value;
|
||||
}
|
||||
|
||||
// [Internal] Do not use directly (should read io.KeyMods instead)
|
||||
static ImGuiModFlags GetMergedModFlags()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiModFlags key_mods = ImGuiModFlags_None;
|
||||
if (g.IO.KeyCtrl) { key_mods |= ImGuiModFlags_Ctrl; }
|
||||
if (g.IO.KeyShift) { key_mods |= ImGuiModFlags_Shift; }
|
||||
if (g.IO.KeyAlt) { key_mods |= ImGuiModFlags_Alt; }
|
||||
if (g.IO.KeySuper) { key_mods |= ImGuiModFlags_Super; }
|
||||
return key_mods;
|
||||
}
|
||||
|
||||
static void ImGui::UpdateKeyboardInputs()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
@ -4086,10 +4098,10 @@ static void ImGui::UpdateKeyboardInputs()
|
||||
}
|
||||
if (io.BackendUsingLegacyKeyArrays == 1)
|
||||
{
|
||||
io.KeysData[ImGuiKey_ModCtrl].Down = io.KeyCtrl;
|
||||
io.KeysData[ImGuiKey_ModShift].Down = io.KeyShift;
|
||||
io.KeysData[ImGuiKey_ModAlt].Down = io.KeyAlt;
|
||||
io.KeysData[ImGuiKey_ModSuper].Down = io.KeySuper;
|
||||
GetKeyData(ImGuiKey_ModCtrl)->Down = io.KeyCtrl;
|
||||
GetKeyData(ImGuiKey_ModShift)->Down = io.KeyShift;
|
||||
GetKeyData(ImGuiKey_ModAlt)->Down = io.KeyAlt;
|
||||
GetKeyData(ImGuiKey_ModSuper)->Down = io.KeySuper;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4382,18 +4394,6 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
|
||||
io.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
|
||||
}
|
||||
|
||||
// [Internal] Do not use directly (can read io.KeyMods instead)
|
||||
ImGuiModFlags ImGui::GetMergedModFlags()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiModFlags key_mods = ImGuiModFlags_None;
|
||||
if (g.IO.KeyCtrl) { key_mods |= ImGuiModFlags_Ctrl; }
|
||||
if (g.IO.KeyShift) { key_mods |= ImGuiModFlags_Shift; }
|
||||
if (g.IO.KeyAlt) { key_mods |= ImGuiModFlags_Alt; }
|
||||
if (g.IO.KeySuper) { key_mods |= ImGuiModFlags_Super; }
|
||||
return key_mods;
|
||||
}
|
||||
|
||||
void ImGui::NewFrame()
|
||||
{
|
||||
IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
|
||||
@ -7778,8 +7778,8 @@ static const char* const GKeyNames[] =
|
||||
"GamepadL1", "GamepadR1", "GamepadL2", "GamepadR2", "GamepadL3", "GamepadR3",
|
||||
"GamepadLStickLeft", "GamepadLStickRight", "GamepadLStickUp", "GamepadLStickDown",
|
||||
"GamepadRStickLeft", "GamepadRStickRight", "GamepadRStickUp", "GamepadRStickDown",
|
||||
"ModCtrl", "ModShift", "ModAlt", "ModSuper",
|
||||
"MouseLeft", "MouseRight", "MouseMiddle", "MouseX1", "MouseX2", "MouseWheelX", "MouseWheelY",
|
||||
"ModCtrl", "ModShift", "ModAlt", "ModSuper",
|
||||
};
|
||||
IM_STATIC_ASSERT(ImGuiKey_NamedKey_COUNT == IM_ARRAYSIZE(GKeyNames));
|
||||
|
||||
@ -8146,33 +8146,33 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
|
||||
{
|
||||
ImGuiKey key = e->Key.Key;
|
||||
IM_ASSERT(key != ImGuiKey_None);
|
||||
const int keydata_index = (key - ImGuiKey_KeysData_OFFSET);
|
||||
ImGuiKeyData* keydata = &io.KeysData[keydata_index];
|
||||
e->IgnoredAsSame = (keydata->Down == e->Key.Down && keydata->AnalogValue == e->Key.AnalogValue);
|
||||
const int key_data_index = (key - ImGuiKey_KeysData_OFFSET);
|
||||
ImGuiKeyData* key_data = &io.KeysData[key_data_index];
|
||||
e->IgnoredAsSame = (key_data->Down == e->Key.Down && key_data->AnalogValue == e->Key.AnalogValue);
|
||||
if (!e->IgnoredAsSame)
|
||||
{
|
||||
// Trickling Rule: Stop processing queued events if we got multiple action on the same button
|
||||
if (trickle_fast_inputs && keydata->Down != e->Key.Down && (key_changed_mask.TestBit(keydata_index) || text_inputted || mouse_button_changed != 0))
|
||||
if (trickle_fast_inputs && key_data->Down != e->Key.Down && (key_changed_mask.TestBit(key_data_index) || text_inputted || mouse_button_changed != 0))
|
||||
break;
|
||||
keydata->Down = e->Key.Down;
|
||||
keydata->AnalogValue = e->Key.AnalogValue;
|
||||
key_data->Down = e->Key.Down;
|
||||
key_data->AnalogValue = e->Key.AnalogValue;
|
||||
key_changed = true;
|
||||
key_changed_mask.SetBit(keydata_index);
|
||||
key_changed_mask.SetBit(key_data_index);
|
||||
|
||||
if (key == ImGuiKey_ModCtrl || key == ImGuiKey_ModShift || key == ImGuiKey_ModAlt || key == ImGuiKey_ModSuper)
|
||||
{
|
||||
if (key == ImGuiKey_ModCtrl) { io.KeyCtrl = keydata->Down; }
|
||||
if (key == ImGuiKey_ModShift) { io.KeyShift = keydata->Down; }
|
||||
if (key == ImGuiKey_ModAlt) { io.KeyAlt = keydata->Down; }
|
||||
if (key == ImGuiKey_ModSuper) { io.KeySuper = keydata->Down; }
|
||||
if (key == ImGuiKey_ModCtrl) { io.KeyCtrl = key_data->Down; }
|
||||
if (key == ImGuiKey_ModShift) { io.KeyShift = key_data->Down; }
|
||||
if (key == ImGuiKey_ModAlt) { io.KeyAlt = key_data->Down; }
|
||||
if (key == ImGuiKey_ModSuper) { io.KeySuper = key_data->Down; }
|
||||
io.KeyMods = GetMergedModFlags();
|
||||
}
|
||||
|
||||
// Allow legacy code using io.KeysDown[GetKeyIndex()] with new backends
|
||||
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
||||
io.KeysDown[key] = keydata->Down;
|
||||
io.KeysDown[key] = key_data->Down;
|
||||
if (io.KeyMap[key] != -1)
|
||||
io.KeysDown[io.KeyMap[key]] = keydata->Down;
|
||||
io.KeysDown[io.KeyMap[key]] = key_data->Down;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user