From 3fb3a7b92b05a739792ff306aafccb38585b3225 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 18 Feb 2023 19:40:24 +0100 Subject: [PATCH] Fix sizing bug The available space was updated while removing elements, but the check for the next element expected the old value. --- src/widgets/join.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/widgets/join.rs b/src/widgets/join.rs index ebd2733..9b3d397 100644 --- a/src/widgets/join.rs +++ b/src/widgets/join.rs @@ -105,23 +105,23 @@ fn grow(segments: &mut [Segment], mut available: u16) { total_weight = segments.len() as f32; } - let mut changed = false; + let mut removed = 0; segments.retain(|s| { let allotment = s.weight / total_weight * available as f32; if (s.size as f32) < allotment { return true; // May need to grow } - available -= s.size; - changed = true; + removed += s.size; false }); + available -= removed; // If all segments were at least as large as their allotments, we would // be trying to shrink, not grow them. Hence, there must be at least one // segment that is smaller than its allotment. assert!(!segments.is_empty()); - if !changed { + if removed == 0 { break; // All remaining segments are smaller than their allotments } }