mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-23 18:02:05 -05:00
LibWeb: Distribute cell contribution to all spanned columns
The specification isn't explicit about it, but the contribution we compute should be distributed to all columns, not just the first one. The first reason for it is symmetry, it doesn't make sense for the increased width of the spanning column to only affect the first column in the span. The second reason is the formula for the cell contribution, which is weighted by the non-spanning width of the cell relative to the total width of the columns in the same row. This only covers a fraction of the gap, in order to fully cover it we have to add it to all columns in the span. For this to be exactly the case when the columns don't all have the same width, we'd have to add additional weighting based on the width ratios, but given that the specification doesn't suggest it at all we'll leave it out for now.
This commit is contained in:
parent
50df78d2a2
commit
4d49852454
2 changed files with 15 additions and 11 deletions
|
@ -5,12 +5,12 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
|||
BlockContainer <body> at (8,8) content-size 784x44.9375 children: not-inline
|
||||
BlockContainer <(anonymous)> at (8,8) content-size 784x0 children: inline
|
||||
TextNode <#text>
|
||||
TableWrapper <(anonymous)> at (8,8) content-size 32.904952x44.9375 [BFC] children: not-inline
|
||||
Box <table> at (9,9) content-size 32.904952x42.9375 table-box [TFC] children: not-inline
|
||||
TableWrapper <(anonymous)> at (8,8) content-size 41.122404x44.9375 [BFC] children: not-inline
|
||||
Box <table> at (9,9) content-size 41.122404x42.9375 table-box [TFC] children: not-inline
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
Box <tbody> at (9,9) content-size 34.904952x42.9375 table-row-group children: not-inline
|
||||
Box <tr> at (9,9) content-size 34.904952x21.46875 table-row children: not-inline
|
||||
Box <tbody> at (9,9) content-size 43.122404x42.9375 table-row-group children: not-inline
|
||||
Box <tr> at (9,9) content-size 43.122404x21.46875 table-row children: not-inline
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <td> at (11,11) content-size 17.561202x17.46875 table-cell [BFC] children: inline
|
||||
|
@ -20,21 +20,21 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
|||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <td> at (32.561202,11) content-size 9.34375x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <td> at (32.561202,11) content-size 17.561202x17.46875 table-cell [BFC] children: inline
|
||||
line 0 width: 9.34375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 1, rect: [32.561202,11 9.34375x17.46875]
|
||||
frag 0 from TextNode start: 0, length: 1, rect: [36.561202,11 9.34375x17.46875]
|
||||
"B"
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
Box <tr> at (9,30.46875) content-size 34.904952x21.46875 table-row children: not-inline
|
||||
Box <tr> at (9,30.46875) content-size 43.122404x21.46875 table-row children: not-inline
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <td> at (11,32.46875) content-size 30.904952x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <td> at (11,32.46875) content-size 39.122404x17.46875 table-cell [BFC] children: inline
|
||||
line 0 width: 33.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 3, rect: [11,32.46875 33.3125x17.46875]
|
||||
frag 0 from TextNode start: 0, length: 3, rect: [14,32.46875 33.3125x17.46875]
|
||||
"CDE"
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
|
|
|
@ -234,8 +234,12 @@ void TableFormattingContext::compute_table_measures()
|
|||
// - the outer max-content width of the cell minus the baseline max-content width and the baseline border spacing, or 0 if this is negative
|
||||
cell_max_contribution += (m_columns[cell.column_index].max_width / baseline_max_content_width) * max(CSSPixels(0), cell.max_width - baseline_max_content_width);
|
||||
|
||||
cell_min_contributions_by_column_index[cell.column_index].append(cell_min_contribution);
|
||||
cell_max_contributions_by_column_index[cell.column_index].append(cell_max_contribution);
|
||||
// Spread contribution to all columns, since we've weighted the gap to the desired spanned width by the the
|
||||
// ratio of the max-content width based on cells of span up to N-1 of the column to the baseline max-content width.
|
||||
for (auto column_index = cell_start_column_index; column_index < cell_end_column_index; column_index++) {
|
||||
cell_min_contributions_by_column_index[column_index].append(cell_min_contribution);
|
||||
cell_max_contributions_by_column_index[column_index].append(cell_max_contribution);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue