From c0b693b1d494cd4746f1b18221c58d76a76c46a0 Mon Sep 17 00:00:00 2001 From: ocornut Date: Tue, 28 Apr 2026 15:56:50 +0200 Subject: [PATCH] MultiSelect: Box-Select + Tables: fixed when using SpanAllColumns paths. (#9383, #7994) Amend d1a8995 which didn't fix the thing it claimed to fix, as my naive last minute refactor broke it. --- imgui_widgets.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index d05857d3c..5f8749cad 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -8376,16 +8376,19 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed) // However we account for ClipRect being larger than current column (e.g. when using SpanAllColumns) // A more generic version would be nice, but window->WorkRect.Min/Max exclude CellPadding. (#7994, #9383) ImGuiTableColumn* column = &table->Columns[table->CurrentColumn]; - item_rect.Min.x = ImMax(item_rect.Min.x, column->MinX); - item_rect.Max.x = ImMin(item_rect.Max.x, column->MaxX); float clip_min_x = (g.LastItemData.ItemFlags & ImGuiItemStatusFlags_HasClipRect) ? g.LastItemData.ClipRect.Min.x : window->ClipRect.Min.x; float clip_max_x = (g.LastItemData.ItemFlags & ImGuiItemStatusFlags_HasClipRect) ? g.LastItemData.ClipRect.Max.x : window->ClipRect.Max.x; if (clip_min_x != clip_max_x) // When zero sized we expect that bounds have been clamped and thus are unreliable { - item_rect.Min.x = ImMax(item_rect.Min.x, clip_min_x); - item_rect.Max.x = ImMin(item_rect.Max.x, clip_max_x); + item_rect.Min.x = ImMax(item_rect.Min.x, ImMin(column->MinX, clip_min_x)); + item_rect.Max.x = ImMin(item_rect.Max.x, ImMax(column->MaxX, clip_max_x)); } - + else + { + item_rect.Min.x = ImMax(item_rect.Min.x, column->MinX); + item_rect.Max.x = ImMin(item_rect.Max.x, column->MaxX); + } + //GetForegroundDrawList()->AddRect(item_rect.Min, item_rect.Max, IM_COL32(255, 0, 255, 255)); } const bool rect_overlap_curr = bs->BoxSelectRectCurr.Overlaps(item_rect); const bool rect_overlap_prev = bs->BoxSelectRectPrev.Overlaps(item_rect);