From 4d971b5bc59f56e7492a15b0aa08f73537293e6a Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Wed, 3 May 2023 14:40:39 +0300 Subject: [PATCH] LibWeb: Use appropriate containing block width to get width of table This solves the issue that previously width table-wrapper containing block were used in the places were containing block of table-root should be used. --- ...-should-not-be-affected-by-presentational-hints.txt | 10 +++++----- .../expected/table/columns-width-distribution-1.txt | 8 ++++---- .../Libraries/LibWeb/Layout/TableFormattingContext.cpp | 10 ++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) 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 78dbe03867..53c53ad226 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 @@ -2,11 +2,11 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline BlockContainer at (1,1) content-size 798x120 [BFC] 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 - TableBox at (11,11) content-size 102x100 [TFC] children: not-inline - TableRowGroupBox at (11,11) content-size 102x100 children: not-inline - TableRowBox at (11,11) content-size 102x100 children: not-inline - TableCellBox
at (13,49.082031) content-size 98x23.835937 [BFC] children: not-inline - BlockContainer <(anonymous)> at (14,50.082031) content-size 96x21.835937 children: inline + TableBox at (11,11) content-size 100x100 [TFC] children: not-inline + TableRowGroupBox at (11,11) content-size 100x100 children: not-inline + TableRowBox at (11,11) content-size 100x100 children: not-inline + TableCellBox at (9,9) content-size 782x90.21875 children: not-inline - TableRowBox at (9,9) content-size 782x90.21875 children: not-inline + TableRowGroupBox 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 - TableCellBox at (62,10) content-size 728x88.21875 [BFC] children: inline + TableCellBox at (62,10) content-size 726x88.21875 [BFC] children: inline line 0 width: 689.640625, height: 17.46875, bottom: 17.46875, baseline: 13.53125 frag 0 from TextNode start: 1, length: 84, rect: [62,10 689.640625x17.46875] "In a scene set in a lawyer's office, the lawyer sits alone and bounces a rubber ball" diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp index b8df1aff87..8990f578d6 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp @@ -212,9 +212,11 @@ void TableFormattingContext::compute_table_width() auto& computed_values = table_box().computed_values(); + CSSPixels width_of_table_containing_block = m_state.get(*table_box().containing_block()).content_width(); + // Percentages on 'width' and 'height' on the table are relative to the table wrapper box's containing block, // not the table wrapper box itself. - CSSPixels width_of_table_containing_block = m_state.get(*table_wrapper().containing_block()).content_width(); + CSSPixels width_of_table_wrapper_containing_block = m_state.get(*table_wrapper().containing_block()).content_width(); // The row/column-grid width minimum (GRIDMIN) width is the sum of the min-content width // of all the columns plus cell spacing or borders. @@ -233,7 +235,7 @@ void TableFormattingContext::compute_table_width() // The used min-width of a table is the greater of the resolved min-width, CAPMIN, and GRIDMIN. auto used_min_width = grid_min; if (!computed_values.min_width().is_auto()) { - used_min_width = max(used_min_width, computed_values.min_width().resolved(table_box(), CSS::Length::make_px(width_of_table_containing_block)).to_px(table_box())); + used_min_width = max(used_min_width, computed_values.min_width().resolved(table_box(), CSS::Length::make_px(width_of_table_wrapper_containing_block)).to_px(table_box())); } CSSPixels used_width; @@ -245,10 +247,10 @@ void TableFormattingContext::compute_table_width() // If the table-root’s width property has a computed value (resolving to // resolved-table-width) other than auto, the used width is the greater // of resolved-table-width, and the used min-width of the table. - CSSPixels resolved_table_width = computed_values.width().resolved(table_box(), CSS::Length::make_px(width_of_table_containing_block)).to_px(table_box()); + CSSPixels resolved_table_width = computed_values.width().resolved(table_box(), CSS::Length::make_px(width_of_table_wrapper_containing_block)).to_px(table_box()); used_width = max(resolved_table_width, used_min_width); if (!computed_values.max_width().is_none()) - used_width = min(used_width, computed_values.max_width().resolved(table_box(), CSS::Length::make_px(width_of_table_containing_block)).to_px(table_box())); + used_width = min(used_width, computed_values.max_width().resolved(table_box(), CSS::Length::make_px(width_of_table_wrapper_containing_block)).to_px(table_box())); } // The assignable table width is the used width of the table minus the total horizontal border spacing (if any).
at (13,49.082031) content-size 96x23.835937 [BFC] children: not-inline + BlockContainer <(anonymous)> at (14,50.082031) content-size 94x21.835937 children: inline line 0 width: 0, height: 21.835937, bottom: 21.835937, baseline: 16.914062 frag 0 from TextNode start: 0, length: 0, rect: [14,50.082031 0x21.835937] "" 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 694f421df8..da39e44f50 100644 --- a/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt +++ b/Tests/LibWeb/Layout/expected/table/columns-width-distribution-1.txt @@ -2,14 +2,14 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline BlockContainer at (0,0) content-size 800x108.21875 [BFC] children: not-inline BlockContainer at (8,8) content-size 784x92.21875 children: not-inline TableWrapper <(anonymous)> at (8,8) content-size 782x92.21875 [BFC] children: not-inline - TableBox at (9,9) content-size 782x90.21875 [TFC] children: not-inline + TableBox at (9,9) content-size 780x90.21875 [TFC] children: not-inline BlockContainer <(anonymous)> at (8,8) content-size 0x0 children: inline TextNode <#text> - TableRowGroupBox