mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-10 19:46:03 +00:00
LibWeb: Make non-replaced flex items make use of transferred size
Corresponds to 9beaea1f2a
This commit is contained in:
parent
3dd079b308
commit
95730c66aa
Notes:
github-actions[bot]
2025-03-17 09:36:52 +00:00
Author: https://github.com/AtkinsSJ
Commit: 95730c66aa
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3948
1 changed files with 24 additions and 12 deletions
|
@ -758,25 +758,37 @@ Optional<CSSPixels> FlexFormattingContext::transferred_size_suggestion(FlexItem
|
||||||
CSSPixels FlexFormattingContext::content_based_minimum_size(FlexItem const& item) const
|
CSSPixels FlexFormattingContext::content_based_minimum_size(FlexItem const& item) const
|
||||||
{
|
{
|
||||||
auto unclamped_size = [&] {
|
auto unclamped_size = [&] {
|
||||||
// The content-based minimum size of a flex item is the smaller of its specified size suggestion
|
// The content-based minimum size of a flex item differs depending on whether the flex item is replaced or not:
|
||||||
// and its content size suggestion if its specified size suggestion exists;
|
// -> For replaced elements
|
||||||
if (auto specified_size_suggestion = this->specified_size_suggestion(item); specified_size_suggestion.has_value()) {
|
|
||||||
return min(specified_size_suggestion.value(), content_size_suggestion(item));
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, the smaller of its transferred size suggestion and its content size suggestion
|
|
||||||
// if the element is replaced and its transferred size suggestion exists;
|
|
||||||
if (item.box->is_replaced_box()) {
|
if (item.box->is_replaced_box()) {
|
||||||
|
// Use the smaller of the content size suggestion and the transferred size suggestion (if one exists),
|
||||||
|
// capped by the specified size suggestion (if one exists).
|
||||||
|
auto size = content_size_suggestion(item);
|
||||||
if (auto transferred_size_suggestion = this->transferred_size_suggestion(item); transferred_size_suggestion.has_value()) {
|
if (auto transferred_size_suggestion = this->transferred_size_suggestion(item); transferred_size_suggestion.has_value()) {
|
||||||
return min(transferred_size_suggestion.value(), content_size_suggestion(item));
|
size = min(size, transferred_size_suggestion.value());
|
||||||
}
|
}
|
||||||
|
if (auto specified_size_suggestion = this->specified_size_suggestion(item); specified_size_suggestion.has_value()) {
|
||||||
|
size = min(size, specified_size_suggestion.value());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise its content size suggestion.
|
// -> For non-replaced elements
|
||||||
return content_size_suggestion(item);
|
{
|
||||||
|
// Use the larger of the content size suggestion and the transferred size suggestion (if one exists),
|
||||||
|
// capped by the specified size suggestion (if one exists).
|
||||||
|
auto size = content_size_suggestion(item);
|
||||||
|
if (auto transferred_size_suggestion = this->transferred_size_suggestion(item); transferred_size_suggestion.has_value()) {
|
||||||
|
size = max(size, transferred_size_suggestion.value());
|
||||||
|
}
|
||||||
|
if (auto specified_size_suggestion = this->specified_size_suggestion(item); specified_size_suggestion.has_value()) {
|
||||||
|
size = min(size, specified_size_suggestion.value());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
}();
|
}();
|
||||||
|
|
||||||
// In all cases, the size is clamped by the maximum main size if it’s definite.
|
// In either case, the size is clamped by the maximum main size if it’s definite.
|
||||||
if (has_main_max_size(item.box)) {
|
if (has_main_max_size(item.box)) {
|
||||||
return min(unclamped_size, specified_main_max_size(item.box));
|
return min(unclamped_size, specified_main_max_size(item.box));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue