diff options
author | Oriol Brufau <obrufau@igalia.com> | 2024-12-02 23:14:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-02 22:14:54 +0000 |
commit | ad448da7de46f9f21cf7dc60f8c3cb5293f4d491 (patch) | |
tree | 17eb0c27a319d0aaa19f17fdc6215f16b532a5f7 /components/layout_2020/flexbox | |
parent | e146417b42bfcb8e5f0ea2d50277d734ad6ef6f1 (diff) | |
download | servo-ad448da7de46f9f21cf7dc60f8c3cb5293f4d491.tar.gz servo-ad448da7de46f9f21cf7dc60f8c3cb5293f4d491.zip |
Obey min and max properties when computing main size of column flex (#34450)
When laying out a column flex container with an auto preferred main size,
we were resolving the used main size to the intrinsic max-content size.
However, we weren't clamping this amount between the min and max sizes.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/layout_2020/flexbox')
-rw-r--r-- | components/layout_2020/flexbox/layout.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/components/layout_2020/flexbox/layout.rs b/components/layout_2020/flexbox/layout.rs index f3d3da2347a..e40ba219d55 100644 --- a/components/layout_2020/flexbox/layout.rs +++ b/components/layout_2020/flexbox/layout.rs @@ -636,8 +636,8 @@ impl FlexContainer { containing_block: &ContainingBlock, containing_block_for_container: &ContainingBlock, ) -> IndependentLayout { - let (container_min_cross_size, container_max_cross_size, depends_on_block_constraints) = - self.available_cross_space_for_flex_items(containing_block_for_container); + let (container_min_size, container_max_size, depends_on_block_constraints) = + self.available_space_for_flex_items(containing_block_for_container); let depends_on_block_constraints = depends_on_block_constraints || self.config.flex_direction == FlexDirection::Column; @@ -647,8 +647,8 @@ impl FlexContainer { layout_context, positioning_context, containing_block, - container_min_cross_size, - container_max_cross_size, + container_min_cross_size: container_min_size.cross, + container_max_cross_size: container_max_size.cross, // https://drafts.csswg.org/css-flexbox/#definite-sizes container_definite_inner_size: self.config.flex_axis.vec2_to_flex_relative( LogicalVec2 { @@ -666,6 +666,7 @@ impl FlexContainer { self.main_content_sizes(layout_context, &containing_block.into(), || &flex_context) .sizes .max_content + .clamp_between_extremums(container_min_size.main, container_max_size.main) }), }; @@ -1034,10 +1035,10 @@ impl FlexContainer { Fragment::AbsoluteOrFixedPositioned(hoisted_fragment) } - fn available_cross_space_for_flex_items( + fn available_space_for_flex_items( &self, containing_block_for_container: &ContainingBlock, - ) -> (Au, Option<Au>, bool) { + ) -> (FlexRelativeVec2<Au>, FlexRelativeVec2<Option<Au>>, bool) { let sizes: ContentBoxSizesAndPBMDeprecated = self .style .content_box_sizes_and_padding_border_margin(&containing_block_for_container.into()) @@ -1053,8 +1054,8 @@ impl FlexContainer { .vec2_to_flex_relative(sizes.content_min_box_size.auto_is(Au::zero)); ( - min_box_size.cross, - max_box_size.cross, + min_box_size, + max_box_size, sizes.depends_on_block_constraints, ) } |