Fix infinite loop in flexbox algorithm: Only apply step c if sum of scaled flexible shrink factors > 0

This commit is contained in:
Nico Burns 2023-06-08 23:06:22 +01:00
parent 0a70b27625
commit acfe27a0bf

View file

@ -976,6 +976,7 @@ impl FlexLine<'_> {
let scaled_shrink_factors_sum: Length = unfrozen_items() let scaled_shrink_factors_sum: Length = unfrozen_items()
.map(|(item, _)| scaled_shrink_factor(item)) .map(|(item, _)| scaled_shrink_factor(item))
.sum(); .sum();
if scaled_shrink_factors_sum > Length::zero() {
for (item, target_main_size) in unfrozen_items() { for (item, target_main_size) in unfrozen_items() {
let ratio = scaled_shrink_factor(item) / scaled_shrink_factors_sum; let ratio = scaled_shrink_factor(item) / scaled_shrink_factors_sum;
target_main_size target_main_size
@ -983,6 +984,7 @@ impl FlexLine<'_> {
} }
} }
} }
}
// “Fix min/max violations.” // “Fix min/max violations.”
let violation = |(item, target_main_size): (&FlexItem, &Cell<Length>)| { let violation = |(item, target_main_size): (&FlexItem, &Cell<Length>)| {