diff options
Diffstat (limited to 'components/layout/wrapper.rs')
-rw-r--r-- | components/layout/wrapper.rs | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index 1c8f1ee1d8e..faacdbf44f0 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -64,13 +64,13 @@ use std::sync::Arc; use string_cache::{Atom, Namespace}; use style::computed_values::content::ContentItem; use style::computed_values::{content, display}; -use style::data::PrivateStyleData; use style::dom::{TDocument, TElement, TNode, UnsafeNode}; use style::element_state::*; use style::properties::ComputedValues; use style::properties::{PropertyDeclaration, PropertyDeclarationBlock}; use style::restyle_hints::ElementSnapshot; -use style::selector_impl::{NonTSPseudoClass, ServoSelectorImpl}; +use style::selector_impl::{NonTSPseudoClass, PseudoElement, ServoSelectorImpl}; +use style::servo::PrivateStyleData; use url::Url; use util::str::{is_whitespace, search_index}; @@ -664,16 +664,20 @@ pub trait ThreadSafeLayoutNode<'ln> : Clone + Copy + Sized { #[inline] fn get_before_pseudo(&self) -> Option<Self> { - self.borrow_layout_data().unwrap().style_data.before_style.as_ref().map(|style| { - self.with_pseudo(PseudoElementType::Before(style.get_box().display)) - }) + self.borrow_layout_data().unwrap() + .style_data.per_pseudo + .get(&PseudoElement::Before).unwrap_or(&None).as_ref().map(|style| { + self.with_pseudo(PseudoElementType::Before(style.get_box().display)) + }) } #[inline] fn get_after_pseudo(&self) -> Option<Self> { - self.borrow_layout_data().unwrap().style_data.after_style.as_ref().map(|style| { - self.with_pseudo(PseudoElementType::After(style.get_box().display)) - }) + self.borrow_layout_data().unwrap() + .style_data.per_pseudo + .get(&PseudoElement::After).unwrap_or(&None).as_ref().map(|style| { + self.with_pseudo(PseudoElementType::After(style.get_box().display)) + }) } /// Borrows the layout data immutably. Fails on a conflicting borrow. @@ -696,8 +700,8 @@ pub trait ThreadSafeLayoutNode<'ln> : Clone + Copy + Sized { fn style(&self) -> Ref<Arc<ComputedValues>> { Ref::map(self.borrow_layout_data().unwrap(), |data| { let style = match self.get_pseudo_element_type() { - PseudoElementType::Before(_) => &data.style_data.before_style, - PseudoElementType::After(_) => &data.style_data.after_style, + PseudoElementType::Before(_) => data.style_data.per_pseudo.get(&PseudoElement::Before).unwrap(), + PseudoElementType::After(_) => data.style_data.per_pseudo.get(&PseudoElement::After).unwrap(), PseudoElementType::Normal => &data.style_data.style, }; style.as_ref().unwrap() @@ -711,9 +715,19 @@ pub trait ThreadSafeLayoutNode<'ln> : Clone + Copy + Sized { let mut data = self.mutate_layout_data().unwrap(); let style = match self.get_pseudo_element_type() { - PseudoElementType::Before(_) => &mut data.style_data.before_style, - PseudoElementType::After (_) => &mut data.style_data.after_style, - PseudoElementType::Normal => &mut data.style_data.style, + PseudoElementType::Before(_) => { + match data.style_data.per_pseudo.get_mut(&PseudoElement::Before) { + None => return, + Some(style) => style, + } + } + PseudoElementType::After(_) => { + match data.style_data.per_pseudo.get_mut(&PseudoElement::After) { + None => return, + Some(style) => style, + } + } + PseudoElementType::Normal => &mut data.style_data.style, }; *style = None; @@ -934,10 +948,11 @@ impl<'ln> ThreadSafeLayoutNode<'ln> for ServoThreadSafeLayoutNode<'ln> { let data = &self.borrow_layout_data().unwrap().style_data; let style = if self.pseudo.is_before() { - &data.before_style + data.per_pseudo.get(&PseudoElement::Before).unwrap() } else { - &data.after_style + data.per_pseudo.get(&PseudoElement::After).unwrap() }; + return match style.as_ref().unwrap().get_box().content { content::T::Content(ref value) if !value.is_empty() => { TextContent::GeneratedContent((*value).clone()) |