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,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 };
|