diff options
author | Bobby Holley <bobbyholley@gmail.com> | 2016-10-30 20:45:29 -0700 |
---|---|---|
committer | Bobby Holley <bobbyholley@gmail.com> | 2016-11-01 11:03:04 -0700 |
commit | 71b9004d861e3b381178e1c668bc78423e6d4bc1 (patch) | |
tree | 22671ab8097485a78273155747144e56a6ca99a6 /components/script/layout_wrapper.rs | |
parent | b98bb241dc84196dde1c836ff965d7d77fdd458a (diff) | |
download | servo-71b9004d861e3b381178e1c668bc78423e6d4bc1.tar.gz servo-71b9004d861e3b381178e1c668bc78423e6d4bc1.zip |
Replace begin_styling with a centralized mechanism to set a node up for either styling or restyling.
We also make sure that an element never has an ElementData with ElementDataStyles::Uninitialized,
and eagerly call prepare_for_styling whenever an ElementData is instantiated.
MozReview-Commit-ID: 9YP6eSmdMt0
Diffstat (limited to 'components/script/layout_wrapper.rs')
-rw-r--r-- | components/script/layout_wrapper.rs | 47 |
1 files changed, 11 insertions, 36 deletions
diff --git a/components/script/layout_wrapper.rs b/components/script/layout_wrapper.rs index 8e3bbbb737b..2120f4ae5cc 100644 --- a/components/script/layout_wrapper.rs +++ b/components/script/layout_wrapper.rs @@ -56,7 +56,7 @@ use std::mem::transmute; use std::sync::Arc; use std::sync::atomic::Ordering; use string_cache::{Atom, Namespace}; -use style::atomic_refcell::{AtomicRef, AtomicRefCell, AtomicRefMut}; +use style::atomic_refcell::{AtomicRef, AtomicRefCell}; use style::attr::AttrValue; use style::computed_values::display; use style::context::SharedStyleContext; @@ -252,6 +252,10 @@ impl<'ln> LayoutNode for ServoLayoutNode<'ln> { self.script_type_id().into() } + unsafe fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData) { + self.get_jsmanaged().init_style_and_layout_data(data); + } + fn has_changed(&self) -> bool { unsafe { self.node.get_flag(HAS_CHANGED) } } @@ -269,42 +273,24 @@ impl<'ln> GetLayoutData for ServoLayoutNode<'ln> { self.get_jsmanaged().get_style_and_layout_data() } } - - fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData) { - unsafe { - self.get_jsmanaged().init_style_and_layout_data(data); - } - } } impl<'le> GetLayoutData for ServoLayoutElement<'le> { fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> { self.as_node().get_style_and_layout_data() } - - fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData) { - self.as_node().init_style_and_layout_data(data) - } } impl<'ln> GetLayoutData for ServoThreadSafeLayoutNode<'ln> { fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> { self.node.get_style_and_layout_data() } - - fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData) { - self.node.init_style_and_layout_data(data) - } } impl<'le> GetLayoutData for ServoThreadSafeLayoutElement<'le> { fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> { self.element.as_node().get_style_and_layout_data() } - - fn init_style_and_layout_data(&self, data: OpaqueStyleAndLayoutData) { - self.element.as_node().init_style_and_layout_data(data) - } } impl<'ln> ServoLayoutNode<'ln> { @@ -506,20 +492,11 @@ impl<'le> TElement for ServoLayoutElement<'le> { old_value - 1 } - fn begin_styling(&self) -> AtomicRefMut<ElementData> { - let mut data = self.mutate_data().unwrap(); - data.gather_previous_styles(|| None); - data - } - fn borrow_data(&self) -> Option<AtomicRef<ElementData>> { - self.get_style_data().map(|d| d.borrow()) + self.get_data().map(|d| d.borrow()) } -} - -impl<'le> LayoutElement for ServoLayoutElement<'le> { - fn get_style_data(&self) -> Option<&AtomicRefCell<ElementData>> { + fn get_data(&self) -> Option<&AtomicRefCell<ElementData>> { unsafe { self.get_style_and_layout_data().map(|d| { let ppld: &AtomicRefCell<PartialPersistentLayoutData> = &**d.ptr; @@ -551,10 +528,6 @@ impl<'le> ServoLayoutElement<'le> { } } - fn mutate_data(&self) -> Option<AtomicRefMut<ElementData>> { - self.get_style_data().map(|d| d.borrow_mut()) - } - fn get_partial_layout_data(&self) -> Option<&AtomicRefCell<PartialPersistentLayoutData>> { unsafe { self.get_style_and_layout_data().map(|d| &**d.ptr) @@ -836,7 +809,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { // also not visible to script.) debug_assert!(self.is_text_node()); let parent = self.node.parent_node().unwrap().as_element().unwrap(); - let parent_data = parent.get_style_data().unwrap().borrow(); + let parent_data = parent.get_data().unwrap().borrow(); parent_data.current_styles().primary.clone() } @@ -1089,10 +1062,12 @@ impl<'le> ThreadSafeLayoutElement for ServoThreadSafeLayoutElement<'le> { } fn get_style_data(&self) -> Option<&AtomicRefCell<ElementData>> { - self.element.get_style_data() + self.element.get_data() } } +impl<'le> LayoutElement for ServoLayoutElement<'le> {} + /// This implementation of `::selectors::Element` is used for implementing lazy /// pseudo-elements. /// |