From bc8c2b2bc2e4ead880a795fede067b4c46433ee2 Mon Sep 17 00:00:00 2001 From: Andi Gallo Date: Sat, 12 Aug 2023 23:48:36 +0000 Subject: [PATCH] LibWeb: Use cell width instead available width to compute height Overall available width should only affect later stages of the table layout algorithm and have no impact on cell measures. --- .../expected/table/inline-table-width.txt | 42 +++++++++---------- .../Layout/expected/table/multi-line-cell.txt | 32 +++++++------- .../LibWeb/Layout/TableFormattingContext.cpp | 8 ++-- .../LibWeb/Layout/TableFormattingContext.h | 2 +- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Tests/LibWeb/Layout/expected/table/inline-table-width.txt b/Tests/LibWeb/Layout/expected/table/inline-table-width.txt index 7627b972af..355b7e40c1 100644 --- a/Tests/LibWeb/Layout/expected/table/inline-table-width.txt +++ b/Tests/LibWeb/Layout/expected/table/inline-table-width.txt @@ -1,12 +1,12 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline - BlockContainer at (8,8) content-size 784x64.875 children: inline - line 0 width: 137.984375, height: 64.875, bottom: 64.875, baseline: 64.875 - frag 0 from BlockContainer start: 0, length: 0, rect: [9,9 135.984375x62.875] - BlockContainer at (9,9) content-size 135.984375x62.875 inline-block [BFC] children: not-inline - TableWrapper <(anonymous)> at (9,9) content-size 135.984375x62.875 inline-block [BFC] children: not-inline - Box <(anonymous)> at (9,9) content-size 135.984375x62.875 inline-table table-box [TFC] children: not-inline - Box at (9,9) content-size 129.984375x56.875 table-row-group children: not-inline + BlockContainer at (8,8) content-size 784x46.9375 children: inline + line 0 width: 137.984375, height: 46.9375, bottom: 46.9375, baseline: 46.9375 + frag 0 from BlockContainer start: 0, length: 0, rect: [9,9 135.984375x44.9375] + BlockContainer
at (9,9) content-size 135.984375x44.9375 inline-block [BFC] children: not-inline + TableWrapper <(anonymous)> at (9,9) content-size 135.984375x44.9375 inline-block [BFC] children: not-inline + Box <(anonymous)> at (9,9) content-size 135.984375x44.9375 inline-table table-box [TFC] children: not-inline + Box at (9,9) content-size 129.984375x38.9375 table-row-group children: not-inline Box at (11,11) content-size 129.984375x19.46875 table-row children: not-inline BlockContainer at (11,32.46875) content-size 129.984375x37.40625 table-row children: not-inline - BlockContainer at (11,32.46875) content-size 129.984375x19.46875 table-row children: not-inline + BlockContainer
at (12,12) content-size 87.90625x17.46875 table-cell [BFC] children: inline line 0 width: 15.734375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 @@ -18,32 +18,32 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline frag 0 from TextNode start: 0, length: 4, rect: [103.90625,12 27.84375x17.46875] "null" TextNode <#text> - Box
at (12,42.4375) content-size 87.90625x17.46875 table-cell [BFC] children: inline + Box
at (12,33.46875) content-size 87.90625x17.46875 table-cell [BFC] children: inline line 0 width: 87.90625, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 11, rect: [12,42.4375 87.90625x17.46875] + frag 0 from TextNode start: 0, length: 11, rect: [12,33.46875 87.90625x17.46875] "Is Selected" TextNode <#text> - BlockContainer at (103.90625,42.4375) content-size 38.078125x17.46875 table-cell [BFC] children: inline + BlockContainer at (103.90625,33.46875) content-size 38.078125x17.46875 table-cell [BFC] children: inline line 0 width: 38.078125, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 5, rect: [103.90625,42.4375 38.078125x17.46875] + frag 0 from TextNode start: 0, length: 5, rect: [103.90625,33.46875 38.078125x17.46875] "false" TextNode <#text> PaintableWithLines (Viewport<#document>) [0,0 800x600] PaintableWithLines (BlockContainer) [0,0 800x600] - PaintableWithLines (BlockContainer) [8,8 784x64.875] - PaintableWithLines (BlockContainer) [8,8 137.984375x64.875] - PaintableWithLines (TableWrapper(anonymous)) [9,9 135.984375x62.875] - PaintableBox (Box(anonymous)) [9,9 135.984375x62.875] - PaintableBox (Box) [9,9 129.984375x56.875] overflow: [9,9 133.984375x60.875] + PaintableWithLines (BlockContainer) [8,8 784x46.9375] + PaintableWithLines (BlockContainer
) [8,8 137.984375x46.9375] + PaintableWithLines (TableWrapper(anonymous)) [9,9 135.984375x44.9375] + PaintableBox (Box(anonymous)) [9,9 135.984375x44.9375] + PaintableBox (Box) [9,9 129.984375x38.9375] overflow: [9,9 133.984375x42.9375] PaintableBox (Box) [11,11 129.984375x19.46875] overflow: [11,11 131.984375x19.46875] PaintableWithLines (BlockContainer) [11,32.46875 129.984375x37.40625] overflow: [11,32.46875 131.984375x37.40625] - PaintableWithLines (BlockContainer) [11,32.46875 129.984375x19.46875] overflow: [11,32.46875 131.984375x19.46875] + PaintableWithLines (BlockContainer
) [11,11 89.90625x19.46875] TextPaintable (TextNode<#text>) PaintableWithLines (BlockContainer) [102.90625,11 40.078125x19.46875] TextPaintable (TextNode<#text>) - PaintableBox (Box
) [11,32.46875 89.90625x37.40625] + PaintableBox (Box
) [11,32.46875 89.90625x19.46875] + TextPaintable (TextNode<#text>) + PaintableWithLines (BlockContainer) [102.90625,32.46875 40.078125x19.46875] TextPaintable (TextNode<#text>) - PaintableWithLines (BlockContainer) [102.90625,32.46875 40.078125x37.40625] - TextPaintable (TextNode<#text>) \ No newline at end of file diff --git a/Tests/LibWeb/Layout/expected/table/multi-line-cell.txt b/Tests/LibWeb/Layout/expected/table/multi-line-cell.txt index 8c14d7d263..40a86571e1 100644 --- a/Tests/LibWeb/Layout/expected/table/multi-line-cell.txt +++ b/Tests/LibWeb/Layout/expected/table/multi-line-cell.txt @@ -1,11 +1,11 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline - BlockContainer at (8,8) content-size 784x86.8125 children: not-inline - TableWrapper <(anonymous)> at (8,8) content-size 81.4375x86.8125 [BFC] children: not-inline - Box at (9,9) content-size 79.4375x84.8125 table-box [TFC] children: not-inline + BlockContainer at (8,8) content-size 784x68.875 children: not-inline + TableWrapper <(anonymous)> at (8,8) content-size 81.4375x68.875 [BFC] children: not-inline + Box
at (9,9) content-size 79.4375x66.875 table-box [TFC] children: not-inline BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - Box at (9,9) content-size 75.4375x78.8125 table-row-group children: not-inline + Box at (9,9) content-size 75.4375x60.875 table-row-group children: not-inline Box at (11,11) content-size 75.4375x21.46875 table-row children: not-inline BlockContainer at (11,34.46875) content-size 75.4375x57.34375 table-row children: not-inline - BlockContainer at (11,34.46875) content-size 75.4375x39.40625 table-row children: not-inline + BlockContainer
at (13,13) content-size 71.4375x17.46875 table-cell [BFC] children: inline line 0 width: 7.9375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 @@ -14,30 +14,30 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - Box
at (13,45.4375) content-size 71.4375x35.40625 table-cell [BFC] children: inline + Box
at (13,36.46875) content-size 71.4375x35.40625 table-cell [BFC] children: inline line 0 width: 71.4375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 9, rect: [13,45.4375 71.4375x17.46875] + frag 0 from TextNode start: 0, length: 9, rect: [13,36.46875 71.4375x17.46875] "*********" line 1 width: 63.5625, height: 17.9375, bottom: 35.40625, baseline: 13.53125 - frag 0 from TextNode start: 10, length: 8, rect: [13,62.4375 63.5625x17.46875] + frag 0 from TextNode start: 10, length: 8, rect: [13,53.46875 63.5625x17.46875] "***** **" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer <(anonymous)> at (8,94.8125) content-size 784x0 children: inline + BlockContainer <(anonymous)> at (8,76.875) content-size 784x0 children: inline TextNode <#text> PaintableWithLines (Viewport<#document>) [0,0 800x600] PaintableWithLines (BlockContainer) [0,0 800x600] - PaintableWithLines (BlockContainer) [8,8 784x86.8125] - PaintableWithLines (TableWrapper(anonymous)) [8,8 81.4375x86.8125] - PaintableBox (Box) [8,8 81.4375x86.8125] - PaintableBox (Box) [9,9 75.4375x78.8125] overflow: [9,9 77.4375x82.8125] + PaintableWithLines (BlockContainer) [8,8 784x68.875] + PaintableWithLines (TableWrapper(anonymous)) [8,8 81.4375x68.875] + PaintableBox (Box
) [8,8 81.4375x68.875] + PaintableBox (Box) [9,9 75.4375x60.875] overflow: [9,9 77.4375x64.875] PaintableBox (Box) [11,11 75.4375x21.46875] PaintableWithLines (BlockContainer) [11,34.46875 75.4375x57.34375] - PaintableWithLines (BlockContainer) [11,34.46875 75.4375x39.40625] + PaintableWithLines (BlockContainer
) [11,11 75.4375x21.46875] TextPaintable (TextNode<#text>) - PaintableBox (Box
) [11,34.46875 75.4375x57.34375] + PaintableBox (Box
) [11,34.46875 75.4375x39.40625] TextPaintable (TextNode<#text>) - PaintableWithLines (BlockContainer(anonymous)) [8,94.8125 784x0] + PaintableWithLines (BlockContainer(anonymous)) [8,76.875 784x0] diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp index 058b2e8549..a4115cc9d9 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp @@ -219,7 +219,7 @@ void TableFormattingContext::compute_constrainedness() } } -void TableFormattingContext::compute_cell_measures(AvailableSpace const& available_space) +void TableFormattingContext::compute_cell_measures() { // Implements https://www.w3.org/TR/css-tables-3/#computing-cell-measures. auto const& containing_block = m_state.get(*table_wrapper().containing_block()); @@ -241,10 +241,10 @@ void TableFormattingContext::compute_cell_measures(AvailableSpace const& availab CSSPixels border_left = use_collapsing_borders_model ? round(cell_state.border_left / 2) : computed_values.border_left().width; CSSPixels border_right = use_collapsing_borders_model ? round(cell_state.border_right / 2) : computed_values.border_right().width; - auto min_content_height = calculate_min_content_height(cell.box, available_space.width.to_px_or_zero()); - auto max_content_height = calculate_max_content_height(cell.box, available_space.width.to_px_or_zero()); auto min_content_width = calculate_min_content_width(cell.box); auto max_content_width = calculate_max_content_width(cell.box); + auto min_content_height = calculate_min_content_height(cell.box, max_content_width); + auto max_content_height = calculate_max_content_height(cell.box, min_content_width); // The outer min-content height of a table-cell is max(min-height, min-content height) adjusted by the cell intrinsic offsets. auto min_height = computed_values.min_height().to_px(cell.box, containing_block.content_height()); @@ -1673,7 +1673,7 @@ void TableFormattingContext::run(Box const& box, LayoutMode layout_mode, Availab border_conflict_resolution(); // Compute the minimum width of each column. - compute_cell_measures(available_space); + compute_cell_measures(); compute_outer_content_sizes(); compute_table_measures(); diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h index 060a4b1405..80e2d799db 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h @@ -39,7 +39,7 @@ private: CSSPixels compute_capmin(); void calculate_row_column_grid(Box const&); void compute_constrainedness(); - void compute_cell_measures(AvailableSpace const& available_space); + void compute_cell_measures(); void compute_outer_content_sizes(); template void initialize_table_measures();