aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/inline.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2015-09-03 11:41:24 -0700
committerPatrick Walton <pcwalton@mimiga.net>2015-09-03 15:37:40 -0700
commitdba3e41a63506842e84e43451d6f41156c672321 (patch)
treeab5ea2654e5bc4be0168b3b4576a84ccd5bab028 /components/layout/inline.rs
parent05deb3dcc8be9a0a623536467628aa68ae754918 (diff)
downloadservo-dba3e41a63506842e84e43451d6f41156c672321.tar.gz
servo-dba3e41a63506842e84e43451d6f41156c672321.zip
layout: Lay absolutely-positioned blocks with inline containing blocks out of
flow. Removes the long space before the site-specific drop-down in the Google SERPs.
Diffstat (limited to 'components/layout/inline.rs')
-rw-r--r--components/layout/inline.rs25
1 files changed, 16 insertions, 9 deletions
diff --git a/components/layout/inline.rs b/components/layout/inline.rs
index 6066b4a8473..ac2d4755d13 100644
--- a/components/layout/inline.rs
+++ b/components/layout/inline.rs
@@ -738,13 +738,17 @@ impl LineBreaker {
layout_context: &LayoutContext) {
let indentation = self.indentation_for_pending_fragment();
self.pending_line.range.extend_by(FragmentIndex(1));
- self.pending_line.bounds.size.inline = self.pending_line.bounds.size.inline +
- fragment.margin_box_inline_size() +
- indentation;
- self.pending_line.inline_metrics =
- self.new_inline_metrics_for_line(&fragment, layout_context);
- self.pending_line.bounds.size.block =
- self.new_block_size_for_line(&fragment, layout_context);
+
+ if !fragment.is_inline_absolute() {
+ self.pending_line.bounds.size.inline = self.pending_line.bounds.size.inline +
+ fragment.margin_box_inline_size() +
+ indentation;
+ self.pending_line.inline_metrics =
+ self.new_inline_metrics_for_line(&fragment, layout_context);
+ self.pending_line.bounds.size.block =
+ self.new_block_size_for_line(&fragment, layout_context);
+ }
+
self.new_fragments.push(fragment);
}
@@ -1079,8 +1083,11 @@ impl InlineFlow {
fragment.border_box.size.inline,
fragment.border_box.size.block);
fragment.update_late_computed_inline_position_if_necessary();
- inline_start_position_for_fragment = inline_start_position_for_fragment +
- fragment.border_box.size.inline + fragment.margin.inline_end;
+
+ if !fragment.is_inline_absolute() {
+ inline_start_position_for_fragment = inline_start_position_for_fragment +
+ fragment.border_box.size.inline + fragment.margin.inline_end;
+ }
}
}
}