From a640698123fe2716f8d1f910a3acf6f6b12de17e Mon Sep 17 00:00:00 2001 From: nyorain Date: Mon, 21 Dec 2020 15:52:02 +0100 Subject: [PATCH] Clipper: Fixed incorrect end-list positioning when using ImGuiListClipper with 1 item (bug in 1.79). (#3663) --- docs/CHANGELOG.txt | 1 + imgui.cpp | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 481d0f773..9116ef674 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -80,6 +80,7 @@ Other Changes: - Drag and Drop: Fix drag and drop to tie same-size drop targets by choosen the later one. Fixes dragging into a full-window-sized dockspace inside a zero-padded window. (#3519, #2717) [@Black-Cat] - Checkbox: Added CheckboxFlags() helper with int* type. +- Clipper: Fixed incorrect end-list positioning when using ImGuiListClipper with 1 item (bug in 1.79). (#3663) [@nyorain] - InputText: Fixed updating cursor/selection position when a callback altered the buffer in a way where the byte count is unchanged but the decoded character count changes. (#3587) [@gqw] - InputText: Fixed swiching from single to multi-line while preserving same ID. diff --git a/imgui.cpp b/imgui.cpp index 322a51623..f2d568454 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -2266,8 +2266,8 @@ bool ImGuiListClipper::Step() if (table && table->IsInsideRow) ImGui::TableEndRow(table); - // Reached end of list - if (DisplayEnd >= ItemsCount || GetSkipItemForListClipping()) + // No items + if (ItemsCount == 0 || GetSkipItemForListClipping()) { End(); return false; @@ -2320,6 +2320,13 @@ bool ImGuiListClipper::Step() StepNo = 2; } + // Reached end of list + if (DisplayEnd >= ItemsCount) + { + End(); + return false; + } + // Step 2: calculate the actual range of elements to display, and position the cursor before the first element if (StepNo == 2) {