From 589a1e9325c8ed0cdefc4e735bd0b029f163a974 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 5 Sep 2023 11:58:18 +0200 Subject: [PATCH] LibWeb: Propagate font-size & line-height into generated table boxes The final used values for these properties is stored in the layout node, so we need to make sure they are propagated there as well when doing table box fixup. --- .../table-fixup-font-size-and-line-height.txt | 20 +++++++++++++++++++ ...table-fixup-font-size-and-line-height.html | 8 ++++++++ .../Libraries/LibWeb/Layout/TreeBuilder.cpp | 7 ++++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Layout/expected/table/table-fixup-font-size-and-line-height.txt create mode 100644 Tests/LibWeb/Layout/input/table/table-fixup-font-size-and-line-height.html diff --git a/Tests/LibWeb/Layout/expected/table/table-fixup-font-size-and-line-height.txt b/Tests/LibWeb/Layout/expected/table/table-fixup-font-size-and-line-height.txt new file mode 100644 index 0000000000..6af26289fc --- /dev/null +++ b/Tests/LibWeb/Layout/expected/table/table-fixup-font-size-and-line-height.txt @@ -0,0 +1,20 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x116 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x100 children: not-inline + TableWrapper <(anonymous)> at (8,8) content-size 69.078125x100 [BFC] children: not-inline + Box
at (8,8) content-size 69.078125x100 table-box [TFC] children: inline + Box <(anonymous)> at (8,8) content-size 69.078125x100 table-row children: inline + BlockContainer <(anonymous)> at (8,8) content-size 69.078125x100 table-cell [BFC] children: inline + line 0 width: 69.078125, height: 100, bottom: 100, baseline: 59 + frag 0 from TextNode start: 0, length: 5, rect: [8,8 69.078125x100] + "hello" + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x116] + PaintableWithLines (BlockContainer) [8,8 784x100] + PaintableWithLines (TableWrapper(anonymous)) [8,8 69.078125x100] + PaintableBox (Box
) [8,8 69.078125x100] + PaintableBox (Box(anonymous)) [8,8 69.078125x100] + PaintableWithLines (BlockContainer(anonymous)) [8,8 69.078125x100] + TextPaintable (TextNode<#text>) diff --git a/Tests/LibWeb/Layout/input/table/table-fixup-font-size-and-line-height.html b/Tests/LibWeb/Layout/input/table/table-fixup-font-size-and-line-height.html new file mode 100644 index 0000000000..3091391459 --- /dev/null +++ b/Tests/LibWeb/Layout/input/table/table-fixup-font-size-and-line-height.html @@ -0,0 +1,8 @@ +
hello diff --git a/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp b/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp index 06c4e34401..e020ab393f 100644 --- a/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp +++ b/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp @@ -585,6 +585,7 @@ static void wrap_in_anonymous(Vector>& sequence, Node* nearest_ } wrapper->set_children_are_inline(parent.children_are_inline()); wrapper->set_line_height(parent.line_height()); + wrapper->set_font(parent.font()); if (nearest_sibling) parent.insert_before(*wrapper, *nearest_sibling); else @@ -664,13 +665,15 @@ Vector> TreeBuilder::generate_missing_parents(NodeWithStyle& roo auto* nearest_sibling = table_box->next_sibling(); auto& parent = *table_box->parent(); - CSS::ComputedValues wrapper_computed_values; + CSS::ComputedValues wrapper_computed_values = table_box->computed_values().clone_inherited_values(); table_box->transfer_table_box_computed_values_to_wrapper_computed_values(wrapper_computed_values); auto wrapper = parent.heap().allocate_without_realm(parent.document(), nullptr, move(wrapper_computed_values)); parent.remove_child(*table_box); wrapper->append_child(*table_box); + wrapper->set_font(parent.font()); + wrapper->set_line_height(parent.line_height()); if (nearest_sibling) parent.insert_before(*wrapper, *nearest_sibling); @@ -705,6 +708,8 @@ static void fixup_row(Box& row_box, TableGrid const& table_grid, size_t row_inde // Ensure that the cell (with zero content height) will have the same height as the row by setting vertical-align to middle. cell_computed_values.set_vertical_align(CSS::VerticalAlign::Middle); auto cell_box = row_box.heap().template allocate_without_realm(row_box.document(), nullptr, cell_computed_values); + cell_box->set_font(row_box.font()); + cell_box->set_line_height(row_box.line_height()); row_box.append_child(cell_box); } }