at (8,8) content-size 0x0 children: not-inline
TableCellBox <(anonymous)> at (8,8) content-size 0x0 [BFC] children: not-inline
BlockContainer at (9,9) content-size 0x0 positioned [BFC] children: not-inline
diff --git a/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-presentational-hints.txt b/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-presentational-hints.txt
index 3f7f4e8b36..7819565726 100644
--- a/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-presentational-hints.txt
+++ b/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-presentational-hints.txt
@@ -3,7 +3,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer at (10,10) content-size 780x102 children: not-inline
TableWrapper <(anonymous)> at (10,10) content-size 102x102 [BFC] children: not-inline
Box at (11,11) content-size 100x100 [TFC] children: not-inline
- TableRowGroupBox at (11,11) content-size 100x100 children: not-inline
+ Box at (11,11) content-size 100x100 children: not-inline
TableRowBox at (11,11) content-size 100x100 children: not-inline
TableCellBox at (13,49.082031) content-size 96x23.835937 [BFC] children: not-inline
BlockContainer <(anonymous)> at (14,50.082031) content-size 94x21.835937 children: inline
diff --git a/Tests/LibWeb/Layout/expected/table/basic.txt b/Tests/LibWeb/Layout/expected/table/basic.txt
index f6e6fb2293..df073da5f6 100644
--- a/Tests/LibWeb/Layout/expected/table/basic.txt
+++ b/Tests/LibWeb/Layout/expected/table/basic.txt
@@ -14,7 +14,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (8,8) content-size 95.171875x19.46875 children: not-inline
+ Box at (8,8) content-size 95.171875x19.46875 children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
TableRowBox at (8,8) content-size 95.171875x19.46875 children: not-inline
@@ -31,7 +31,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox | at (8,27.46875) content-size 95.171875x19.46875 children: not-inline
+ Box at (8,27.46875) content-size 95.171875x19.46875 children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
TableRowBox at (8,27.46875) content-size 95.171875x19.46875 children: not-inline
@@ -48,7 +48,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (8,46.9375) content-size 95.171875x19.46875 children: not-inline
+ Box at (8,46.9375) content-size 95.171875x19.46875 children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
TableRowBox at (8,46.9375) content-size 95.171875x19.46875 children: not-inline
diff --git a/Tests/LibWeb/Layout/expected/table/borders.txt b/Tests/LibWeb/Layout/expected/table/borders.txt
index 92461e72e8..18fd47f638 100644
--- a/Tests/LibWeb/Layout/expected/table/borders.txt
+++ b/Tests/LibWeb/Layout/expected/table/borders.txt
@@ -5,7 +5,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
Box at (9,9) content-size 164.296875x64.40625 [TFC] children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (9,9) content-size 166.296875x64.40625 children: not-inline
+ Box at (9,9) content-size 166.296875x64.40625 children: not-inline
TableRowBox at (9,9) content-size 166.296875x21.46875 children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
@@ -70,7 +70,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
Box at (8,74.40625) content-size 164.296875x62.40625 [TFC] children: not-inline
BlockContainer <(anonymous)> at (8,74.40625) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (8,74.40625) content-size 164.296875x62.40625 children: not-inline
+ Box at (8,74.40625) content-size 164.296875x62.40625 children: not-inline
TableRowBox at (8,74.40625) content-size 164.296875x20.46875 children: not-inline
BlockContainer <(anonymous)> at (8,74.40625) content-size 0x0 children: inline
TextNode <#text>
diff --git a/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt b/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt
index 07b71f65c7..dcc22a7825 100644
--- a/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt
+++ b/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt
@@ -5,7 +5,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
Box at (9,9) content-size 780x90.21875 [TFC] children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (9,9) content-size 780x90.21875 children: not-inline
+ Box at (9,9) content-size 780x90.21875 children: not-inline
TableRowBox at (9,9) content-size 780x90.21875 children: not-inline
TableCellBox at (10,29.109375) content-size 50x50 [BFC] children: not-inline
BlockContainer at (10,29.109375) content-size 50x50 children: not-inline
diff --git a/Tests/LibWeb/Layout/expected/table/inline-table-width.txt b/Tests/LibWeb/Layout/expected/table/inline-table-width.txt
index 042f2d7384..7619e88a3a 100644
--- a/Tests/LibWeb/Layout/expected/table/inline-table-width.txt
+++ b/Tests/LibWeb/Layout/expected/table/inline-table-width.txt
@@ -6,7 +6,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer at (9,9) content-size 129.984375x38.9375 inline-block [BFC] children: not-inline
TableWrapper <(anonymous)> at (9,9) content-size 129.984375x38.9375 inline-block [BFC] children: not-inline
Box <(anonymous)> at (9,9) content-size 129.984375x38.9375 inline-table [TFC] children: not-inline
- TableRowGroupBox at (9,9) content-size 129.984375x38.9375 children: not-inline
+ Box at (9,9) content-size 129.984375x38.9375 children: not-inline
TableRowBox at (9,9) content-size 129.984375x19.46875 children: not-inline
TableCellBox at (10,10) content-size 87.90625x17.46875 [BFC] children: inline
line 0 width: 15.734375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
diff --git a/Tests/LibWeb/Layout/expected/table/rowspan.txt b/Tests/LibWeb/Layout/expected/table/rowspan.txt
index 0d725c00c3..d258eb6d92 100644
--- a/Tests/LibWeb/Layout/expected/table/rowspan.txt
+++ b/Tests/LibWeb/Layout/expected/table/rowspan.txt
@@ -9,7 +9,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
Box at (8,8) content-size 221.359375x77.875 [TFC] children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
- TableRowGroupBox at (8,8) content-size 221.359375x77.875 children: not-inline
+ Box at (8,8) content-size 221.359375x77.875 children: not-inline
TableRowBox at (8,8) content-size 221.359375x19.46875 children: not-inline
BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline
TextNode <#text>
diff --git a/Tests/LibWeb/Layout/expected/table/table-width.txt b/Tests/LibWeb/Layout/expected/table/table-width.txt
index 4f35b43ef1..6875f25dcb 100644
--- a/Tests/LibWeb/Layout/expected/table/table-width.txt
+++ b/Tests/LibWeb/Layout/expected/table/table-width.txt
@@ -3,6 +3,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer at (8,8) content-size 784x210 children: not-inline
TableWrapper <(anonymous)> at (8,8) content-size 584x210 [BFC] children: not-inline
Box at (108,108) content-size 584x10 [TFC] children: not-inline
- TableRowGroupBox at (108,108) content-size 584x10 children: not-inline
+ Box at (108,108) content-size 584x10 children: not-inline
TableRowBox at (108,108) content-size 584x10 children: not-inline
TableCellBox at (109,113) content-size 582x0 [BFC] children: not-inline
diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt
index de3ba9a909..0fceac04a6 100644
--- a/Userland/Libraries/LibWeb/CMakeLists.txt
+++ b/Userland/Libraries/LibWeb/CMakeLists.txt
@@ -421,7 +421,6 @@ set(SOURCES
Layout/TableCellBox.cpp
Layout/TableFormattingContext.cpp
Layout/TableRowBox.cpp
- Layout/TableRowGroupBox.cpp
Layout/TableWrapper.cpp
Layout/TextNode.cpp
Layout/TreeBuilder.cpp
diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp
index 5dd627e7f9..f733fe462f 100644
--- a/Userland/Libraries/LibWeb/DOM/Element.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Element.cpp
@@ -51,7 +51,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -324,7 +323,7 @@ JS::GCPtr Element::create_layout_node(NonnullRefPtr Element::create_layout_node_for_display_type(DOM::Document& document, CSS::Display const& display, NonnullRefPtr style, Element* element)
{
- if (display.is_table_inside())
+ if (display.is_table_inside() || display.is_table_row_group() || display.is_table_header_group() || display.is_table_footer_group())
return document.heap().allocate_without_realm(document, element, move(style));
if (display.is_list_item())
@@ -336,9 +335,6 @@ JS::GCPtr Element::create_layout_node_for_display_type(DOM::Docume
if (display.is_table_cell())
return document.heap().allocate_without_realm(document, element, move(style));
- if (display.is_table_row_group() || display.is_table_header_group() || display.is_table_footer_group())
- return document.heap().allocate_without_realm(document, element, move(style));
-
if (display.is_table_column() || display.is_table_column_group() || display.is_table_caption()) {
// FIXME: This is just an incorrect placeholder until we improve table layout support.
return document.heap().allocate_without_realm(document, element, move(style));
diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
index 3dbba9e0e1..f029c5dd61 100644
--- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
@@ -11,7 +11,6 @@
#include
#include
#include
-#include
struct GridPosition {
size_t x;
@@ -42,6 +41,21 @@ TableFormattingContext::TableFormattingContext(LayoutState& state, Box const& ro
TableFormattingContext::~TableFormattingContext() = default;
+static inline bool is_table_row_group(Box const& box)
+{
+ auto const& display = box.display();
+ return display.is_table_row_group() || display.is_table_header_group() || display.is_table_footer_group();
+}
+
+template
+static void for_each_child_box_matching(Box const& parent, Matcher matcher, Callback callback)
+{
+ parent.for_each_child_of_type([&](Box const& child_box) {
+ if (matcher(child_box))
+ callback(child_box);
+ });
+}
+
void TableFormattingContext::calculate_row_column_grid(Box const& box)
{
// Implements https://html.spec.whatwg.org/multipage/tables.html#forming-a-table
@@ -85,7 +99,7 @@ void TableFormattingContext::calculate_row_column_grid(Box const& box)
y_current++;
};
- box.template for_each_child_of_type([&](auto& row_group_box) {
+ for_each_child_box_matching(box, is_table_row_group, [&](auto& row_group_box) {
row_group_box.template for_each_child_of_type([&](auto& row) {
process_row(row);
return IterationDecision::Continue;
@@ -613,7 +627,7 @@ void TableFormattingContext::position_row_boxes(CSSPixels& total_content_height)
CSSPixels row_group_top_offset = table_state.border_top + table_state.padding_top;
CSSPixels row_group_left_offset = table_state.border_left + table_state.padding_left;
- table_box().for_each_child_of_type([&](auto& row_group_box) {
+ for_each_child_box_matching(table_box(), is_table_row_group, [&](auto& row_group_box) {
CSSPixels row_group_height = 0.0f;
CSSPixels row_group_width = 0.0f;
diff --git a/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.cpp b/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.cpp
deleted file mode 100644
index 3e2c3f7a7b..0000000000
--- a/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2020, Andreas Kling
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#include
-#include
-#include
-#include
-
-namespace Web::Layout {
-
-TableRowGroupBox::TableRowGroupBox(DOM::Document& document, DOM::Element* element, NonnullRefPtr style)
- : Layout::Box(document, element, move(style))
-{
-}
-
-TableRowGroupBox::~TableRowGroupBox() = default;
-
-}
diff --git a/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.h b/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.h
deleted file mode 100644
index f9dafdee3b..0000000000
--- a/Userland/Libraries/LibWeb/Layout/TableRowGroupBox.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2020, Andreas Kling
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#pragma once
-
-#include
-
-namespace Web::Layout {
-
-class TableRowGroupBox final : public Box {
- JS_CELL(TableRowGroupBox, Box);
-
-public:
- TableRowGroupBox(DOM::Document&, DOM::Element*, NonnullRefPtr);
- virtual ~TableRowGroupBox() override;
-};
-
-}
| |