|
|
@ -7537,17 +7537,22 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed) |
|
|
|
const bool rect_overlap_curr = bs->BoxSelectRectCurr.Overlaps(g.LastItemData.Rect); |
|
|
|
const bool rect_overlap_curr = bs->BoxSelectRectCurr.Overlaps(g.LastItemData.Rect); |
|
|
|
const bool rect_overlap_prev = bs->BoxSelectRectPrev.Overlaps(g.LastItemData.Rect); |
|
|
|
const bool rect_overlap_prev = bs->BoxSelectRectPrev.Overlaps(g.LastItemData.Rect); |
|
|
|
if ((rect_overlap_curr && !rect_overlap_prev && !selected) || (rect_overlap_prev && !rect_overlap_curr)) |
|
|
|
if ((rect_overlap_curr && !rect_overlap_prev && !selected) || (rect_overlap_prev && !rect_overlap_curr)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (storage->LastSelectionSize <= 0 && bs->IsStartedFromVoid) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
pressed = true; // First item act as a pressed: code below will emit selection request and set NavId (whatever we emit here will be overridden anyway)
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
selected = !selected; |
|
|
|
selected = !selected; |
|
|
|
ImGuiSelectionRequest req = { ImGuiSelectionRequestType_SetRange, selected, item_data, item_data }; |
|
|
|
ImGuiSelectionRequest req = { ImGuiSelectionRequestType_SetRange, selected, item_data, item_data }; |
|
|
|
ImGuiSelectionRequest* prev_req = (ms->IO.Requests.Size > 0) ? &ms->IO.Requests.Data[ms->IO.Requests.Size - 1] : NULL; |
|
|
|
ImGuiSelectionRequest* prev_req = (ms->IO.Requests.Size > 0) ? &ms->IO.Requests.Data[ms->IO.Requests.Size - 1] : NULL; |
|
|
|
if (storage->LastSelectionSize == 0 && bs->IsStartedFromVoid) |
|
|
|
if (prev_req && prev_req->Type == ImGuiSelectionRequestType_SetRange && prev_req->RangeLastItem == ms->BoxSelectLastitem && prev_req->Selected == selected) |
|
|
|
pressed = true; // First item act as a pressed: code below will emit selection request and set NavId (whatever we emit here will be overriden anyway)
|
|
|
|
|
|
|
|
else if (prev_req && prev_req->Type == ImGuiSelectionRequestType_SetRange && prev_req->RangeLastItem == ms->BoxSelectLastitem && prev_req->Selected == selected) |
|
|
|
|
|
|
|
prev_req->RangeLastItem = item_data; // Merge span into same request
|
|
|
|
prev_req->RangeLastItem = item_data; // Merge span into same request
|
|
|
|
else |
|
|
|
else |
|
|
|
ms->IO.Requests.push_back(req); |
|
|
|
ms->IO.Requests.push_back(req); |
|
|
|
storage->LastSelectionSize++; |
|
|
|
} |
|
|
|
|
|
|
|
storage->LastSelectionSize = ImMax(storage->LastSelectionSize + 1, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
ms->BoxSelectLastitem = item_data; |
|
|
|
ms->BoxSelectLastitem = item_data; |
|
|
|
} |
|
|
|
} |
|
|
|