mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-11 13:36:13 +03:00
LibWeb: Make the type of column whether it's percent or not
Change how we store type of columns. It was used where the specification only distinguishes between percent and everything else, so it makes more sense to store and use it as a boolean.
This commit is contained in:
parent
0314e26ef4
commit
19a26533a9
Notes:
sideshowbarker
2024-07-17 11:29:41 +09:00
Author: https://github.com/axgallo Commit: https://github.com/SerenityOS/serenity/commit/19a26533a9 Pull-request: https://github.com/SerenityOS/serenity/pull/20009
@ -11,23 +11,23 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
Box <tr> at (10,10) content-size 776x19.46875 table-row children: not-inline
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <th> at (11,11) content-size 300.274545x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <th> 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 <th> at (315.274545,11) content-size 169.470316x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <th> 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 <th> at (488.744861,11) content-size 300.255138x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <th> 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 <tr> at (10,31.46875) content-size 776x19.46875 table-row children: not-inline
|
||||
BlockContainer <(anonymous)> (not painted) children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <td> at (11,32.46875) content-size 300.274545x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <td> 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 <td> at (315.274545,32.46875) content-size 169.470316x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <td> 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 <td> at (488.744861,32.46875) content-size 300.255138x17.46875 table-cell [BFC] children: inline
|
||||
BlockContainer <td> 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
|
@ -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_measures<TableFormattingContext::R
|
||||
for (auto& cell : m_cells) {
|
||||
auto const& computed_values = cell.box->computed_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;
|
||||
}
|
||||
}
|
||||
|
@ -58,18 +58,12 @@ private:
|
||||
|
||||
Optional<AvailableSpace> 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 };
|
||||
|
Loading…
Reference in New Issue
Block a user