mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 11:37:41 +00:00
LibWeb: Implement intrinsic width calculation for TFC
This commit is contained in:
parent
dbf76e8ae1
commit
2f38f8c84a
1 changed files with 27 additions and 0 deletions
|
@ -176,6 +176,28 @@ void TableFormattingContext::distribute_width_to_columns(float extra_width)
|
||||||
column.used_width += ((column.max_width - column.min_width) / grid_max) * extra_width;
|
column.used_width += ((column.max_width - column.min_width) / grid_max) * extra_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TableFormattingContext::determine_intrisic_size_of_table_container(AvailableSpace const& available_space)
|
||||||
|
{
|
||||||
|
auto const& table_box = context_box();
|
||||||
|
auto& table_box_state = m_state.get_mutable(table_box);
|
||||||
|
|
||||||
|
if (available_space.width.is_min_content()) {
|
||||||
|
// The min-content width of a table is the width required to fit all of its columns min-content widths and its undistributable spaces.
|
||||||
|
float grid_min = 0.0f;
|
||||||
|
for (auto& column : m_columns)
|
||||||
|
grid_min += column.min_width;
|
||||||
|
table_box_state.set_content_width(grid_min);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (available_space.width.is_max_content()) {
|
||||||
|
// The max-content width of a table is the width required to fit all of its columns max-content widths and its undistributable spaces.
|
||||||
|
float grid_max = 0.0f;
|
||||||
|
for (auto& column : m_columns)
|
||||||
|
grid_max += column.max_width;
|
||||||
|
table_box_state.set_content_width(grid_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TableFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& available_space)
|
void TableFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& available_space)
|
||||||
{
|
{
|
||||||
float total_content_height = 0;
|
float total_content_height = 0;
|
||||||
|
@ -186,6 +208,11 @@ void TableFormattingContext::run(Box const& box, LayoutMode, AvailableSpace cons
|
||||||
// Compute the minimum width of each column.
|
// Compute the minimum width of each column.
|
||||||
compute_table_measures();
|
compute_table_measures();
|
||||||
|
|
||||||
|
if (available_space.width.is_intrinsic_sizing_constraint()) {
|
||||||
|
determine_intrisic_size_of_table_container(available_space);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Compute the width of the table.
|
// Compute the width of the table.
|
||||||
float extra_width = 0;
|
float extra_width = 0;
|
||||||
compute_table_width(extra_width);
|
compute_table_width(extra_width);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue