diff options
author | Bobby Holley <bobbyholley@gmail.com> | 2015-10-12 17:43:49 -0700 |
---|---|---|
committer | Bobby Holley <bobbyholley@gmail.com> | 2015-10-27 12:41:16 -0700 |
commit | 441c84d75d412d24281b67821662ee50e8b1152b (patch) | |
tree | a9d05524b441a863382aed6f0f6cbc8496a4de59 /components/layout/wrapper.rs | |
parent | 85596b55106775d1eef948c39708c1b02499a9a4 (diff) | |
download | servo-441c84d75d412d24281b67821662ee50e8b1152b.tar.gz servo-441c84d75d412d24281b67821662ee50e8b1152b.zip |
Pass the document instead of the documentElement to reflow.
Diffstat (limited to 'components/layout/wrapper.rs')
-rw-r--r-- | components/layout/wrapper.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index c59fb978e38..d42fa386ec2 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -43,6 +43,7 @@ use script::dom::bindings::codegen::InheritTypes::{HTMLElementTypeId, NodeTypeId use script::dom::bindings::conversions::Castable; use script::dom::bindings::js::LayoutJS; use script::dom::characterdata::LayoutCharacterDataHelpers; +use script::dom::document::{Document, LayoutDocumentHelpers}; use script::dom::element; use script::dom::element::{Element, LayoutElementHelpers, RawLayoutElementHelpers}; use script::dom::htmlcanvaselement::{LayoutHTMLCanvasElementHelpers, HTMLCanvasData}; @@ -105,6 +106,12 @@ impl<'ln> LayoutNode<'ln> { } } + pub fn is_element(&self) -> bool { + unsafe { + self.node.is_element_for_layout() + } + } + pub fn dump(self) { self.dump_indent(0); } @@ -336,6 +343,30 @@ impl<'a> Iterator for LayoutTreeIterator<'a> { } } +// A wrapper around documents that ensures ayout can only ever access safe properties. +#[derive(Copy, Clone)] +pub struct LayoutDocument<'le> { + document: LayoutJS<Document>, + chain: PhantomData<&'le ()>, +} + +impl<'le> LayoutDocument<'le> { + pub fn as_node(&self) -> LayoutNode<'le> { + LayoutNode { + node: self.document.upcast(), + chain: PhantomData, + } + } + + pub fn root_node(&self) -> Option<LayoutNode<'le>> { + let mut node = self.as_node().first_child(); + while node.is_some() && !node.unwrap().is_element() { + node = node.unwrap().next_sibling(); + } + node + } +} + /// A wrapper around elements that ensures layout can only ever access safe properties. #[derive(Copy, Clone)] pub struct LayoutElement<'le> { |