mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
LibWeb: Fix table column constrainedness
Adjust implementation to reflect the CSS 2.1 definition of width.
This commit is contained in:
parent
c6cb876851
commit
29352f570a
Notes:
sideshowbarker
2024-07-17 09:37:30 +09:00
Author: https://github.com/axgallo Commit: https://github.com/SerenityOS/serenity/commit/29352f570a Pull-request: https://github.com/SerenityOS/serenity/pull/20781
3 changed files with 36 additions and 4 deletions
|
@ -0,0 +1,25 @@
|
||||||
|
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||||
|
BlockContainer <html> at (0,0) content-size 800x600 [BFC] children: not-inline
|
||||||
|
BlockContainer <body> at (8,8) content-size 784x23.46875 children: not-inline
|
||||||
|
TableWrapper <(anonymous)> at (8,8) content-size 37.609375x23.46875 [BFC] children: not-inline
|
||||||
|
Box <table> at (8,8) content-size 37.609375x23.46875 table-box [TFC] children: not-inline
|
||||||
|
Box <tbody> at (8,8) content-size 33.609375x19.46875 table-row-group children: not-inline
|
||||||
|
Box <tr> at (10,10) content-size 33.609375x19.46875 table-row children: not-inline
|
||||||
|
BlockContainer <td.ab> at (11,11) content-size 31.609375x17.46875 table-cell [BFC] children: inline
|
||||||
|
line 0 width: 31.609375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||||
|
frag 0 from TextNode start: 0, length: 3, rect: [11,11 31.609375x17.46875]
|
||||||
|
"A B"
|
||||||
|
TextNode <#text>
|
||||||
|
BlockContainer <(anonymous)> at (8,31.46875) content-size 784x0 children: inline
|
||||||
|
TextNode <#text>
|
||||||
|
|
||||||
|
ViewportPaintable (Viewport<#document>) [0,0 800x600]
|
||||||
|
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
|
||||||
|
PaintableWithLines (BlockContainer<BODY>) [8,8 784x23.46875]
|
||||||
|
PaintableWithLines (TableWrapper(anonymous)) [8,8 37.609375x23.46875]
|
||||||
|
PaintableBox (Box<TABLE>) [8,8 37.609375x23.46875]
|
||||||
|
PaintableBox (Box<TBODY>) [8,8 33.609375x19.46875] overflow: [8,8 35.609375x21.46875]
|
||||||
|
PaintableBox (Box<TR>) [10,10 33.609375x19.46875]
|
||||||
|
PaintableWithLines (BlockContainer<TD>.ab) [10,10 33.609375x19.46875]
|
||||||
|
TextPaintable (TextNode<#text>)
|
||||||
|
PaintableWithLines (BlockContainer(anonymous)) [8,31.46875 784x0]
|
|
@ -0,0 +1,5 @@
|
||||||
|
<style>
|
||||||
|
.ab {
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
|
</style><table><tbody><tr><td class="ab">A B</td></tr></tbody></table>
|
|
@ -62,11 +62,13 @@ CSSPixels TableFormattingContext::run_caption_layout(LayoutMode layout_mode, CSS
|
||||||
void TableFormattingContext::compute_constrainedness()
|
void TableFormattingContext::compute_constrainedness()
|
||||||
{
|
{
|
||||||
// Definition of constrainedness: https://www.w3.org/TR/css-tables-3/#constrainedness
|
// Definition of constrainedness: https://www.w3.org/TR/css-tables-3/#constrainedness
|
||||||
|
// NB: The definition uses https://www.w3.org/TR/CSS21/visudet.html#propdef-width for width, which doesn't include
|
||||||
|
// keyword values. The remaining checks can be simplified to checking whether the size is a length.
|
||||||
size_t column_index = 0;
|
size_t column_index = 0;
|
||||||
TableGrid::for_each_child_box_matching(table_box(), is_table_column_group, [&](auto& column_group_box) {
|
TableGrid::for_each_child_box_matching(table_box(), is_table_column_group, [&](auto& column_group_box) {
|
||||||
TableGrid::for_each_child_box_matching(column_group_box, is_table_column, [&](auto& column_box) {
|
TableGrid::for_each_child_box_matching(column_group_box, is_table_column, [&](auto& column_box) {
|
||||||
auto const& computed_values = column_box.computed_values();
|
auto const& computed_values = column_box.computed_values();
|
||||||
if (!computed_values.width().is_auto() && !computed_values.width().is_percentage()) {
|
if (computed_values.width().is_length()) {
|
||||||
m_columns[column_index].is_constrained = true;
|
m_columns[column_index].is_constrained = true;
|
||||||
}
|
}
|
||||||
auto const& col_node = static_cast<HTML::HTMLTableColElement const&>(*column_box.dom_node());
|
auto const& col_node = static_cast<HTML::HTMLTableColElement const&>(*column_box.dom_node());
|
||||||
|
@ -77,18 +79,18 @@ void TableFormattingContext::compute_constrainedness()
|
||||||
|
|
||||||
for (auto& row : m_rows) {
|
for (auto& row : m_rows) {
|
||||||
auto const& computed_values = row.box->computed_values();
|
auto const& computed_values = row.box->computed_values();
|
||||||
if (!computed_values.height().is_auto() && !computed_values.height().is_percentage()) {
|
if (computed_values.height().is_length()) {
|
||||||
row.is_constrained = true;
|
row.is_constrained = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& cell : m_cells) {
|
for (auto& cell : m_cells) {
|
||||||
auto const& computed_values = cell.box->computed_values();
|
auto const& computed_values = cell.box->computed_values();
|
||||||
if (!computed_values.width().is_auto() && !computed_values.width().is_percentage()) {
|
if (computed_values.width().is_length()) {
|
||||||
m_columns[cell.column_index].is_constrained = true;
|
m_columns[cell.column_index].is_constrained = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!computed_values.height().is_auto() && !computed_values.height().is_percentage()) {
|
if (computed_values.height().is_length()) {
|
||||||
m_rows[cell.row_index].is_constrained = true;
|
m_rows[cell.row_index].is_constrained = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue