mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-11 05:25:32 +03:00
LibWeb: Consider cell computed height in total row min height of table
Previously, the minimum height of a table row was calculated based on the automatic height of the cells inner layout. This change makes computed height of a cell boxes also be considered if it has definite value.
This commit is contained in:
parent
9b4cd0dab7
commit
2a1e58f8cc
Notes:
sideshowbarker
2024-07-17 06:09:44 +09:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/SerenityOS/serenity/commit/2a1e58f8cc Pull-request: https://github.com/SerenityOS/serenity/pull/18546
@ -1,13 +1,13 @@
|
||||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (1,1) content-size 798x47.835937 children: not-inline
|
||||
BlockContainer <body> at (10,10) content-size 780x29.835937 children: not-inline
|
||||
TableWrapper <(anonymous)> at (10,10) content-size 104x29.835937 children: not-inline
|
||||
TableBox <table> at (11,11) content-size 104x27.835937 children: not-inline
|
||||
TableRowGroupBox <tbody> at (11,11) content-size 104x27.835937 children: not-inline
|
||||
TableRowBox <tr> at (11,11) content-size 104x27.835937 children: not-inline
|
||||
TableCellBox <td> at (13,13) content-size 100x23.835937 children: not-inline
|
||||
BlockContainer <(anonymous)> at (14,14) content-size 98x21.835937 children: inline
|
||||
BlockContainer <html> at (1,1) content-size 798x120 children: not-inline
|
||||
BlockContainer <body> at (10,10) content-size 780x102 children: not-inline
|
||||
TableWrapper <(anonymous)> at (10,10) content-size 104x102 children: not-inline
|
||||
TableBox <table> at (11,11) content-size 104x100 children: not-inline
|
||||
TableRowGroupBox <tbody> at (11,11) content-size 104x100 children: not-inline
|
||||
TableRowBox <tr> at (11,11) content-size 104x100 children: not-inline
|
||||
TableCellBox <td> at (13,49.082031) content-size 100x23.835937 children: not-inline
|
||||
BlockContainer <(anonymous)> at (14,50.082031) content-size 98x21.835937 children: inline
|
||||
line 0 width: 0, height: 21.835937, bottom: 21.835937, baseline: 16.914062
|
||||
frag 0 from TextNode start: 0, length: 0, rect: [14,14 0x21.835937]
|
||||
frag 0 from TextNode start: 0, length: 0, rect: [14,50.082031 0x21.835937]
|
||||
""
|
||||
TextNode <#text>
|
||||
|
6
Tests/LibWeb/Layout/expected/table/cell-px-height.txt
Normal file
6
Tests/LibWeb/Layout/expected/table/cell-px-height.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (0,0) content-size 800x116 children: not-inline
|
||||
TableWrapper <(anonymous)> at (8,8) content-size 102x100 children: not-inline
|
||||
TableBox <body> at (8,8) content-size 102x100 children: not-inline
|
||||
TableRowBox <div.row> at (8,8) content-size 102x100 children: not-inline
|
||||
TableCellBox <div.cell> at (9,9) content-size 100x0 children: not-inline
|
17
Tests/LibWeb/Layout/input/table/cell-px-height.html
Normal file
17
Tests/LibWeb/Layout/input/table/cell-px-height.html
Normal file
@ -0,0 +1,17 @@
|
||||
<style>
|
||||
body {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cell {
|
||||
display: table-cell;
|
||||
border: 1px solid black;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
</style>
|
||||
<div class="row"><div class="cell"></div></div>
|
@ -388,6 +388,7 @@ void TableFormattingContext::determine_intrisic_size_of_table_container(Availabl
|
||||
void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
|
||||
{
|
||||
for (auto& cell : m_cells) {
|
||||
auto& row = m_rows[cell.row_index];
|
||||
auto& cell_state = m_state.get_mutable(cell.box);
|
||||
|
||||
CSSPixels span_width = 0;
|
||||
@ -396,6 +397,8 @@ void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
|
||||
|
||||
auto width_of_containing_block = m_state.get(*cell.box->containing_block()).content_width();
|
||||
auto width_of_containing_block_as_length = CSS::Length::make_px(width_of_containing_block);
|
||||
auto height_of_containing_block = m_state.get(*cell.box->containing_block()).content_height();
|
||||
auto height_of_containing_block_as_length = CSS::Length::make_px(height_of_containing_block);
|
||||
|
||||
cell_state.padding_top = cell.box->computed_values().padding().top().resolved(cell.box, width_of_containing_block_as_length).to_px(cell.box);
|
||||
cell_state.padding_bottom = cell.box->computed_values().padding().bottom().resolved(cell.box, width_of_containing_block_as_length).to_px(cell.box);
|
||||
@ -413,6 +416,14 @@ void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
|
||||
cell_state.border_left = (should_hide_borders && is_left_most_cell) ? 0 : cell.box->computed_values().border_left().width;
|
||||
cell_state.border_right = (should_hide_borders && is_right_most_cell) ? 0 : cell.box->computed_values().border_right().width;
|
||||
|
||||
auto cell_computed_height = cell.box->computed_values().height();
|
||||
if (cell_computed_height.is_length()) {
|
||||
auto cell_used_height = cell_computed_height.resolved(cell.box, height_of_containing_block_as_length).to_px(cell.box);
|
||||
cell_state.set_content_height(cell_used_height - cell_state.border_box_top() - cell_state.border_box_bottom());
|
||||
|
||||
row.used_height = max(row.used_height, cell_used_height);
|
||||
}
|
||||
|
||||
cell_state.set_content_width((span_width - cell_state.border_box_left() - cell_state.border_box_right()));
|
||||
if (auto independent_formatting_context = layout_inside(cell.box, layout_mode, cell_state.available_inner_space_or_constraints_from(*m_available_space))) {
|
||||
cell_state.set_content_height(independent_formatting_context->automatic_content_height());
|
||||
@ -421,7 +432,6 @@ void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
|
||||
|
||||
cell.baseline = box_baseline(m_state, cell.box);
|
||||
|
||||
auto& row = m_rows[cell.row_index];
|
||||
row.used_height = max(row.used_height, cell_state.border_box_height());
|
||||
row.baseline = max(row.baseline, cell.baseline);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user