Skip to content

Commit

Permalink
Merge branch 'ocornut:master' into dve
Browse files Browse the repository at this point in the history
  • Loading branch information
fangshun2004 authored Sep 23, 2022
2 parents f829b18 + f359dca commit e19f380
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 38 deletions.
60 changes: 30 additions & 30 deletions imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -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() ?");
Expand Down Expand Up @@ -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));

Expand Down Expand Up @@ -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
}
}
Expand Down
10 changes: 5 additions & 5 deletions imgui.h
Original file line number Diff line number Diff line change
Expand Up @@ -1437,6 +1437,10 @@ enum ImGuiKey : int
ImGuiKey_GamepadRStickUp, // [Analog]
ImGuiKey_GamepadRStickDown, // [Analog]

// Mouse Buttons (auto-submitted from AddMouseButtonEvent() calls)
// - This is mirroring the data also written to io.MouseDown[], io.MouseWheel, in a format allowing them to be accessed via standard key API.
ImGuiKey_MouseLeft, ImGuiKey_MouseRight, ImGuiKey_MouseMiddle, ImGuiKey_MouseX1, ImGuiKey_MouseX2, ImGuiKey_MouseWheelX, ImGuiKey_MouseWheelY,

// Keyboard Modifiers (explicitly submitted by backend via AddKeyEvent() calls)
// - This is mirroring the data also written to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper, in a format allowing
// them to be accessed via standard key API, allowing calls such as IsKeyPressed(), IsKeyReleased(), querying duration etc.
Expand All @@ -1447,10 +1451,6 @@ enum ImGuiKey : int
// backends tend to interfere and break that equivalence. The safer decision is to relay that ambiguity down to the end-user...
ImGuiKey_ModCtrl, ImGuiKey_ModShift, ImGuiKey_ModAlt, ImGuiKey_ModSuper,

// Mouse Buttons (auto-submitted from AddMouseButtonEvent() calls)
// - This is mirroring the data also written to io.MouseDown[], io.MouseWheel, in a format allowing them to be accessed via standard key API.
ImGuiKey_MouseLeft, ImGuiKey_MouseRight, ImGuiKey_MouseMiddle, ImGuiKey_MouseX1, ImGuiKey_MouseX2, ImGuiKey_MouseWheelX, ImGuiKey_MouseWheelY,

// End of list
ImGuiKey_COUNT, // No valid ImGuiKey is ever greater than this value

Expand Down Expand Up @@ -1890,7 +1890,7 @@ struct ImGuiStyle
//-----------------------------------------------------------------------------

// [Internal] Storage used by IsKeyDown(), IsKeyPressed() etc functions.
// If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and not io.KeysData[key]->DownDuration.
// If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and *NOT* io.KeysData[key]->DownDuration.
struct ImGuiKeyData
{
bool Down; // True for if key is down
Expand Down
5 changes: 2 additions & 3 deletions imgui_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -1173,15 +1173,15 @@ struct ImGuiPtrOrIndex

typedef ImBitArray<ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN> ImBitArrayForNamedKeys;

// Extend ImGuiKey_
// [Internal] Key ranges
#define ImGuiKey_LegacyNativeKey_BEGIN 0
#define ImGuiKey_LegacyNativeKey_END 512
#define ImGuiKey_Keyboard_BEGIN (ImGuiKey_NamedKey_BEGIN)
#define ImGuiKey_Keyboard_END (ImGuiKey_GamepadStart)
#define ImGuiKey_Gamepad_BEGIN (ImGuiKey_GamepadStart)
#define ImGuiKey_Gamepad_END (ImGuiKey_GamepadRStickDown + 1)
#define ImGuiKey_Aliases_BEGIN (ImGuiKey_MouseLeft)
#define ImGuiKey_Aliases_END (ImGuiKey_COUNT)
#define ImGuiKey_Aliases_END (ImGuiKey_MouseWheelY + 1)

// [Internal] Named shortcuts for Navigation
#define ImGuiKey_NavKeyboardTweakSlow ImGuiKey_ModCtrl
Expand Down Expand Up @@ -2720,7 +2720,6 @@ namespace ImGui
inline void SetActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key); }
inline ImGuiKey MouseButtonToKey(ImGuiMouseButton button) { IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); return (ImGuiKey)(ImGuiKey_MouseLeft + button); }
IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
IMGUI_API ImGuiModFlags GetMergedModFlags();
IMGUI_API ImVec2 GetKeyVector2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down);
IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis);
IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
Expand Down

0 comments on commit e19f380

Please sign in to comment.