1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:07:35 +00:00

LibWeb: Improve auto height calculation for tables

Change `compute_auto_height_for_block_level_element` to use max height
(`m_automatic_content_height` produced from TFC) for tables with auto
height which is more correct behaviour than treating them like block
containers.
This commit is contained in:
Aliaksandr Kalenik 2023-01-20 00:59:43 +01:00 committed by Andreas Kling
parent addfa4ed58
commit 87f0e835eb
3 changed files with 8 additions and 3 deletions

View file

@ -404,6 +404,9 @@ CSSPixels BlockFormattingContext::compute_auto_height_for_block_level_element(Bo
// max-content size. // max-content size.
return calculate_max_content_height(box, available_space.width); return calculate_max_content_height(box, available_space.width);
} }
if (display.is_table_inside()) {
return calculate_max_content_height(box, available_space.height);
}
// https://www.w3.org/TR/CSS22/visudet.html#normal-block // https://www.w3.org/TR/CSS22/visudet.html#normal-block
// 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible' // 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'

View file

@ -414,7 +414,7 @@ void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
} }
} }
void TableFormattingContext::position_row_boxes() void TableFormattingContext::position_row_boxes(CSSPixels& total_content_height)
{ {
auto const& table_state = m_state.get(table_box()); auto const& table_state = m_state.get(table_box());
@ -456,6 +456,8 @@ void TableFormattingContext::position_row_boxes()
row_group_top_offset += row_group_height; row_group_top_offset += row_group_height;
}); });
total_content_height = max(row_top_offset, row_group_top_offset) - table_state.border_top - table_state.padding_top;
} }
void TableFormattingContext::position_cell_boxes() void TableFormattingContext::position_cell_boxes()
@ -520,7 +522,7 @@ void TableFormattingContext::run(Box const& box, LayoutMode layout_mode, Availab
distribute_width_to_columns(); distribute_width_to_columns();
calculate_row_heights(layout_mode); calculate_row_heights(layout_mode);
position_row_boxes(); position_row_boxes(total_content_height);
position_cell_boxes(); position_cell_boxes();
m_state.get_mutable(table_box()).set_content_height(total_content_height); m_state.get_mutable(table_box()).set_content_height(total_content_height);

View file

@ -33,7 +33,7 @@ private:
void distribute_width_to_columns(); void distribute_width_to_columns();
void determine_intrisic_size_of_table_container(AvailableSpace const& available_space); void determine_intrisic_size_of_table_container(AvailableSpace const& available_space);
void calculate_row_heights(LayoutMode layout_mode); void calculate_row_heights(LayoutMode layout_mode);
void position_row_boxes(); void position_row_boxes(CSSPixels&);
void position_cell_boxes(); void position_cell_boxes();
CSSPixels m_automatic_content_height { 0 }; CSSPixels m_automatic_content_height { 0 };