Refactor: Internals: Moved Navigation functions in imgui.cpp in their own section. DONE! (part 9) (#2036, #787)
This commit is contained in:
parent
fefcc77f13
commit
346f83e014
72
imgui.cpp
72
imgui.cpp
@ -899,6 +899,8 @@ static float NavUpdatePageUpPageDown(int allowed_dir_flags);
|
|||||||
static inline void NavUpdateAnyRequestFlag();
|
static inline void NavUpdateAnyRequestFlag();
|
||||||
static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id);
|
static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id);
|
||||||
static ImVec2 NavCalcPreferredRefPos();
|
static ImVec2 NavCalcPreferredRefPos();
|
||||||
|
static void NavSaveLastChildNavWindow(ImGuiWindow* nav_window);
|
||||||
|
static ImGuiWindow* NavRestoreLastChildNavWindow(ImGuiWindow* window);
|
||||||
|
|
||||||
static void UpdateMouseInputs();
|
static void UpdateMouseInputs();
|
||||||
static void UpdateMouseWheel();
|
static void UpdateMouseWheel();
|
||||||
@ -2339,41 +2341,6 @@ void ImGui::ItemSize(const ImRect& bb, float text_offset_y)
|
|||||||
ItemSize(bb.GetSize(), text_offset_y);
|
ItemSize(bb.GetSize(), text_offset_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NavSaveLastChildNavWindow(ImGuiWindow* child_window)
|
|
||||||
{
|
|
||||||
ImGuiWindow* parent_window = child_window;
|
|
||||||
while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
|
|
||||||
parent_window = parent_window->ParentWindow;
|
|
||||||
if (parent_window && parent_window != child_window)
|
|
||||||
parent_window->NavLastChildNavWindow = child_window;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call when we are expected to land on Layer 0 after FocusWindow()
|
|
||||||
static ImGuiWindow* NavRestoreLastChildNavWindow(ImGuiWindow* window)
|
|
||||||
{
|
|
||||||
return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void NavRestoreLayer(int layer)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
g.NavLayer = layer;
|
|
||||||
if (layer == 0)
|
|
||||||
g.NavWindow = NavRestoreLastChildNavWindow(g.NavWindow);
|
|
||||||
if (layer == 0 && g.NavWindow->NavLastIds[0] != 0)
|
|
||||||
ImGui::SetNavIDWithRectRel(g.NavWindow->NavLastIds[0], layer, g.NavWindow->NavRectRel[0]);
|
|
||||||
else
|
|
||||||
ImGui::NavInitWindow(g.NavWindow, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void ImGui::NavUpdateAnyRequestFlag()
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
g.NavAnyRequest = g.NavMoveRequest || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL);
|
|
||||||
if (g.NavAnyRequest)
|
|
||||||
IM_ASSERT(g.NavWindow != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Declare item bounding box for clipping and interaction.
|
// Declare item bounding box for clipping and interaction.
|
||||||
// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
|
// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
|
||||||
// declare their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd().
|
// declare their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd().
|
||||||
@ -8199,6 +8166,41 @@ void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags mov
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ImGui::NavSaveLastChildNavWindow(ImGuiWindow* nav_window)
|
||||||
|
{
|
||||||
|
ImGuiWindow* parent_window = nav_window;
|
||||||
|
while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
|
||||||
|
parent_window = parent_window->ParentWindow;
|
||||||
|
if (parent_window && parent_window != nav_window)
|
||||||
|
parent_window->NavLastChildNavWindow = nav_window;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call when we are expected to land on Layer 0 after FocusWindow()
|
||||||
|
static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window)
|
||||||
|
{
|
||||||
|
return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void NavRestoreLayer(int layer)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.NavLayer = layer;
|
||||||
|
if (layer == 0)
|
||||||
|
g.NavWindow = ImGui::NavRestoreLastChildNavWindow(g.NavWindow);
|
||||||
|
if (layer == 0 && g.NavWindow->NavLastIds[0] != 0)
|
||||||
|
ImGui::SetNavIDWithRectRel(g.NavWindow->NavLastIds[0], layer, g.NavWindow->NavRectRel[0]);
|
||||||
|
else
|
||||||
|
ImGui::NavInitWindow(g.NavWindow, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void ImGui::NavUpdateAnyRequestFlag()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.NavAnyRequest = g.NavMoveRequest || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL);
|
||||||
|
if (g.NavAnyRequest)
|
||||||
|
IM_ASSERT(g.NavWindow != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
// This needs to be called before we submit any widget (aka in or before Begin)
|
// This needs to be called before we submit any widget (aka in or before Begin)
|
||||||
void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit)
|
void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user