Multi-Select: disable MultiSelectAddSetRange() attempt at merging consecutive requests submitted from box-selection.
Essentially reverts79b77d91c,f904a6646cwhich did the initial span merging. Amend and disable change done forf08b33f.
This commit is contained in:
@@ -67,6 +67,11 @@ Other Changes:
|
|||||||
enough to overlap multiple rows during a frame. (#7994, #1861, #6518)
|
enough to overlap multiple rows during a frame. (#7994, #1861, #6518)
|
||||||
- Box-Select: fixed an issue using ImGuiMultiSelectFlags_BoxSelect2d mode in a Table
|
- Box-Select: fixed an issue using ImGuiMultiSelectFlags_BoxSelect2d mode in a Table
|
||||||
while relying on the TableNextColumn() return value to perform coarse clipping. (#7994)
|
while relying on the TableNextColumn() return value to perform coarse clipping. (#7994)
|
||||||
|
- Box-Select: disabled merging consecutive selection requests as we have no reliable
|
||||||
|
way of detecting if user has submitted all consecutives items without clipping gaps,
|
||||||
|
and ImGuiSelectionUserData is technically opaque storage. (#7994, #1861)
|
||||||
|
(we will probably bring this back as a minor optimization if we have a way to for
|
||||||
|
user to tell us ImGuiSelectionUserData are indices)
|
||||||
- Fonts:
|
- Fonts:
|
||||||
- imgui_freetype: add FreeType headers & compiled version in 'About Dear ImGui' details.
|
- imgui_freetype: add FreeType headers & compiled version in 'About Dear ImGui' details.
|
||||||
- Clipper:
|
- Clipper:
|
||||||
|
|||||||
+2
-2
@@ -1915,8 +1915,8 @@ struct IMGUI_API ImGuiMultiSelectTempData
|
|||||||
ImGuiMultiSelectFlags Flags;
|
ImGuiMultiSelectFlags Flags;
|
||||||
ImVec2 ScopeRectMin;
|
ImVec2 ScopeRectMin;
|
||||||
ImVec2 BackupCursorMaxPos;
|
ImVec2 BackupCursorMaxPos;
|
||||||
ImGuiSelectionUserData CurrSubmittedItem; // Copy of last submitted item data, used to merge output ranges.
|
//ImGuiSelectionUserData CurrSubmittedItem; // Copy of last submitted item data, used to merge output ranges.
|
||||||
ImGuiSelectionUserData PrevSubmittedItem; // Copy of previous submitted item data, used to merge output ranges.
|
//ImGuiSelectionUserData PrevSubmittedItem; // Copy of previous submitted item data, used to merge output ranges.
|
||||||
ImGuiID BoxSelectId;
|
ImGuiID BoxSelectId;
|
||||||
ImGuiKeyChord KeyMods;
|
ImGuiKeyChord KeyMods;
|
||||||
ImS8 LoopRequestSetAll; // -1: no operation, 0: clear all, 1: select all.
|
ImS8 LoopRequestSetAll; // -1: no operation, 0: clear all, 1: select all.
|
||||||
|
|||||||
+8
-3
@@ -8050,7 +8050,7 @@ ImGuiMultiSelectIO* ImGui::BeginMultiSelect(ImGuiMultiSelectFlags flags, int sel
|
|||||||
storage->LastSelectionSize = 0;
|
storage->LastSelectionSize = 0;
|
||||||
}
|
}
|
||||||
ms->LoopRequestSetAll = request_select_all ? 1 : request_clear ? 0 : -1;
|
ms->LoopRequestSetAll = request_select_all ? 1 : request_clear ? 0 : -1;
|
||||||
ms->PrevSubmittedItem = ImGuiSelectionUserData_Invalid;
|
//ms->PrevSubmittedItem = ImGuiSelectionUserData_Invalid;
|
||||||
|
|
||||||
if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection)
|
if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection)
|
||||||
DebugLogMultiSelectRequests("BeginMultiSelect", &ms->IO);
|
DebugLogMultiSelectRequests("BeginMultiSelect", &ms->IO);
|
||||||
@@ -8153,8 +8153,8 @@ void ImGui::SetNextItemSelectionUserData(ImGuiSelectionUserData selection_user_d
|
|||||||
g.NextItemData.ItemFlags |= ImGuiItemFlags_HasSelectionUserData | ImGuiItemFlags_IsMultiSelect;
|
g.NextItemData.ItemFlags |= ImGuiItemFlags_HasSelectionUserData | ImGuiItemFlags_IsMultiSelect;
|
||||||
if (ms->IO.RangeSrcItem == selection_user_data)
|
if (ms->IO.RangeSrcItem == selection_user_data)
|
||||||
ms->RangeSrcPassedBy = true;
|
ms->RangeSrcPassedBy = true;
|
||||||
ms->PrevSubmittedItem = ms->CurrSubmittedItem; // Can't rely on previous g.NextItemData.SelectionUserData because NextItemData is not restored on nested multi-select.
|
//ms->PrevSubmittedItem = ms->CurrSubmittedItem; // Can't rely on previous g.NextItemData.SelectionUserData because NextItemData is not restored on nested multi-select.
|
||||||
ms->CurrSubmittedItem = selection_user_data;
|
//ms->CurrSubmittedItem = selection_user_data;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -8447,6 +8447,10 @@ void ImGui::MultiSelectAddSetAll(ImGuiMultiSelectTempData* ms, bool selected)
|
|||||||
void ImGui::MultiSelectAddSetRange(ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item)
|
void ImGui::MultiSelectAddSetRange(ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item)
|
||||||
{
|
{
|
||||||
// Merge contiguous spans into same request (unless NoRangeSelect is set which guarantees single-item ranges)
|
// Merge contiguous spans into same request (unless NoRangeSelect is set which guarantees single-item ranges)
|
||||||
|
// FIXME-OPT: Disabled on 2026/04/09 as this would break with any form of coarse clipping that we don't know about (e.g. TableNextColumn() return value).
|
||||||
|
// The low-hanging fruit would be to know that ImGuiSelectionUserData are sequential indices, in which case we can trivially compare PrevSubmittedItem + RangeDir == FirstItem.
|
||||||
|
// User can always perform this merge if required.
|
||||||
|
#if 0
|
||||||
if (ms->IO.Requests.Size > 0 && first_item == last_item && (ms->Flags & ImGuiMultiSelectFlags_NoRangeSelect) == 0)
|
if (ms->IO.Requests.Size > 0 && first_item == last_item && (ms->Flags & ImGuiMultiSelectFlags_NoRangeSelect) == 0)
|
||||||
{
|
{
|
||||||
ImGuiSelectionRequest* prev = &ms->IO.Requests.Data[ms->IO.Requests.Size - 1];
|
ImGuiSelectionRequest* prev = &ms->IO.Requests.Data[ms->IO.Requests.Size - 1];
|
||||||
@@ -8456,6 +8460,7 @@ void ImGui::MultiSelectAddSetRange(ImGuiMultiSelectTempData* ms, bool selected,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ImGuiSelectionRequest req = { ImGuiSelectionRequestType_SetRange, selected, (ImS8)range_dir, (range_dir > 0) ? first_item : last_item, (range_dir > 0) ? last_item : first_item };
|
ImGuiSelectionRequest req = { ImGuiSelectionRequestType_SetRange, selected, (ImS8)range_dir, (range_dir > 0) ? first_item : last_item, (range_dir > 0) ? last_item : first_item };
|
||||||
ms->IO.Requests.push_back(req); // Add new request
|
ms->IO.Requests.push_back(req); // Add new request
|
||||||
|
|||||||
Reference in New Issue
Block a user