mirror of
https://github.com/servo/servo.git
synced 2025-06-13 02:44:29 +00:00
Auto merge of #13470 - pcwalton:inline-absolute-hypothetical-baseline, r=notriddle
layout: Improve the interaction between baseline-offset-of-last-line-in-flow logic and inline absolute hypothetical boxes. See commits for details. These changes place the heart icon on Twitter in the right place. r? @notriddle <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13470) <!-- Reviewable:end -->
This commit is contained in:
commit
ccfc60161b
5 changed files with 49 additions and 7 deletions
|
@ -1404,7 +1404,9 @@ impl<'a> ImmutableFlowUtils for &'a Flow {
|
||||||
fn baseline_offset_of_last_line_box_in_flow(self) -> Option<Au> {
|
fn baseline_offset_of_last_line_box_in_flow(self) -> Option<Au> {
|
||||||
for kid in base(self).children.iter().rev() {
|
for kid in base(self).children.iter().rev() {
|
||||||
if kid.is_inline_flow() {
|
if kid.is_inline_flow() {
|
||||||
return kid.as_inline().baseline_offset_of_last_line()
|
if let Some(baseline_offset) = kid.as_inline().baseline_offset_of_last_line() {
|
||||||
|
return Some(baseline_offset)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if kid.is_block_like() &&
|
if kid.is_block_like() &&
|
||||||
kid.as_block().formatting_context_type() == FormattingContextType::None &&
|
kid.as_block().formatting_context_type() == FormattingContextType::None &&
|
||||||
|
|
|
@ -1262,13 +1262,16 @@ impl InlineFlow {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn baseline_offset_of_last_line(&self) -> Option<Au> {
|
pub fn baseline_offset_of_last_line(&self) -> Option<Au> {
|
||||||
match self.lines.last() {
|
// Find the last line that doesn't consist entirely of hypothetical boxes.
|
||||||
None => None,
|
for line in self.lines.iter().rev() {
|
||||||
Some(ref last_line) => {
|
if (line.range.begin().get()..line.range.end().get()).any(|index| {
|
||||||
Some(last_line.bounds.start.b + last_line.bounds.size.block -
|
!self.fragments.fragments[index as usize].is_hypothetical()
|
||||||
last_line.inline_metrics.depth_below_baseline)
|
}) {
|
||||||
|
return Some(line.bounds.start.b + line.bounds.size.block -
|
||||||
|
line.inline_metrics.depth_below_baseline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1451,7 +1454,6 @@ impl Flow for InlineFlow {
|
||||||
self.minimum_depth_below_baseline);
|
self.minimum_depth_below_baseline);
|
||||||
scanner.scan_for_lines(self, layout_context);
|
scanner.scan_for_lines(self, layout_context);
|
||||||
|
|
||||||
|
|
||||||
// Now, go through each line and lay out the fragments inside.
|
// Now, go through each line and lay out the fragments inside.
|
||||||
let line_count = self.lines.len();
|
let line_count = self.lines.len();
|
||||||
for (line_index, line) in self.lines.iter_mut().enumerate() {
|
for (line_index, line) in self.lines.iter_mut().enumerate() {
|
||||||
|
|
|
@ -2372,6 +2372,18 @@
|
||||||
"url": "/_mozilla/css/incremental_visibility_a.html"
|
"url": "/_mozilla/css/incremental_visibility_a.html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"css/inline_absolute_hypothetical_baseline_a.html": [
|
||||||
|
{
|
||||||
|
"path": "css/inline_absolute_hypothetical_baseline_a.html",
|
||||||
|
"references": [
|
||||||
|
[
|
||||||
|
"/_mozilla/css/inline_absolute_hypothetical_baseline_ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"url": "/_mozilla/css/inline_absolute_hypothetical_baseline_a.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"css/inline_absolute_hypothetical_clip_a.html": [
|
"css/inline_absolute_hypothetical_clip_a.html": [
|
||||||
{
|
{
|
||||||
"path": "css/inline_absolute_hypothetical_clip_a.html",
|
"path": "css/inline_absolute_hypothetical_clip_a.html",
|
||||||
|
@ -16010,6 +16022,18 @@
|
||||||
"url": "/_mozilla/css/incremental_visibility_a.html"
|
"url": "/_mozilla/css/incremental_visibility_a.html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"css/inline_absolute_hypothetical_baseline_a.html": [
|
||||||
|
{
|
||||||
|
"path": "css/inline_absolute_hypothetical_baseline_a.html",
|
||||||
|
"references": [
|
||||||
|
[
|
||||||
|
"/_mozilla/css/inline_absolute_hypothetical_baseline_ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"url": "/_mozilla/css/inline_absolute_hypothetical_baseline_a.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"css/inline_absolute_hypothetical_clip_a.html": [
|
"css/inline_absolute_hypothetical_clip_a.html": [
|
||||||
{
|
{
|
||||||
"path": "css/inline_absolute_hypothetical_clip_a.html",
|
"path": "css/inline_absolute_hypothetical_clip_a.html",
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title></title>
|
||||||
|
<link rel="match" href="inline_absolute_hypothetical_baseline_ref.html">
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<div>A</div>
|
||||||
|
<span style="position: absolute;">B</span>
|
||||||
|
</div>
|
||||||
|
C
|
||||||
|
D
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<div>A C D</div>
|
||||||
|
<div>B</div>
|
Loading…
Add table
Add a link
Reference in a new issue