mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Fix intrinsic contributions of indefinite stretch
keyword (#36030)
In #35630 I treated an indefinite `stretch` as 0px on min sizing properties, and as `none` on max sizing properties. However, this was only for final layout sizes, I forgot about intrinsic contributions. Blink already modified the relevant test, I'm just reordering it a bit since we are no longer treating `stretch` as `fit-content`, so it seems better to test it at the end. Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
99d4baa533
commit
09fe51f55a
4 changed files with 21 additions and 38 deletions
|
@ -172,7 +172,7 @@ pub(crate) fn outer_inline(
|
||||||
};
|
};
|
||||||
get_content_size(&constraint_space)
|
get_content_size(&constraint_space)
|
||||||
});
|
});
|
||||||
let resolve_non_initial = |inline_size| {
|
let resolve_non_initial = |inline_size, stretch_values| {
|
||||||
Some(match inline_size {
|
Some(match inline_size {
|
||||||
Size::Initial => return None,
|
Size::Initial => return None,
|
||||||
Size::Numeric(numeric) => (numeric, numeric, false),
|
Size::Numeric(numeric) => (numeric, numeric, false),
|
||||||
|
@ -186,24 +186,25 @@ pub(crate) fn outer_inline(
|
||||||
content_size.sizes.max_content,
|
content_size.sizes.max_content,
|
||||||
content_size.depends_on_block_constraints,
|
content_size.depends_on_block_constraints,
|
||||||
),
|
),
|
||||||
Size::Stretch | Size::FitContent => (
|
Size::FitContent => (
|
||||||
content_size.sizes.min_content,
|
content_size.sizes.min_content,
|
||||||
content_size.sizes.max_content,
|
content_size.sizes.max_content,
|
||||||
content_size.depends_on_block_constraints,
|
content_size.depends_on_block_constraints,
|
||||||
),
|
),
|
||||||
|
Size::Stretch => return stretch_values,
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
let (mut preferred_min_content, preferred_max_content, preferred_depends_on_block_constraints) =
|
let (mut preferred_min_content, preferred_max_content, preferred_depends_on_block_constraints) =
|
||||||
resolve_non_initial(content_box_sizes.inline.preferred)
|
resolve_non_initial(content_box_sizes.inline.preferred, None)
|
||||||
.unwrap_or_else(|| resolve_non_initial(Size::FitContent).unwrap());
|
.unwrap_or_else(|| resolve_non_initial(Size::FitContent, None).unwrap());
|
||||||
let (mut min_min_content, mut min_max_content, mut min_depends_on_block_constraints) =
|
let (mut min_min_content, mut min_max_content, mut min_depends_on_block_constraints) =
|
||||||
resolve_non_initial(content_box_sizes.inline.min).unwrap_or((
|
resolve_non_initial(
|
||||||
auto_minimum.inline,
|
content_box_sizes.inline.min,
|
||||||
auto_minimum.inline,
|
Some((Au::zero(), Au::zero(), false)),
|
||||||
false,
|
)
|
||||||
));
|
.unwrap_or((auto_minimum.inline, auto_minimum.inline, false));
|
||||||
let (mut max_min_content, max_max_content, max_depends_on_block_constraints) =
|
let (mut max_min_content, max_max_content, max_depends_on_block_constraints) =
|
||||||
resolve_non_initial(content_box_sizes.inline.max)
|
resolve_non_initial(content_box_sizes.inline.max, None)
|
||||||
.map(|(min_content, max_content, depends_on_block_constraints)| {
|
.map(|(min_content, max_content, depends_on_block_constraints)| {
|
||||||
(
|
(
|
||||||
Some(min_content),
|
Some(min_content),
|
||||||
|
|
2
tests/wpt/meta/MANIFEST.json
vendored
2
tests/wpt/meta/MANIFEST.json
vendored
|
@ -596233,7 +596233,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"keyword-sizes-for-intrinsic-contributions.html": [
|
"keyword-sizes-for-intrinsic-contributions.html": [
|
||||||
"5a2a9ab615368d1cc3181cf84d9ebdefaf79368a",
|
"dc287b195907e2b114a4d035470dde94f4039b84",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
[keyword-sizes-for-intrinsic-contributions.html]
|
|
||||||
[.test 15]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.test 19]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.test 23]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.test 27]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.test 31]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.test 35]
|
|
||||||
expected: FAIL
|
|
|
@ -47,20 +47,20 @@
|
||||||
<div class="wrapper" style="width: 0px">
|
<div class="wrapper" style="width: 0px">
|
||||||
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="70"><div style="width: fit-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="70"><div style="width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="70"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test width" data-expected-width="70"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 100px">
|
<div class="wrapper" style="width: 100px">
|
||||||
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="90"><div style="width: fit-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="90"><div style="width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="90"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test width" data-expected-width="90"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 200px">
|
<div class="wrapper" style="width: 200px">
|
||||||
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="70"><div style="width: min-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="150"><div style="width: fit-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="150"><div style="width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test width" data-expected-width="150"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
<div class="test width" data-expected-width="150"><div style="width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test width" data-expected-width="150"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -69,20 +69,20 @@
|
||||||
<div class="wrapper" style="width: 0px">
|
<div class="wrapper" style="width: 0px">
|
||||||
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="70"><div style="min-width: fit-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="70"><div style="min-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 100px">
|
<div class="wrapper" style="width: 100px">
|
||||||
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="90"><div style="min-width: fit-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="90"><div style="min-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 200px">
|
<div class="wrapper" style="width: 200px">
|
||||||
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="70"><div style="min-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="150"><div style="min-width: fit-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="150"><div style="min-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
<div class="test min-width" data-expected-width="150"><div style="min-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test min-width" data-expected-width="10"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -91,20 +91,20 @@
|
||||||
<div class="wrapper" style="width: 0px">
|
<div class="wrapper" style="width: 0px">
|
||||||
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="70"><div style="max-width: fit-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="70"><div style="max-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 100px">
|
<div class="wrapper" style="width: 100px">
|
||||||
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="90"><div style="max-width: fit-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="90"><div style="max-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="wrapper" style="width: 200px">
|
<div class="wrapper" style="width: 200px">
|
||||||
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="70"><div style="max-width: min-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="150"><div style="max-width: fit-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="150"><div style="max-width: fit-content">XXX XXX</div></div>
|
||||||
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
|
||||||
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
<div class="test max-width" data-expected-width="150"><div style="max-width: max-content">XXX XXX</div></div>
|
||||||
|
<div class="test max-width" data-expected-width="210"><div class="stretch">XXX XXX</div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue