mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-15 19:43:28 +01:00
Refactor: Internals: Moved Navigation functions in imgui.cpp in their own section. (part 2) (#2036, #787)
This commit is contained in:
parent
af002dc861
commit
9a4234ea8e
120
imgui.cpp
120
imgui.cpp
@ -2370,19 +2370,6 @@ static inline void NavUpdateAnyRequestFlag()
|
|||||||
IM_ASSERT(g.NavWindow != NULL);
|
IM_ASSERT(g.NavWindow != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGui::NavMoveRequestButNoResultYet()
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
return g.NavMoveRequest && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::NavMoveRequestCancel()
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
g.NavMoveRequest = false;
|
|
||||||
NavUpdateAnyRequestFlag();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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().
|
||||||
@ -5610,53 +5597,6 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
|
|||||||
return is_open;
|
return is_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None);
|
|
||||||
ImGui::NavMoveRequestCancel();
|
|
||||||
g.NavMoveDir = move_dir;
|
|
||||||
g.NavMoveClipDir = clip_dir;
|
|
||||||
g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
|
|
||||||
g.NavMoveRequestFlags = move_flags;
|
|
||||||
g.NavWindow->NavRectRel[g.NavLayer] = bb_rel;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != 0)
|
|
||||||
return;
|
|
||||||
IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
|
|
||||||
ImRect bb_rel = window->NavRectRel[0];
|
|
||||||
|
|
||||||
ImGuiDir clip_dir = g.NavMoveDir;
|
|
||||||
if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
|
|
||||||
{
|
|
||||||
bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->SizeContents.x) - window->Scroll.x;
|
|
||||||
if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
|
|
||||||
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
|
||||||
}
|
|
||||||
if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
|
|
||||||
{
|
|
||||||
bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
|
|
||||||
if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; }
|
|
||||||
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
|
||||||
}
|
|
||||||
if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
|
|
||||||
{
|
|
||||||
bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->SizeContents.y) - window->Scroll.y;
|
|
||||||
if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
|
|
||||||
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
|
||||||
}
|
|
||||||
if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
|
|
||||||
{
|
|
||||||
bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
|
|
||||||
if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; }
|
|
||||||
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::EndPopup()
|
void ImGui::EndPopup()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui; (void)g;
|
ImGuiContext& g = *GImGui; (void)g;
|
||||||
@ -8855,6 +8795,66 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImGui::NavMoveRequestButNoResultYet()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
return g.NavMoveRequest && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::NavMoveRequestCancel()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.NavMoveRequest = false;
|
||||||
|
NavUpdateAnyRequestFlag();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None);
|
||||||
|
ImGui::NavMoveRequestCancel();
|
||||||
|
g.NavMoveDir = move_dir;
|
||||||
|
g.NavMoveClipDir = clip_dir;
|
||||||
|
g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
|
||||||
|
g.NavMoveRequestFlags = move_flags;
|
||||||
|
g.NavWindow->NavRectRel[g.NavLayer] = bb_rel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != 0)
|
||||||
|
return;
|
||||||
|
IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
|
||||||
|
ImRect bb_rel = window->NavRectRel[0];
|
||||||
|
|
||||||
|
ImGuiDir clip_dir = g.NavMoveDir;
|
||||||
|
if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
|
||||||
|
{
|
||||||
|
bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->SizeContents.x) - window->Scroll.x;
|
||||||
|
if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
|
||||||
|
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
||||||
|
}
|
||||||
|
if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
|
||||||
|
{
|
||||||
|
bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
|
||||||
|
if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; }
|
||||||
|
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
||||||
|
}
|
||||||
|
if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
|
||||||
|
{
|
||||||
|
bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->SizeContents.y) - window->Scroll.y;
|
||||||
|
if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
|
||||||
|
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
||||||
|
}
|
||||||
|
if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
|
||||||
|
{
|
||||||
|
bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
|
||||||
|
if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; }
|
||||||
|
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// COLUMNS
|
// COLUMNS
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user