mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Clear self.pending_whitespace.max_content
in forced_line_break()
(#33469)
If we encountered a preserved line break after some whitespace, we were including the space in the max-content size of the following line. So just like `line_break_opportunity()` was already clearing `self.pending_whitespace.min_content`, `forced_line_break()` needs to clear `self.pending_whitespace.max_content` too. Also some cosmetic refactoring. Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
10c64820e8
commit
5b6a9110c7
3 changed files with 33 additions and 9 deletions
|
@ -2354,7 +2354,6 @@ impl<'layout_data> ContentSizesComputation<'layout_data> {
|
||||||
// and start measuring from the inline origin once more.
|
// and start measuring from the inline origin once more.
|
||||||
if run.is_single_preserved_newline() {
|
if run.is_single_preserved_newline() {
|
||||||
self.forced_line_break();
|
self.forced_line_break();
|
||||||
self.current_line = ContentSizes::zero();
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if !matches!(
|
if !matches!(
|
||||||
|
@ -2430,18 +2429,19 @@ impl<'layout_data> ContentSizesComputation<'layout_data> {
|
||||||
// it needs to either hang or be removed. If that isn't the case,
|
// it needs to either hang or be removed. If that isn't the case,
|
||||||
// `commit_pending_whitespace()` should be called first.
|
// `commit_pending_whitespace()` should be called first.
|
||||||
self.pending_whitespace.min_content = Au::zero();
|
self.pending_whitespace.min_content = Au::zero();
|
||||||
self.paragraph.min_content =
|
let current_min_content = mem::take(&mut self.current_line.min_content);
|
||||||
std::cmp::max(self.paragraph.min_content, self.current_line.min_content);
|
self.paragraph.min_content.max_assign(current_min_content);
|
||||||
self.current_line.min_content = Au::zero();
|
|
||||||
self.had_content_yet_for_min_content = false;
|
self.had_content_yet_for_min_content = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn forced_line_break(&mut self) {
|
fn forced_line_break(&mut self) {
|
||||||
|
// Handle the line break for min-content sizes.
|
||||||
self.line_break_opportunity();
|
self.line_break_opportunity();
|
||||||
self.paragraph.max_content =
|
|
||||||
std::cmp::max(self.paragraph.max_content, self.current_line.max_content);
|
// Repeat the same logic, but now for max-content sizes.
|
||||||
self.current_line.max_content = Au::zero();
|
self.pending_whitespace.max_content = Au::zero();
|
||||||
self.had_content_yet_for_min_content = false;
|
let current_max_content = mem::take(&mut self.current_line.max_content);
|
||||||
|
self.paragraph.max_content.max_assign(current_max_content);
|
||||||
self.had_content_yet_for_max_content = false;
|
self.had_content_yet_for_max_content = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
tests/wpt/meta/MANIFEST.json
vendored
2
tests/wpt/meta/MANIFEST.json
vendored
|
@ -567209,7 +567209,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"white-space-intrinsic-size-021.html": [
|
"white-space-intrinsic-size-021.html": [
|
||||||
"a209f72c30a5a48ed4c185f9d3962abeb68399fb",
|
"f9c246d4899b58dbcf2dc08655c8bc1f39995e5a",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
hr {
|
hr {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
x-br::before {
|
||||||
|
content: "\a";
|
||||||
|
white-space: preserve-breaks;
|
||||||
|
}
|
||||||
.collapse.wrap {
|
.collapse.wrap {
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
@ -152,6 +156,16 @@ hr {
|
||||||
<div class="break-spaces wrap" data-expected-client-width="20" data-expected-client-height="20">X É</div>
|
<div class="break-spaces wrap" data-expected-client-width="20" data-expected-client-height="20">X É</div>
|
||||||
<div class="break-spaces nowrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
<div class="break-spaces nowrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="container narrow">
|
||||||
|
<div class="collapse wrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="collapse nowrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve wrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve nowrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve-breaks wrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve-breaks nowrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="break-spaces wrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="break-spaces nowrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
@ -255,6 +269,16 @@ hr {
|
||||||
<div class="break-spaces wrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
<div class="break-spaces wrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
||||||
<div class="break-spaces nowrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
<div class="break-spaces nowrap" data-expected-client-width="40" data-expected-client-height="10">X É</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="container wide">
|
||||||
|
<div class="collapse wrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="collapse nowrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve wrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve nowrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve-breaks wrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="preserve-breaks nowrap" data-expected-client-width="10" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="break-spaces wrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
<div class="break-spaces nowrap" data-expected-client-width="20" data-expected-client-height="20">X <x-br></x-br>É</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue