mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-27 16:29:02 +08:00
Nav: Added NavJustNavigatedId internal info to record when we land on a given item after a navigation request, useful for various algorithms (currently looking at range selection stuff) (#787)
This commit is contained in:
parent
491edfd8d8
commit
74da533c93
@ -1928,7 +1928,7 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
|
||||
if (id)
|
||||
{
|
||||
g.ActiveIdIsAlive = true;
|
||||
g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavTabbedId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
|
||||
g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavJustTabbedId == id || g.NavJustNavigatedId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
|
||||
if (g.ActiveIdSource == ImGuiInputSource_Nav)
|
||||
g.NavDisableMouseHover = true;
|
||||
else
|
||||
@ -2318,7 +2318,7 @@ bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop
|
||||
return true;
|
||||
if (allow_keyboard_focus && window->FocusIdxTabCounter == window->FocusIdxTabRequestCurrent)
|
||||
{
|
||||
g.NavTabbedId = id;
|
||||
g.NavJustTabbedId = id;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2592,6 +2592,7 @@ static void NavUpdate()
|
||||
g.NavInitDefaultRequest = false;
|
||||
g.NavInitDefaultResultExplicit = false;
|
||||
g.NavInitDefaultResultId = 0;
|
||||
g.NavJustNavigatedId = 0;
|
||||
|
||||
// Process navigation move request
|
||||
if (g.NavMoveRequest && g.NavMoveResultId != 0)
|
||||
@ -2633,6 +2634,7 @@ static void NavUpdate()
|
||||
// Apply result from previous frame navigation directional move request
|
||||
ImGui::ClearActiveID();
|
||||
SetNavIdAndMoveMouse(g.NavMoveResultId, g.NavLayer, g.NavMoveResultRectRel);
|
||||
g.NavJustNavigatedId = g.NavMoveResultId;
|
||||
g.NavMoveFromClampedRefRect = false;
|
||||
}
|
||||
|
||||
@ -2657,7 +2659,7 @@ static void NavUpdate()
|
||||
g.NavMousePosDirty = false;
|
||||
}
|
||||
g.NavIdIsAlive = false;
|
||||
g.NavTabbedId = 0;
|
||||
g.NavJustTabbedId = 0;
|
||||
|
||||
// Navigation windowing mode (change focus, move/resize window)
|
||||
if (!g.NavWindowingTarget && IsNavInputPressed(ImGuiNavInput_PadMenu, ImGuiNavReadMode_Pressed))
|
||||
|
@ -458,7 +458,8 @@ struct ImGuiContext
|
||||
ImGuiWindow* NavWindow; // Nav/focused window for navigation
|
||||
ImGuiID NavId; // Nav/focused item for navigation
|
||||
ImGuiID NavActivateId, NavInputId; // ~~ IsKeyPressedMap(ImGuiKey_NavActive) ? NavId : 0, etc. (to make widget code terser)
|
||||
ImGuiID NavTabbedId; //
|
||||
ImGuiID NavJustTabbedId; // Just tabbed to this id.
|
||||
ImGuiID NavJustNavigatedId; // Just navigated to this id (result of a successfully MoveRequest)
|
||||
ImRect NavScoringRectScreen; // Rectangle used for scoring, in screen space. Based of window->DC.NavRefRectRel[], modified for directional navigation scoring.
|
||||
ImGuiWindow* NavWindowingTarget;
|
||||
float NavWindowingDisplayAlpha;
|
||||
@ -571,7 +572,7 @@ struct ImGuiContext
|
||||
SettingsDirtyTimer = 0.0f;
|
||||
|
||||
NavWindow = NULL;
|
||||
NavId = NavActivateId = NavInputId = NavTabbedId = 0;
|
||||
NavId = NavActivateId = NavInputId = NavJustTabbedId = 0;
|
||||
NavScoringRectScreen = ImRect();
|
||||
NavWindowingTarget = NULL;
|
||||
NavWindowingDisplayAlpha = 0.0f;
|
||||
|
Loading…
Reference in New Issue
Block a user