|
|
@ -2344,19 +2344,6 @@ static inline void NavUpdateAnyRequestFlag() |
|
|
|
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.
|
|
|
|
// 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().
|
|
|
@ -4931,53 +4918,6 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla |
|
|
|
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() |
|
|
|
{ |
|
|
|
ImGuiContext& g = *GImGui; (void)g; |
|
|
@ -7854,6 +7794,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
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|