mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
LibWeb: Add FFC helpers for getting intrinsic size of flex items
This commit is contained in:
parent
4f6fc3d3a6
commit
db2d62671f
2 changed files with 30 additions and 7 deletions
|
@ -688,9 +688,7 @@ Optional<float> FlexFormattingContext::specified_size_suggestion(FlexItem const&
|
||||||
float FlexFormattingContext::content_size_suggestion(FlexItem const& item) const
|
float FlexFormattingContext::content_size_suggestion(FlexItem const& item) const
|
||||||
{
|
{
|
||||||
// FIXME: Apply clamps
|
// FIXME: Apply clamps
|
||||||
if (is_row_layout())
|
return calculate_min_content_main_size(item);
|
||||||
return calculate_min_content_width(item.box);
|
|
||||||
return calculate_min_content_height(item.box);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://drafts.csswg.org/css-flexbox-1/#transferred-size-suggestion
|
// https://drafts.csswg.org/css-flexbox-1/#transferred-size-suggestion
|
||||||
|
@ -1463,7 +1461,7 @@ float FlexFormattingContext::calculate_main_min_content_contribution(FlexItem co
|
||||||
// the larger of its outer min-content size and outer preferred size if that is not auto,
|
// the larger of its outer min-content size and outer preferred size if that is not auto,
|
||||||
// clamped by its min/max main size.
|
// clamped by its min/max main size.
|
||||||
auto outer_min_content_size = [&]() -> float {
|
auto outer_min_content_size = [&]() -> float {
|
||||||
auto inner_main_size = is_row_layout() ? calculate_min_content_width(item.box) : calculate_min_content_height(item.box);
|
auto inner_main_size = calculate_min_content_main_size(item);
|
||||||
auto outer_main_size = inner_main_size
|
auto outer_main_size = inner_main_size
|
||||||
+ item.margins.main_before + item.margins.main_after
|
+ item.margins.main_before + item.margins.main_after
|
||||||
+ item.borders.main_before + item.borders.main_after
|
+ item.borders.main_before + item.borders.main_after
|
||||||
|
@ -1487,7 +1485,7 @@ float FlexFormattingContext::calculate_main_max_content_contribution(FlexItem co
|
||||||
{
|
{
|
||||||
// The main-size max-content contribution of a flex item is the larger of its outer max-content size and outer preferred size if that is not auto, clamped by its min/max main size.
|
// The main-size max-content contribution of a flex item is the larger of its outer max-content size and outer preferred size if that is not auto, clamped by its min/max main size.
|
||||||
auto outer_max_content_size = [&]() -> float {
|
auto outer_max_content_size = [&]() -> float {
|
||||||
auto inner_main_size = is_row_layout() ? calculate_max_content_width(item.box) : calculate_max_content_height(item.box);
|
auto inner_main_size = calculate_max_content_main_size(item);
|
||||||
auto outer_main_size = inner_main_size
|
auto outer_main_size = inner_main_size
|
||||||
+ item.margins.main_before + item.margins.main_after
|
+ item.margins.main_before + item.margins.main_after
|
||||||
+ item.borders.main_before + item.borders.main_after
|
+ item.borders.main_before + item.borders.main_after
|
||||||
|
@ -1508,7 +1506,7 @@ float FlexFormattingContext::calculate_main_max_content_contribution(FlexItem co
|
||||||
|
|
||||||
float FlexFormattingContext::calculate_cross_min_content_contribution(FlexItem const& flex_item) const
|
float FlexFormattingContext::calculate_cross_min_content_contribution(FlexItem const& flex_item) const
|
||||||
{
|
{
|
||||||
auto inner_cross_size = is_row_layout() ? calculate_min_content_height(flex_item.box) : calculate_min_content_width(flex_item.box);
|
auto inner_cross_size = calculate_min_content_cross_size(flex_item);
|
||||||
auto outer_cross_size = inner_cross_size
|
auto outer_cross_size = inner_cross_size
|
||||||
+ flex_item.margins.cross_before + flex_item.margins.cross_after
|
+ flex_item.margins.cross_before + flex_item.margins.cross_after
|
||||||
+ flex_item.borders.cross_before + flex_item.borders.cross_after
|
+ flex_item.borders.cross_before + flex_item.borders.cross_after
|
||||||
|
@ -1518,7 +1516,7 @@ float FlexFormattingContext::calculate_cross_min_content_contribution(FlexItem c
|
||||||
|
|
||||||
float FlexFormattingContext::calculate_cross_max_content_contribution(FlexItem const& flex_item) const
|
float FlexFormattingContext::calculate_cross_max_content_contribution(FlexItem const& flex_item) const
|
||||||
{
|
{
|
||||||
auto inner_cross_size = is_row_layout() ? calculate_max_content_height(flex_item.box) : calculate_max_content_width(flex_item.box);
|
auto inner_cross_size = calculate_max_content_cross_size(flex_item);
|
||||||
auto outer_cross_size = inner_cross_size
|
auto outer_cross_size = inner_cross_size
|
||||||
+ flex_item.margins.cross_before + flex_item.margins.cross_after
|
+ flex_item.margins.cross_before + flex_item.margins.cross_after
|
||||||
+ flex_item.borders.cross_before + flex_item.borders.cross_after
|
+ flex_item.borders.cross_before + flex_item.borders.cross_after
|
||||||
|
@ -1526,4 +1524,24 @@ float FlexFormattingContext::calculate_cross_max_content_contribution(FlexItem c
|
||||||
return outer_cross_size;
|
return outer_cross_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float FlexFormattingContext::calculate_min_content_main_size(FlexItem const& item) const
|
||||||
|
{
|
||||||
|
return is_row_layout() ? calculate_min_content_width(item.box) : calculate_min_content_height(item.box);
|
||||||
|
}
|
||||||
|
|
||||||
|
float FlexFormattingContext::calculate_max_content_main_size(FlexItem const& item) const
|
||||||
|
{
|
||||||
|
return is_row_layout() ? calculate_max_content_width(item.box) : calculate_max_content_height(item.box);
|
||||||
|
}
|
||||||
|
|
||||||
|
float FlexFormattingContext::calculate_min_content_cross_size(FlexItem const& item) const
|
||||||
|
{
|
||||||
|
return is_row_layout() ? calculate_min_content_height(item.box) : calculate_min_content_width(item.box);
|
||||||
|
}
|
||||||
|
|
||||||
|
float FlexFormattingContext::calculate_max_content_cross_size(FlexItem const& item) const
|
||||||
|
{
|
||||||
|
return is_row_layout() ? calculate_max_content_height(item.box) : calculate_max_content_width(item.box);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,6 +140,11 @@ private:
|
||||||
[[nodiscard]] float calculate_main_min_content_contribution(FlexItem const&) const;
|
[[nodiscard]] float calculate_main_min_content_contribution(FlexItem const&) const;
|
||||||
[[nodiscard]] float calculate_main_max_content_contribution(FlexItem const&) const;
|
[[nodiscard]] float calculate_main_max_content_contribution(FlexItem const&) const;
|
||||||
|
|
||||||
|
[[nodiscard]] float calculate_min_content_main_size(FlexItem const&) const;
|
||||||
|
[[nodiscard]] float calculate_max_content_main_size(FlexItem const&) const;
|
||||||
|
[[nodiscard]] float calculate_min_content_cross_size(FlexItem const&) const;
|
||||||
|
[[nodiscard]] float calculate_max_content_cross_size(FlexItem const&) const;
|
||||||
|
|
||||||
CSS::FlexBasisData used_flex_basis_for_item(FlexItem const&) const;
|
CSS::FlexBasisData used_flex_basis_for_item(FlexItem const&) const;
|
||||||
|
|
||||||
FormattingState::NodeState& m_flex_container_state;
|
FormattingState::NodeState& m_flex_container_state;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue