aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_thread_2020
diff options
context:
space:
mode:
authorAnthony Ramine <nox@nox.paris>2019-11-12 12:30:03 +0100
committerAnthony Ramine <nox@nox.paris>2019-11-25 10:54:46 +0100
commit144675677495b9c63c942f4458bc7965908deb94 (patch)
treec7422b1c7b87a1153024001f0c0352685112f92c /components/layout_thread_2020
parentea3249550467bd9f5a1de8271ed4fcaa70a7cdda (diff)
downloadservo-144675677495b9c63c942f4458bc7965908deb94.tar.gz
servo-144675677495b9c63c942f4458bc7965908deb94.zip
Pass a LayoutContext to TextRun::layout in 2020
Diffstat (limited to 'components/layout_thread_2020')
-rw-r--r--components/layout_thread_2020/lib.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index bf18c584231..67ae81ca0a7 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -1087,16 +1087,28 @@ impl LayoutThread {
RecalcStyle::pre_traverse(element, shared)
};
- if token.should_traverse() {
+ let box_tree = if token.should_traverse() {
driver::traverse_dom(&traversal, token, None);
let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal);
- let box_tree =
- BoxTreeRoot::construct(shared, document.root_element().unwrap().as_node());
- let fragment_tree = box_tree.layout(Size2D::new(
- self.viewport_size.width.to_f32_px(),
- self.viewport_size.height.to_f32_px(),
- ));
+ Some(BoxTreeRoot::construct(
+ shared,
+ document.root_element().unwrap().as_node(),
+ ))
+ } else {
+ None
+ };
+
+ layout_context = traversal.destroy();
+
+ if let Some(box_tree) = box_tree {
+ let fragment_tree = box_tree.layout(
+ &layout_context,
+ Size2D::new(
+ self.viewport_size.width.to_f32_px(),
+ self.viewport_size.height.to_f32_px(),
+ ),
+ );
*self.box_tree_root.borrow_mut() = Some(box_tree);
*self.fragment_tree_root.borrow_mut() = Some(fragment_tree);
}
@@ -1105,8 +1117,6 @@ impl LayoutThread {
unsafe { element.unset_snapshot_flags() }
}
- layout_context = traversal.destroy();
-
// GC the rule tree if some heuristics are met.
unsafe {
layout_context.style_context.stylist.rule_tree().maybe_gc();