diff --git a/Tests/LibWeb/Layout/expected/cell-relative-to-specified-table-width.txt b/Tests/LibWeb/Layout/expected/table/cell-relative-to-specified-table-width.txt similarity index 81% rename from Tests/LibWeb/Layout/expected/cell-relative-to-specified-table-width.txt rename to Tests/LibWeb/Layout/expected/table/cell-relative-to-specified-table-width.txt index 560cf15c11..386b518e90 100644 --- a/Tests/LibWeb/Layout/expected/cell-relative-to-specified-table-width.txt +++ b/Tests/LibWeb/Layout/expected/table/cell-relative-to-specified-table-width.txt @@ -11,23 +11,23 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline Box at (10,10) content-size 776x19.46875 table-row children: not-inline BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (11,11) content-size 300.274545x17.46875 table-cell [BFC] children: inline + BlockContainer at (11,11) content-size 300.639999x17.46875 table-cell [BFC] children: inline line 0 width: 14.265625, height: 17.46875, bottom: 17.46875, baseline: 13.53125 frag 0 from TextNode start: 0, length: 1, rect: [154,11 14.265625x17.46875] "A" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (315.274545,11) content-size 169.470316x17.46875 table-cell [BFC] children: inline + BlockContainer at (315.639999,11) content-size 168.719999x17.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: [395.274545,11 9.34375x17.46875] + frag 0 from TextNode start: 0, length: 1, rect: [395.639999,11 9.34375x17.46875] "B" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (488.744861,11) content-size 300.255138x17.46875 table-cell [BFC] children: inline + BlockContainer at (488.36,11) content-size 300.639999x17.46875 table-cell [BFC] children: inline line 0 width: 29.453125, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 3, rect: [623.744861,11 29.453125x17.46875] + frag 0 from TextNode start: 0, length: 3, rect: [624.36,11 29.453125x17.46875] "C D" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline @@ -37,23 +37,23 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline Box at (10,31.46875) content-size 776x19.46875 table-row children: not-inline BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (11,32.46875) content-size 300.274545x17.46875 table-cell [BFC] children: inline + BlockContainer at (11,32.46875) content-size 300.639999x17.46875 table-cell [BFC] children: inline line 0 width: 11.859375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 frag 0 from TextNode start: 0, length: 1, rect: [155,32.46875 11.859375x17.46875] "E" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (315.274545,32.46875) content-size 169.470316x17.46875 table-cell [BFC] children: inline + BlockContainer at (315.639999,32.46875) content-size 168.719999x17.46875 table-cell [BFC] children: inline line 0 width: 12.546875, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 1, rect: [393.274545,32.46875 12.546875x17.46875] + frag 0 from TextNode start: 0, length: 1, rect: [393.639999,32.46875 12.546875x17.46875] "F" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline TextNode <#text> - BlockContainer at (488.744861,32.46875) content-size 300.255138x17.46875 table-cell [BFC] children: inline + BlockContainer at (488.36,32.46875) content-size 300.639999x17.46875 table-cell [BFC] children: inline line 0 width: 13.234375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 - frag 0 from TextNode start: 0, length: 1, rect: [632.744861,32.46875 13.234375x17.46875] + frag 0 from TextNode start: 0, length: 1, rect: [632.36,32.46875 13.234375x17.46875] "G" TextNode <#text> BlockContainer <(anonymous)> (not painted) children: inline diff --git a/Tests/LibWeb/Layout/input/cell-relative-to-specified-table-width.html b/Tests/LibWeb/Layout/input/table/cell-relative-to-specified-table-width.html similarity index 100% rename from Tests/LibWeb/Layout/input/cell-relative-to-specified-table-width.html rename to Tests/LibWeb/Layout/input/table/cell-relative-to-specified-table-width.html diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp index adfc9ca8ff..bbeac00310 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp @@ -192,19 +192,13 @@ void TableFormattingContext::compute_cell_measures(AvailableSpace const& availab } if (computed_values.width().is_percentage()) { - m_columns[cell.column_index].type = SizeType::Percent; + m_columns[cell.column_index].has_percentage_width = true; m_columns[cell.column_index].percentage_width = max(m_columns[cell.column_index].percentage_width, computed_values.width().percentage().value()); - } else { - // FIXME: Columns with no specified width should remain SizeType::Auto. - m_columns[cell.column_index].type = SizeType::Pixel; } if (computed_values.height().is_percentage()) { - m_rows[cell.row_index].type = SizeType::Percent; + m_rows[cell.row_index].has_percentage_height = true; m_rows[cell.row_index].percentage_height = max(m_rows[cell.row_index].percentage_height, computed_values.height().percentage().value()); - } else { - // FIXME: Rows with no specified width should remain SizeType::Auto. - m_rows[cell.row_index].type = SizeType::Pixel; } } @@ -282,10 +276,7 @@ void TableFormattingContext::initialize_table_measurescomputed_values(); if (cell.row_span == 1) { - // FIXME: Implement intrinsic percentage width of a column based on cells of span up to 1. - auto specified_height = m_rows[cell.row_index].type == SizeType::Pixel - ? computed_values.height().to_px(cell.box, containing_block.content_height()) - : 0; + auto specified_height = computed_values.height().to_px(cell.box, containing_block.content_height()); // https://www.w3.org/TR/css-tables-3/#row-layout makes specified cell height part of the initialization formula for row table measures: // This is done by running the same algorithm as the column measurement, with the span=1 value being initialized (for min-content) with // the largest of the resulting height of the previous row layout, the height specified on the corresponding table-row (if any), and @@ -531,7 +522,7 @@ void TableFormattingContext::distribute_width_to_columns() // - all other columns are assigned their min-content width. for (size_t i = 0; i < m_columns.size(); ++i) { auto& column = m_columns[i]; - if (column.type == SizeType::Percent) { + if (column.has_percentage_width) { candidate_widths[i] = max(column.min_size, column.percentage_width / 100 * available_width); } } @@ -574,7 +565,7 @@ void TableFormattingContext::distribute_width_to_columns() // - all other columns are assigned their max-content width. for (size_t i = 0; i < m_columns.size(); ++i) { auto& column = m_columns[i]; - if (column.type != SizeType::Percent) { + if (!column.has_percentage_width) { candidate_widths[i] = column.max_size; } } diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h index 021eb6da71..2c5acf12fd 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.h @@ -58,18 +58,12 @@ private: Optional m_available_space; - enum class SizeType { - Percent, - Pixel, - Auto - }; - struct Column { - SizeType type { SizeType::Auto }; CSSPixels left_offset { 0 }; CSSPixels min_size { 0 }; CSSPixels max_size { 0 }; CSSPixels used_width { 0 }; + bool has_percentage_width { false }; double percentage_width { 0 }; // Store whether the column is constrained: https://www.w3.org/TR/css-tables-3/#constrainedness bool is_constrained { false }; @@ -81,9 +75,9 @@ private: CSSPixels reference_height { 0 }; CSSPixels final_height { 0 }; CSSPixels baseline { 0 }; - SizeType type { SizeType::Auto }; CSSPixels min_size { 0 }; CSSPixels max_size { 0 }; + bool has_percentage_height { false }; double percentage_height { 0 }; // Store whether the row is constrained: https://www.w3.org/TR/css-tables-3/#constrainedness bool is_constrained { false };