diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 6952f367eb..a7107fba82 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -688,9 +688,7 @@ Optional FlexFormattingContext::specified_size_suggestion(FlexItem const& float FlexFormattingContext::content_size_suggestion(FlexItem const& item) const { // FIXME: Apply clamps - if (is_row_layout()) - return calculate_min_content_width(item.box); - return calculate_min_content_height(item.box); + return calculate_min_content_main_size(item); } // https://drafts.csswg.org/css-flexbox-1/#transferred-size-suggestion @@ -1463,7 +1461,7 @@ float FlexFormattingContext::calculate_main_min_content_contribution(FlexItem co // the larger of its outer min-content size and outer preferred size if that is not auto, // clamped by its min/max main size. auto outer_min_content_size = [&]() -> float { - auto inner_main_size = is_row_layout() ? calculate_min_content_width(item.box) : calculate_min_content_height(item.box); + auto inner_main_size = calculate_min_content_main_size(item); auto outer_main_size = inner_main_size + item.margins.main_before + item.margins.main_after + item.borders.main_before + item.borders.main_after @@ -1487,7 +1485,7 @@ float FlexFormattingContext::calculate_main_max_content_contribution(FlexItem co { // The main-size max-content contribution of a flex item is the larger of its outer max-content size and outer preferred size if that is not auto, clamped by its min/max main size. auto outer_max_content_size = [&]() -> float { - auto inner_main_size = is_row_layout() ? calculate_max_content_width(item.box) : calculate_max_content_height(item.box); + auto inner_main_size = calculate_max_content_main_size(item); auto outer_main_size = inner_main_size + item.margins.main_before + item.margins.main_after + item.borders.main_before + item.borders.main_after @@ -1508,7 +1506,7 @@ float FlexFormattingContext::calculate_main_max_content_contribution(FlexItem co float FlexFormattingContext::calculate_cross_min_content_contribution(FlexItem const& flex_item) const { - auto inner_cross_size = is_row_layout() ? calculate_min_content_height(flex_item.box) : calculate_min_content_width(flex_item.box); + auto inner_cross_size = calculate_min_content_cross_size(flex_item); auto outer_cross_size = inner_cross_size + flex_item.margins.cross_before + flex_item.margins.cross_after + flex_item.borders.cross_before + flex_item.borders.cross_after @@ -1518,7 +1516,7 @@ float FlexFormattingContext::calculate_cross_min_content_contribution(FlexItem c float FlexFormattingContext::calculate_cross_max_content_contribution(FlexItem const& flex_item) const { - auto inner_cross_size = is_row_layout() ? calculate_max_content_height(flex_item.box) : calculate_max_content_width(flex_item.box); + auto inner_cross_size = calculate_max_content_cross_size(flex_item); auto outer_cross_size = inner_cross_size + flex_item.margins.cross_before + flex_item.margins.cross_after + flex_item.borders.cross_before + flex_item.borders.cross_after @@ -1526,4 +1524,24 @@ float FlexFormattingContext::calculate_cross_max_content_contribution(FlexItem c return outer_cross_size; } +float FlexFormattingContext::calculate_min_content_main_size(FlexItem const& item) const +{ + return is_row_layout() ? calculate_min_content_width(item.box) : calculate_min_content_height(item.box); +} + +float FlexFormattingContext::calculate_max_content_main_size(FlexItem const& item) const +{ + return is_row_layout() ? calculate_max_content_width(item.box) : calculate_max_content_height(item.box); +} + +float FlexFormattingContext::calculate_min_content_cross_size(FlexItem const& item) const +{ + return is_row_layout() ? calculate_min_content_height(item.box) : calculate_min_content_width(item.box); +} + +float FlexFormattingContext::calculate_max_content_cross_size(FlexItem const& item) const +{ + return is_row_layout() ? calculate_max_content_height(item.box) : calculate_max_content_width(item.box); +} + } diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h index 50a365bba2..ecd6708bd7 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h @@ -140,6 +140,11 @@ private: [[nodiscard]] float calculate_main_min_content_contribution(FlexItem const&) const; [[nodiscard]] float calculate_main_max_content_contribution(FlexItem const&) const; + [[nodiscard]] float calculate_min_content_main_size(FlexItem const&) const; + [[nodiscard]] float calculate_max_content_main_size(FlexItem const&) const; + [[nodiscard]] float calculate_min_content_cross_size(FlexItem const&) const; + [[nodiscard]] float calculate_max_content_cross_size(FlexItem const&) const; + CSS::FlexBasisData used_flex_basis_for_item(FlexItem const&) const; FormattingState::NodeState& m_flex_container_state;