aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/script/layout_wrapper.rs13
-rw-r--r--components/script_layout_interface/wrapper_traits.rs10
-rw-r--r--components/style/dom.rs10
3 files changed, 21 insertions, 12 deletions
diff --git a/components/script/layout_wrapper.rs b/components/script/layout_wrapper.rs
index f8eb5236882..ea22a85c5c5 100644
--- a/components/script/layout_wrapper.rs
+++ b/components/script/layout_wrapper.rs
@@ -58,7 +58,8 @@ use style::attr::AttrValue;
use style::computed_values::display;
use style::context::SharedStyleContext;
use style::data::PrivateStyleData;
-use style::dom::{NodeInfo, OpaqueNode, PresentationalHintsSynthetizer, TDocument, TElement, TNode, UnsafeNode};
+use style::dom::{LayoutIterator, NodeInfo, OpaqueNode, PresentationalHintsSynthetizer, TDocument, TElement, TNode};
+use style::dom::UnsafeNode;
use style::element_state::*;
use style::properties::{ComputedValues, PropertyDeclarationBlock};
use style::refcell::{Ref, RefCell, RefMut};
@@ -149,10 +150,10 @@ impl<'ln> TNode for ServoLayoutNode<'ln> {
self.dump_style_indent(0);
}
- fn children(self) -> ServoChildrenIterator<'ln> {
- ServoChildrenIterator {
+ fn children(self) -> LayoutIterator<ServoChildrenIterator<'ln>> {
+ LayoutIterator(ServoChildrenIterator {
current: self.first_child(),
- }
+ })
}
fn opaque(&self) -> OpaqueNode {
@@ -771,8 +772,8 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> {
self.node.debug_id()
}
- fn children(&self) -> Self::ChildrenIterator {
- ThreadSafeLayoutNodeChildrenIterator::new(*self)
+ fn children(&self) -> LayoutIterator<Self::ChildrenIterator> {
+ LayoutIterator(ThreadSafeLayoutNodeChildrenIterator::new(*self))
}
fn as_element(&self) -> ServoThreadSafeLayoutElement<'ln> {
diff --git a/components/script_layout_interface/wrapper_traits.rs b/components/script_layout_interface/wrapper_traits.rs
index 51133fc2daf..dcb1f68cfb4 100644
--- a/components/script_layout_interface/wrapper_traits.rs
+++ b/components/script_layout_interface/wrapper_traits.rs
@@ -15,7 +15,7 @@ use std::sync::Arc;
use string_cache::{Atom, Namespace};
use style::computed_values::display;
use style::context::SharedStyleContext;
-use style::dom::{NodeInfo, PresentationalHintsSynthetizer, TNode};
+use style::dom::{LayoutIterator, NodeInfo, PresentationalHintsSynthetizer, TNode};
use style::dom::OpaqueNode;
use style::properties::ServoComputedValues;
use style::refcell::{Ref, RefCell};
@@ -81,10 +81,10 @@ pub trait LayoutNode: TNode {
fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData);
fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData>;
- fn rev_children(self) -> ReverseChildrenIterator<Self> {
- ReverseChildrenIterator {
+ fn rev_children(self) -> LayoutIterator<ReverseChildrenIterator<Self>> {
+ LayoutIterator(ReverseChildrenIterator {
current: self.last_child(),
- }
+ })
}
fn traverse_preorder(self) -> TreeIterator<Self> {
@@ -169,7 +169,7 @@ pub trait ThreadSafeLayoutNode: Clone + Copy + NodeInfo + PartialEq + Sized {
fn debug_id(self) -> usize;
/// Returns an iterator over this node's children.
- fn children(&self) -> Self::ChildrenIterator;
+ fn children(&self) -> LayoutIterator<Self::ChildrenIterator>;
/// If this is an element, accesses the element data. Fails if this is not an element node.
#[inline]
diff --git a/components/style/dom.rs b/components/style/dom.rs
index 844acf52b72..38e40c1409a 100644
--- a/components/style/dom.rs
+++ b/components/style/dom.rs
@@ -73,6 +73,14 @@ pub trait NodeInfo {
fn is_text_node(&self) -> bool;
}
+pub struct LayoutIterator<T>(pub T);
+impl<T, I> Iterator for LayoutIterator<T> where T: Iterator<Item=I>, I: NodeInfo {
+ type Item = I;
+ fn next(&mut self) -> Option<I> {
+ self.0.next()
+ }
+}
+
pub trait TNode : Sized + Copy + Clone + NodeInfo {
type ConcreteElement: TElement<ConcreteNode = Self, ConcreteDocument = Self::ConcreteDocument>;
type ConcreteDocument: TDocument<ConcreteNode = Self, ConcreteElement = Self::ConcreteElement>;
@@ -87,7 +95,7 @@ pub trait TNode : Sized + Copy + Clone + NodeInfo {
fn dump_style(self);
/// Returns an iterator over this node's children.
- fn children(self) -> Self::ConcreteChildrenIterator;
+ fn children(self) -> LayoutIterator<Self::ConcreteChildrenIterator>;
/// Converts self into an `OpaqueNode`.
fn opaque(&self) -> OpaqueNode;