diff options
author | 2024-09-21 21:14:54 +0200 | |
---|---|---|
committer | 2024-09-21 21:14:54 +0200 | |
commit | 1383c6a4f700ff246148c913000e9b9368ea9afc (patch) | |
tree | 0120c4265a282aef98c0ac3f8723a657d97a3132 /core/src | |
parent | 3a1ed2455099ad785d808d9c36fd6424c178e991 (diff) | |
download | iced-1383c6a4f700ff246148c913000e9b9368ea9afc.tar.gz iced-1383c6a4f700ff246148c913000e9b9368ea9afc.tar.bz2 iced-1383c6a4f700ff246148c913000e9b9368ea9afc.zip |
Fix flex layout of `Fill` elements in a `Shrink` cross axis
Instead of collapsing, the `Fill` elements will fill the
cross space allocated by the other `Shrink` elements present
in the container.
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/layout/flex.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/core/src/layout/flex.rs b/core/src/layout/flex.rs index dcb4d8de..ac80d393 100644 --- a/core/src/layout/flex.rs +++ b/core/src/layout/flex.rs @@ -79,10 +79,10 @@ where let max_cross = axis.cross(limits.max()); let mut fill_main_sum = 0; - let mut cross = match axis { - Axis::Vertical if width == Length::Shrink => 0.0, - Axis::Horizontal if height == Length::Shrink => 0.0, - _ => max_cross, + let (mut cross, cross_compress) = match axis { + Axis::Vertical if width == Length::Shrink => (0.0, true), + Axis::Horizontal if height == Length::Shrink => (0.0, true), + _ => (max_cross, false), }; let mut available = axis.main(limits.max()) - total_spacing; @@ -97,7 +97,8 @@ where axis.pack(size.width.fill_factor(), size.height.fill_factor()) }; - if fill_main_factor == 0 { + if fill_main_factor == 0 && (!cross_compress || fill_cross_factor == 0) + { let (max_width, max_height) = axis.pack( available, if fill_cross_factor == 0 { @@ -141,7 +142,7 @@ where axis.pack(size.width.fill_factor(), size.height.fill_factor()) }; - if fill_main_factor != 0 { + if fill_main_factor != 0 || (cross_compress && fill_cross_factor != 0) { let max_main = remaining * fill_main_factor as f32 / fill_main_sum as f32; |