1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 15:28:11 +00: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:
Andi Gallo 2023-06-10 01:21:10 +00:00 committed by Andreas Kling
parent 50df78d2a2
commit 4d49852454
2 changed files with 15 additions and 11 deletions

View file

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