diff options
author | Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com> | 2023-05-29 15:54:22 +0300 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-05-29 21:36:17 +0200 |
commit | 578a937f94a3cccc86b5b16b0a855ab4e2f8d74c (patch) | |
tree | 20f8155d5c4a7afb1ec71798e7999181cf8238ff | |
parent | af004ff0ef162a1752db2a1be0b939da4c24f3b1 (diff) | |
download | serenity-578a937f94a3cccc86b5b16b0a855ab4e2f8d74c.zip |
LibWeb: Remove Layout::TableRowGroupBox
Special box types for inner table boxes might conflict with special
types for <button>, <input> or <label>.
13 files changed, 29 insertions, 62 deletions
diff --git a/Tests/LibWeb/Layout/expected/blockify-layout-internal-box-without-crashing.txt b/Tests/LibWeb/Layout/expected/blockify-layout-internal-box-without-crashing.txt index 9e00c423c9..d9b0cd5e1b 100644 --- a/Tests/LibWeb/Layout/expected/blockify-layout-internal-box-without-crashing.txt +++ b/Tests/LibWeb/Layout/expected/blockify-layout-internal-box-without-crashing.txt @@ -3,7 +3,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline BlockContainer <body> at (8,8) content-size 784x0 children: not-inline TableWrapper <(anonymous)> at (8,8) content-size 0x0 [BFC] children: not-inline Box <table> at (8,8) content-size 0x0 [TFC] children: not-inline - TableRowGroupBox <tbody> at (8,8) content-size 0x0 children: not-inline + Box <tbody> at (8,8) content-size 0x0 children: not-inline TableRowBox <tr> at (8,8) content-size 0x0 children: not-inline TableCellBox <(anonymous)> at (8,8) content-size 0x0 [BFC] children: not-inline BlockContainer <td> 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 <body> at (10,10) content-size 780x102 children: not-inline TableWrapper <(anonymous)> at (10,10) content-size 102x102 [BFC] children: not-inline Box <table> at (11,11) content-size 100x100 [TFC] children: not-inline - TableRowGroupBox <tbody> at (11,11) content-size 100x100 children: not-inline + Box <tbody> at (11,11) content-size 100x100 children: not-inline TableRowBox <tr> at (11,11) content-size 100x100 children: not-inline TableCellBox <td> 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 <thead> at (8,8) content-size 95.171875x19.46875 children: not-inline + Box <thead> at (8,8) content-size 95.171875x19.46875 children: not-inline BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline TextNode <#text> TableRowBox <tr> 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 <tbody> at (8,27.46875) content-size 95.171875x19.46875 children: not-inline + Box <tbody> 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 <tr> 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 <tfoot> at (8,46.9375) content-size 95.171875x19.46875 children: not-inline + Box <tfoot> 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 <tr> 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 <table.table-border-black> 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 <tbody> at (9,9) content-size 166.296875x64.40625 children: not-inline + Box <tbody> at (9,9) content-size 166.296875x64.40625 children: not-inline TableRowBox <tr> 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 <table.table-border-black> 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 <tbody> at (8,74.40625) content-size 164.296875x62.40625 children: not-inline + Box <tbody> at (8,74.40625) content-size 164.296875x62.40625 children: not-inline TableRowBox <tr> 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 <table.ambox> at (9,9) content-size 780x90.21875 [TFC] children: not-inline BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline TextNode <#text> - TableRowGroupBox <tbody> at (9,9) content-size 780x90.21875 children: not-inline + Box <tbody> at (9,9) content-size 780x90.21875 children: not-inline TableRowBox <tr> at (9,9) content-size 780x90.21875 children: not-inline TableCellBox <td.mbox-image> at (10,29.109375) content-size 50x50 [BFC] children: not-inline BlockContainer <div.mbox-image-div> 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 <table> 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 <tbody> at (9,9) content-size 129.984375x38.9375 children: not-inline + Box <tbody> at (9,9) content-size 129.984375x38.9375 children: not-inline TableRowBox <tr> at (9,9) content-size 129.984375x19.46875 children: not-inline TableCellBox <td> 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 <table> 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 <tbody> at (8,8) content-size 221.359375x77.875 children: not-inline + Box <tbody> at (8,8) content-size 221.359375x77.875 children: not-inline TableRowBox <tr> 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 <body> at (8,8) content-size 784x210 children: not-inline TableWrapper <(anonymous)> at (8,8) content-size 584x210 [BFC] children: not-inline Box <table.table> at (108,108) content-size 584x10 [TFC] children: not-inline - TableRowGroupBox <tbody> at (108,108) content-size 584x10 children: not-inline + Box <tbody> at (108,108) content-size 584x10 children: not-inline TableRowBox <tr> at (108,108) content-size 584x10 children: not-inline TableCellBox <td.cell> 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 <LibWeb/Layout/ListItemBox.h> #include <LibWeb/Layout/TableCellBox.h> #include <LibWeb/Layout/TableRowBox.h> -#include <LibWeb/Layout/TableRowGroupBox.h> #include <LibWeb/Layout/TreeBuilder.h> #include <LibWeb/Layout/Viewport.h> #include <LibWeb/Namespace.h> @@ -324,7 +323,7 @@ JS::GCPtr<Layout::Node> Element::create_layout_node(NonnullRefPtr<CSS::StyleProp JS::GCPtr<Layout::Node> Element::create_layout_node_for_display_type(DOM::Document& document, CSS::Display const& display, NonnullRefPtr<CSS::StyleProperties> 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<Layout::Box>(document, element, move(style)); if (display.is_list_item()) @@ -336,9 +335,6 @@ JS::GCPtr<Layout::Node> Element::create_layout_node_for_display_type(DOM::Docume if (display.is_table_cell()) return document.heap().allocate_without_realm<Layout::TableCellBox>(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<Layout::TableRowGroupBox>(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<Layout::BlockContainer>(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 <LibWeb/Layout/TableCellBox.h> #include <LibWeb/Layout/TableFormattingContext.h> #include <LibWeb/Layout/TableRowBox.h> -#include <LibWeb/Layout/TableRowGroupBox.h> 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<typename Matcher, typename Callback> +static void for_each_child_box_matching(Box const& parent, Matcher matcher, Callback callback) +{ + parent.for_each_child_of_type<Box>([&](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<TableRowGroupBox>([&](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<TableRowBox>([&](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<TableRowGroupBox>([&](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 <kling@serenityos.org> - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include <LibWeb/DOM/Element.h> -#include <LibWeb/Layout/TableCellBox.h> -#include <LibWeb/Layout/TableRowBox.h> -#include <LibWeb/Layout/TableRowGroupBox.h> - -namespace Web::Layout { - -TableRowGroupBox::TableRowGroupBox(DOM::Document& document, DOM::Element* element, NonnullRefPtr<CSS::StyleProperties> 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 <kling@serenityos.org> - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include <LibWeb/Layout/Box.h> - -namespace Web::Layout { - -class TableRowGroupBox final : public Box { - JS_CELL(TableRowGroupBox, Box); - -public: - TableRowGroupBox(DOM::Document&, DOM::Element*, NonnullRefPtr<CSS::StyleProperties>); - virtual ~TableRowGroupBox() override; -}; - -} |