diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 8ae7607d628..e563cd0d26b 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -1147,7 +1147,6 @@ void Document::update_layout() } root_formatting_context.run( - *m_layout_root, Layout::LayoutMode::Normal, Layout::AvailableSpace( Layout::AvailableSize::make_definite(viewport_rect.width()), diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp index fa400bf1618..0f93c03abdd 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp @@ -66,7 +66,7 @@ static bool margins_collapse_through(Box const& box, LayoutState& state) return state.get(box).border_box_height() == 0; } -void BlockFormattingContext::run(Box const&, LayoutMode layout_mode, AvailableSpace const& available_space) +void BlockFormattingContext::run(LayoutMode layout_mode, AvailableSpace const& available_space) { if (is(root())) { layout_viewport(layout_mode, available_space); @@ -474,7 +474,6 @@ void BlockFormattingContext::layout_inline_children(BlockContainer const& block_ InlineFormattingContext context(m_state, block_container, block_container_state, *this); context.run( - block_container, layout_mode, available_space); @@ -678,7 +677,7 @@ void BlockFormattingContext::layout_block_level_box(Box const& box, BlockContain if (independent_formatting_context) { // This box establishes a new formatting context. Pass control to it. - independent_formatting_context->run(box, layout_mode, box_state.available_inner_space_or_constraints_from(available_space)); + independent_formatting_context->run(layout_mode, box_state.available_inner_space_or_constraints_from(available_space)); } else { // This box participates in the current block container's flow. if (box.children_are_inline()) { @@ -921,7 +920,7 @@ void BlockFormattingContext::layout_viewport(LayoutMode layout_mode, AvailableSp auto content_height = m_state.get(*svg_root.containing_block()).content_height(); m_state.get_mutable(svg_root).set_content_height(content_height); auto svg_formatting_context = create_independent_formatting_context_if_needed(m_state, svg_root); - svg_formatting_context->run(svg_root, layout_mode, available_space); + svg_formatting_context->run(layout_mode, available_space); } else { if (root().children_are_inline()) layout_inline_children(root(), layout_mode, available_space); diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h index 1e9bc453090..291c2c22859 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h @@ -22,7 +22,7 @@ public: explicit BlockFormattingContext(LayoutState&, BlockContainer const&, FormattingContext* parent); ~BlockFormattingContext(); - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; + virtual void run(LayoutMode, AvailableSpace const&) override; virtual CSSPixels automatic_content_width() const override; virtual CSSPixels automatic_content_height() const override; diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 668aad771cd..1033853c62f 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -47,10 +47,8 @@ CSSPixels FlexFormattingContext::automatic_content_height() const return m_flex_container_state.content_height(); } -void FlexFormattingContext::run(Box const& run_box, LayoutMode, AvailableSpace const& available_space) +void FlexFormattingContext::run(LayoutMode, AvailableSpace const& available_space) { - VERIFY(&run_box == &flex_container()); - // This implements https://www.w3.org/TR/css-flexbox-1/#layout-algorithm // 1. Generate anonymous flex items @@ -1135,7 +1133,7 @@ void FlexFormattingContext::determine_hypothetical_cross_size_of_item(FlexItem& auto available_width = is_row_layout() ? AvailableSize::make_definite(item.main_size.value()) : AvailableSize::make_indefinite(); auto available_height = is_row_layout() ? AvailableSize::make_indefinite() : AvailableSize::make_definite(item.main_size.value()); - independent_formatting_context->run(item.box, LayoutMode::Normal, AvailableSpace(available_width, available_height)); + independent_formatting_context->run(LayoutMode::Normal, AvailableSpace(available_width, available_height)); auto automatic_cross_size = is_row_layout() ? independent_formatting_context->automatic_content_height() : independent_formatting_context->automatic_content_width(); diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h index d0203fa564d..a78e5646671 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.h @@ -18,7 +18,7 @@ public: virtual bool inhibits_floating() const override { return true; } - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; + virtual void run(LayoutMode, AvailableSpace const&) override; virtual CSSPixels automatic_content_width() const override; virtual CSSPixels automatic_content_height() const override; diff --git a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp index a811027560e..011f52cb093 100644 --- a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp @@ -160,7 +160,7 @@ struct ReplacedFormattingContext : public FormattingContext { } virtual CSSPixels automatic_content_width() const override { return 0; } virtual CSSPixels automatic_content_height() const override { return 0; } - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override { } + virtual void run(LayoutMode, AvailableSpace const&) override { } }; // FIXME: This is a hack. Get rid of it. @@ -171,7 +171,7 @@ struct DummyFormattingContext : public FormattingContext { } virtual CSSPixels automatic_content_width() const override { return 0; } virtual CSSPixels automatic_content_height() const override { return 0; } - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override { } + virtual void run(LayoutMode, AvailableSpace const&) override { } }; OwnPtr FormattingContext::create_independent_formatting_context_if_needed(LayoutState& state, Box const& child_box) @@ -225,9 +225,9 @@ OwnPtr FormattingContext::layout_inside(Box const& child_box, auto independent_formatting_context = create_independent_formatting_context_if_needed(m_state, child_box); if (independent_formatting_context) - independent_formatting_context->run(child_box, layout_mode, available_space); + independent_formatting_context->run(layout_mode, available_space); else - run(child_box, layout_mode, available_space); + run(layout_mode, available_space); return independent_formatting_context; } @@ -424,7 +424,7 @@ CSSPixels FormattingContext::compute_table_box_width_inside_table_wrapper(Box co table_box_state.border_right = table_box_computed_values.border_right().width; auto context = make(throwaway_state, *table_box, this); - context->run_until_width_calculation(*table_box, m_state.get(*table_box).available_inner_space_or_constraints_from(available_space)); + context->run_until_width_calculation(m_state.get(*table_box).available_inner_space_or_constraints_from(available_space)); auto table_used_width = throwaway_state.get(*table_box).border_box_width(); return available_space.width.is_definite() ? min(table_used_width, available_width) : table_used_width; @@ -458,7 +458,7 @@ CSSPixels FormattingContext::compute_table_box_height_inside_table_wrapper(Box c LayoutState throwaway_state(&m_state); auto context = create_independent_formatting_context_if_needed(throwaway_state, box); VERIFY(context); - context->run(box, LayoutMode::IntrinsicSizing, m_state.get(box).available_inner_space_or_constraints_from(available_space)); + context->run(LayoutMode::IntrinsicSizing, m_state.get(box).available_inner_space_or_constraints_from(available_space)); Optional table_box; box.for_each_in_subtree_of_type([&](Box const& child_box) { @@ -1460,7 +1460,7 @@ CSSPixels FormattingContext::calculate_min_content_width(Layout::Box const& box) auto available_width = AvailableSize::make_min_content(); auto available_height = AvailableSize::make_indefinite(); - context->run(box, LayoutMode::IntrinsicSizing, AvailableSpace(available_width, available_height)); + context->run(LayoutMode::IntrinsicSizing, AvailableSpace(available_width, available_height)); cache.min_content_width = context->automatic_content_width(); @@ -1498,7 +1498,7 @@ CSSPixels FormattingContext::calculate_max_content_width(Layout::Box const& box) auto available_width = AvailableSize::make_max_content(); auto available_height = AvailableSize::make_indefinite(); - context->run(box, LayoutMode::IntrinsicSizing, AvailableSpace(available_width, available_height)); + context->run(LayoutMode::IntrinsicSizing, AvailableSpace(available_width, available_height)); cache.max_content_width = context->automatic_content_width(); @@ -1542,7 +1542,7 @@ CSSPixels FormattingContext::calculate_min_content_height(Layout::Box const& box context = make(throwaway_state, verify_cast(box), nullptr); } - context->run(box, LayoutMode::IntrinsicSizing, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_min_content())); + context->run(LayoutMode::IntrinsicSizing, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_min_content())); auto min_content_height = context->automatic_content_height(); if (min_content_height.might_be_saturated()) { @@ -1586,7 +1586,7 @@ CSSPixels FormattingContext::calculate_max_content_height(Layout::Box const& box context = make(throwaway_state, verify_cast(box), nullptr); } - context->run(box, LayoutMode::IntrinsicSizing, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_max_content())); + context->run(LayoutMode::IntrinsicSizing, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_max_content())); auto max_content_height = context->automatic_content_height(); diff --git a/Userland/Libraries/LibWeb/Layout/FormattingContext.h b/Userland/Libraries/LibWeb/Layout/FormattingContext.h index c88d3645a85..82e9dad46ae 100644 --- a/Userland/Libraries/LibWeb/Layout/FormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/FormattingContext.h @@ -36,7 +36,7 @@ public: InternalDummy, // Internal hack formatting context for unimplemented things. FIXME: Get rid of this. }; - virtual void run(Box const&, LayoutMode, AvailableSpace const&) = 0; + virtual void run(LayoutMode, AvailableSpace const&) = 0; // This function returns the automatic content height of the context's root box. virtual CSSPixels automatic_content_width() const = 0; diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp index d90a6bb9a54..abfcc5041ae 100644 --- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -1771,7 +1771,7 @@ CSSPixelRect GridFormattingContext::get_grid_area_rect(GridItem const& grid_item return { x_start, y_start, x_end - x_start, y_end - y_start }; } -void GridFormattingContext::run(Box const&, LayoutMode, AvailableSpace const& available_space) +void GridFormattingContext::run(LayoutMode, AvailableSpace const& available_space) { m_available_space = available_space; diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h index c0ac693522f..6977e60282f 100644 --- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h @@ -106,7 +106,7 @@ public: virtual bool inhibits_floating() const override { return true; } - virtual void run(Box const&, LayoutMode, AvailableSpace const& available_space) override; + virtual void run(LayoutMode, AvailableSpace const& available_space) override; virtual CSSPixels automatic_content_width() const override; virtual CSSPixels automatic_content_height() const override; diff --git a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp index bf8777be189..97909cc18b4 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp @@ -77,7 +77,7 @@ CSSPixels InlineFormattingContext::automatic_content_height() const return m_automatic_content_height; } -void InlineFormattingContext::run(Box const&, LayoutMode layout_mode, AvailableSpace const& available_space) +void InlineFormattingContext::run(LayoutMode layout_mode, AvailableSpace const& available_space) { VERIFY(containing_block().children_are_inline()); m_available_space = available_space; diff --git a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.h b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.h index c1a115307e5..f7e40f53599 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.h @@ -23,7 +23,7 @@ public: BlockContainer const& containing_block() const { return static_cast(context_box()); } - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; + virtual void run(LayoutMode, AvailableSpace const&) override; virtual CSSPixels automatic_content_height() const override; virtual CSSPixels automatic_content_width() const override; diff --git a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp index 78962a9699b..b991cd82af7 100644 --- a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp @@ -171,13 +171,13 @@ static bool is_container_element(Node const& node) return false; } -void SVGFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& available_space) +void SVGFormattingContext::run(LayoutMode, AvailableSpace const& available_space) { // NOTE: SVG doesn't have a "formatting context" in the spec, but this is the most // obvious way to drive SVG layout in our engine at the moment. - auto& svg_viewport = dynamic_cast(*box.dom_node()); - auto& svg_box_state = m_state.get_mutable(box); + auto& svg_viewport = dynamic_cast(*context_box().dom_node()); + auto& svg_box_state = m_state.get_mutable(context_box()); // NOTE: We consider all SVG root elements to have definite size in both axes. // I'm not sure if this is good or bad, but our viewport transform logic depends on it. @@ -254,7 +254,7 @@ void SVGFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& m_svg_offset = svg_box_state.offset; m_viewport_size = { viewport_width, viewport_height }; - box.for_each_child_of_type([&](Box const& child) { + context_box().for_each_child_of_type([&](Box const& child) { layout_svg_element(child); return IterationDecision::Continue; }); @@ -266,7 +266,7 @@ void SVGFormattingContext::layout_svg_element(Box const& child) layout_nested_viewport(child); } else if (is(child.dom_node()) && is(child)) { Layout::BlockFormattingContext bfc(m_state, static_cast(child), this); - bfc.run(child, LayoutMode::Normal, *m_available_space); + bfc.run(LayoutMode::Normal, *m_available_space); auto& child_state = m_state.get_mutable(child); child_state.set_content_offset(child_state.offset.translated(m_svg_offset)); child.for_each_child_of_type([&](SVGMaskBox const& child) { @@ -301,7 +301,7 @@ void SVGFormattingContext::layout_nested_viewport(Box const& viewport) nested_viewport_state.set_content_height(nested_viewport_height); nested_viewport_state.set_has_definite_width(true); nested_viewport_state.set_has_definite_height(true); - nested_context.run(static_cast(viewport), LayoutMode::Normal, *m_available_space); + nested_context.run(LayoutMode::Normal, *m_available_space); } Gfx::Path SVGFormattingContext::compute_path_for_text(SVGTextBox const& text_box) @@ -459,7 +459,7 @@ void SVGFormattingContext::layout_mask_or_clip(SVGBox const& mask_or_clip) SVGFormattingContext nested_context(m_state, mask_or_clip, this, parent_viewbox_transform); layout_state.set_has_definite_width(true); layout_state.set_has_definite_height(true); - nested_context.run(static_cast(mask_or_clip), LayoutMode::Normal, *m_available_space); + nested_context.run(LayoutMode::Normal, *m_available_space); } void SVGFormattingContext::layout_container_element(SVGBox const& container) diff --git a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.h b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.h index 29a07c3f07f..051870ecbbb 100644 --- a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.h @@ -21,7 +21,7 @@ public: explicit SVGFormattingContext(LayoutState&, Box const&, FormattingContext* parent, Gfx::AffineTransform parent_viewbox_transform = {}); ~SVGFormattingContext(); - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; + virtual void run(LayoutMode, AvailableSpace const&) override; virtual CSSPixels automatic_content_width() const override; virtual CSSPixels automatic_content_height() const override; diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp index 6a94acc195a..007c2948116 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp @@ -41,7 +41,7 @@ CSSPixels TableFormattingContext::run_caption_layout(LayoutMode layout_mode, CSS // The caption boxes are principal block-level boxes that retain their own content, padding, margin, and border areas, // and are rendered as normal block boxes inside the table wrapper box, as described in https://www.w3.org/TR/CSS22/tables.html#model auto caption_context = make(m_state, *verify_cast(child), this); - caption_context->run(table_box(), layout_mode, *m_available_space); + caption_context->run(layout_mode, *m_available_space); VERIFY(child->is_box()); auto const& child_box = static_cast(*child); // FIXME: Since caption only has inline children, BlockFormattingContext doesn't resolve the vertical metrics. @@ -1581,12 +1581,12 @@ void TableFormattingContext::finish_grid_initialization(TableGrid const& table_g } } -void TableFormattingContext::run_until_width_calculation(Box const& box, AvailableSpace const& available_space) +void TableFormattingContext::run_until_width_calculation(AvailableSpace const& available_space) { m_available_space = available_space; // Determine the number of rows/columns the table requires. - finish_grid_initialization(TableGrid::calculate_row_column_grid(box, m_cells, m_rows)); + finish_grid_initialization(TableGrid::calculate_row_column_grid(context_box(), m_cells, m_rows)); border_conflict_resolution(); @@ -1607,13 +1607,13 @@ void TableFormattingContext::run_until_width_calculation(Box const& box, Availab compute_table_width(); } -void TableFormattingContext::run(Box const& box, LayoutMode layout_mode, AvailableSpace const& available_space) +void TableFormattingContext::run(LayoutMode layout_mode, AvailableSpace const& available_space) { m_available_space = available_space; auto total_captions_height = run_caption_layout(layout_mode, CSS::CaptionSide::Top); - run_until_width_calculation(box, available_space); + run_until_width_calculation(available_space); if (available_space.width.is_intrinsic_sizing_constraint() && !available_space.height.is_intrinsic_sizing_constraint()) { return; diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h index d0a1d7d5c81..6c01d6f86aa 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h @@ -23,9 +23,9 @@ public: explicit TableFormattingContext(LayoutState&, Box const&, FormattingContext* parent); ~TableFormattingContext(); - void run_until_width_calculation(Box const&, AvailableSpace const& available_space); + void run_until_width_calculation(AvailableSpace const& available_space); - virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; + virtual void run(LayoutMode, AvailableSpace const&) override; virtual CSSPixels automatic_content_width() const override; virtual CSSPixels automatic_content_height() const override;