1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 21:28:14 +00:00

LibWeb: Remove Layout::TableRowGroupBox

Special box types for inner table boxes might conflict with special
types for <button>, <input> or <label>.
This commit is contained in:
Aliaksandr Kalenik 2023-05-29 15:54:22 +03:00 committed by Andreas Kling
parent af004ff0ef
commit 578a937f94
13 changed files with 29 additions and 62 deletions

View file

@ -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

View file

@ -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));

View file

@ -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;

View file

@ -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;
}

View file

@ -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;
};
}