From 3490046c9746a1beedef6da921fe3f5412792ec9 Mon Sep 17 00:00:00 2001 From: omar Date: Thu, 2 Apr 2020 17:36:23 +0200 Subject: [PATCH] Nav: Disabled clipping g.NavId and fixed interactions with ImGuiListClipper. (#787) --- docs/CHANGELOG.txt | 3 +++ imgui.cpp | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 8d8ea0b8..adc5fac2 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -49,6 +49,9 @@ Other Changes: - Selectable: Allow using ImGuiSelectableFlags_SpanAllColumns in other columns than first. (#125) - TreeNode: Made clicking on arrow with _OpenOnArrow toggle the open state on the Mouse Down event rather than the Mouse Down+Up sequence (this is rather standard behavior). +- Nav: Fixed interactions with ImGuiListClipper, so e.g. Home/End result would not clip the + landing item on the landing frame. (#787) +- Nav: Fixed currently focused item from ever being clipped by ItemAdd(). (#787) - Scrolling: Fixed scrolling centering API leading to non-integer scrolling values and initial cursor position. This would often get fixed after the fix item submission, but using the ImGuiListClipper as the first thing after Begin() could largely break size calculations. (#3073) diff --git a/imgui.cpp b/imgui.cpp index 984c6676..2d3f3164 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -2227,6 +2227,8 @@ void ImGui::CalcListClipping(int items_count, float items_height, int* out_items ImRect unclipped_rect = window->ClipRect; if (g.NavMoveRequest) unclipped_rect.Add(g.NavScoringRect); + if (g.NavJustMovedToId && window->NavLastIds[0] == g.NavJustMovedToId) + unclipped_rect.Add(ImRect(window->Pos + window->NavRectRel[0].Min, window->Pos + window->NavRectRel[0].Max)); const ImVec2 pos = window->DC.CursorPos; int start = (int)((unclipped_rect.Min.y - pos.y) / items_height); @@ -3142,7 +3144,7 @@ bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; if (!bb.Overlaps(window->ClipRect)) - if (id == 0 || id != g.ActiveId) + if (id == 0 || (id != g.ActiveId && id != g.NavId)) if (clip_even_when_logged || !g.LogEnabled) return true; return false;