Clipper: fixed invalid state when number of frozen table row is smaller than ItemCount.

+ Bonus rather unorthodox coding style.
docking
ocornut 3 years ago
parent 027a7ba3eb
commit 926addbfe2

@ -74,6 +74,7 @@ Other Changes:
(an additional ItemSpacing.y was declared, affecting scrollbar range). (an additional ItemSpacing.y was declared, affecting scrollbar range).
- Clipper: various and incomplete changes to tame down scrolling and precision issues on very large ranges. - Clipper: various and incomplete changes to tame down scrolling and precision issues on very large ranges.
Passing an explicit height to the clipper now allows larger ranges. (#3609, #3962). Passing an explicit height to the clipper now allows larger ranges. (#3609, #3962).
- Clipper: fixed invalid state when number of frozen table row is smaller than ItemCount.
- Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceAllowNullID doesn't lose - Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceAllowNullID doesn't lose
tooltip when scrolling. (#143) tooltip when scrolling. (#143)
- Metrics: Added a node showing windows in submission order and showing the Begin() stack. - Metrics: Added a node showing windows in submission order and showing the Begin() stack.

@ -2435,10 +2435,7 @@ bool ImGuiListClipper::Step()
// No items // No items
if (ItemsCount == 0 || GetSkipItemForListClipping()) if (ItemsCount == 0 || GetSkipItemForListClipping())
{ return (void)End(), false;
End();
return false;
}
// While we are in frozen row state, keep displaying items one by one, unclipped // While we are in frozen row state, keep displaying items one by one, unclipped
// FIXME: Could be stored as a table-agnostic state. // FIXME: Could be stored as a table-agnostic state.
@ -2446,6 +2443,8 @@ bool ImGuiListClipper::Step()
{ {
DisplayStart = data->ItemsFrozen; DisplayStart = data->ItemsFrozen;
DisplayEnd = data->ItemsFrozen + 1; DisplayEnd = data->ItemsFrozen + 1;
if (DisplayStart >= ItemsCount)
return (void)End(), false;
data->ItemsFrozen++; data->ItemsFrozen++;
return true; return true;
} }
@ -2461,6 +2460,8 @@ bool ImGuiListClipper::Step()
data->Ranges.push_front(ImGuiListClipperRange::FromIndices(data->ItemsFrozen, data->ItemsFrozen + 1)); data->Ranges.push_front(ImGuiListClipperRange::FromIndices(data->ItemsFrozen, data->ItemsFrozen + 1));
DisplayStart = ImMax(data->Ranges[0].Min, data->ItemsFrozen); DisplayStart = ImMax(data->Ranges[0].Min, data->ItemsFrozen);
DisplayEnd = ImMin(data->Ranges[0].Max, ItemsCount); DisplayEnd = ImMin(data->Ranges[0].Max, ItemsCount);
if (DisplayStart == DisplayEnd)
return (void)End(), false;
data->StepNo = 1; data->StepNo = 1;
return true; return true;
} }

Loading…
Cancel
Save