| 8535 | } |
| 8536 | |
| 8537 | void ImGui::MultiSelectAddSetRange(ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item) |
| 8538 | { |
| 8539 | // Merge contiguous spans into same request (unless NoRangeSelect is set which guarantees single-item ranges) |
| 8540 | // 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). |
| 8541 | // The low-hanging fruit would be to know that ImGuiSelectionUserData are sequential indices, in which case we can trivially compare PrevSubmittedItem + RangeDir == FirstItem. |
| 8542 | // User can always perform this merge if required. |
| 8543 | #if 0 |
| 8544 | if (ms->IO.Requests.Size > 0 && first_item == last_item && (ms->Flags & ImGuiMultiSelectFlags_NoRangeSelect) == 0) |
| 8545 | { |
| 8546 | ImGuiSelectionRequest* prev = &ms->IO.Requests.Data[ms->IO.Requests.Size - 1]; |
| 8547 | if (prev->Type == ImGuiSelectionRequestType_SetRange && prev->RangeLastItem == ms->PrevSubmittedItem && prev->Selected == selected) |
| 8548 | { |
| 8549 | prev->RangeLastItem = last_item; |
| 8550 | return; |
| 8551 | } |
| 8552 | } |
| 8553 | #endif |
| 8554 | |
| 8555 | ImGuiSelectionRequest req = { ImGuiSelectionRequestType_SetRange, selected, (ImS8)range_dir, (range_dir > 0) ? first_item : last_item, (range_dir > 0) ? last_item : first_item }; |
| 8556 | ms->IO.Requests.push_back(req); // Add new request |
| 8557 | } |
| 8558 | |
| 8559 | void ImGui::DebugNodeMultiSelectState(ImGuiMultiSelectState* storage) |
| 8560 | { |