diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 994a7b1419..2d8011d1c6 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -27,19 +27,19 @@ template return ::max(min, ::min(value, max)); } -static float get_pixel_width(LayoutState const& state, Box const& box, Optional const& length_percentage) +float FlexFormattingContext::get_pixel_width(Box const& box, Optional const& length_percentage) const { if (!length_percentage.has_value()) return 0; - auto inner_width = CSS::Length::make_px(state.get(*box.containing_block()).content_width()); + auto inner_width = CSS::Length::make_px(containing_block_width_for(box)); return length_percentage->resolved(box, inner_width).to_px(box); } -static float get_pixel_height(LayoutState const& state, Box const& box, Optional const& length_percentage) +float FlexFormattingContext::get_pixel_height(Box const& box, Optional const& length_percentage) const { if (!length_percentage.has_value()) return 0; - auto inner_height = CSS::Length::make_px(state.get(*box.containing_block()).content_height()); + auto inner_height = CSS::Length::make_px(containing_block_height_for(box)); return length_percentage->resolved(box, inner_height).to_px(box); } @@ -339,7 +339,8 @@ float FlexFormattingContext::resolved_definite_cross_size(Box const& box) const return specified_cross_size(flex_container()); if (cross_value.is_length()) return specified_cross_size(box); - return cross_value.resolved(box, CSS::Length::make_px(specified_cross_size(flex_container()))).to_px(box); + auto containing_block_size = !is_row_layout() ? containing_block_width_for(box) : containing_block_height_for(box); + return cross_value.resolved(box, CSS::Length::make_px(containing_block_size)).to_px(box); } float FlexFormattingContext::resolved_definite_main_size(Box const& box) const @@ -349,7 +350,8 @@ float FlexFormattingContext::resolved_definite_main_size(Box const& box) const return specified_main_size(flex_container()); if (main_value.is_length()) return specified_main_size(box); - return main_value.resolved(box, CSS::Length::make_px(specified_main_size(flex_container()))).to_px(box); + auto containing_block_size = is_row_layout() ? containing_block_width_for(box) : containing_block_height_for(box); + return main_value.resolved(box, CSS::Length::make_px(containing_block_size)).to_px(box); } bool FlexFormattingContext::has_main_min_size(Box const& box) const @@ -380,15 +382,15 @@ float FlexFormattingContext::specified_main_size_of_child_box(Box const& child_b float FlexFormattingContext::specified_main_min_size(Box const& box) const { return is_row_layout() - ? get_pixel_width(m_state, box, box.computed_values().min_width()) - : get_pixel_height(m_state, box, box.computed_values().min_height()); + ? get_pixel_width(box, box.computed_values().min_width()) + : get_pixel_height(box, box.computed_values().min_height()); } float FlexFormattingContext::specified_cross_min_size(Box const& box) const { return is_row_layout() - ? get_pixel_height(m_state, box, box.computed_values().min_height()) - : get_pixel_width(m_state, box, box.computed_values().min_width()); + ? get_pixel_height(box, box.computed_values().min_height()) + : get_pixel_width(box, box.computed_values().min_width()); } bool FlexFormattingContext::has_main_max_size(Box const& box) const @@ -406,15 +408,15 @@ bool FlexFormattingContext::has_cross_max_size(Box const& box) const float FlexFormattingContext::specified_main_max_size(Box const& box) const { return is_row_layout() - ? get_pixel_width(m_state, box, box.computed_values().max_width()) - : get_pixel_height(m_state, box, box.computed_values().max_height()); + ? get_pixel_width(box, box.computed_values().max_width()) + : get_pixel_height(box, box.computed_values().max_height()); } float FlexFormattingContext::specified_cross_max_size(Box const& box) const { return is_row_layout() - ? get_pixel_height(m_state, box, box.computed_values().max_height()) - : get_pixel_width(m_state, box, box.computed_values().max_width()); + ? get_pixel_height(box, box.computed_values().max_height()) + : get_pixel_width(box, box.computed_values().max_width()); } float FlexFormattingContext::calculated_main_size(Box const& box) const @@ -659,8 +661,8 @@ void FlexFormattingContext::determine_flex_base_size_and_hypothetical_main_size( // A. If the item has a definite used flex basis, that’s the flex base size. if (flex_item.used_flex_basis_is_definite) { if (is_row_layout()) - return get_pixel_width(m_state, child_box, flex_item.used_flex_basis.length_percentage.value()); - return get_pixel_height(m_state, child_box, flex_item.used_flex_basis.length_percentage.value()); + return get_pixel_width(child_box, flex_item.used_flex_basis.length_percentage.value()); + return get_pixel_height(child_box, flex_item.used_flex_basis.length_percentage.value()); } // B. If the flex item has ... diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h index d40645a56c..247fce83a5 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h @@ -106,6 +106,9 @@ private: Optional transferred_size_suggestion(FlexItem const&) const; float content_size_suggestion(FlexItem const&) const; + float get_pixel_width(Box const& box, Optional const& length_percentage) const; + float get_pixel_height(Box const& box, Optional const& length_percentage) const; + bool flex_item_is_stretched(FlexItem const&) const; void set_main_size(Box const&, float size);