aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/layout_wrapper.rs
diff options
context:
space:
mode:
authorBobby Holley <bobbyholley@gmail.com>2016-10-30 20:45:29 -0700
committerBobby Holley <bobbyholley@gmail.com>2016-11-01 11:03:04 -0700
commit71b9004d861e3b381178e1c668bc78423e6d4bc1 (patch)
tree22671ab8097485a78273155747144e56a6ca99a6 /components/script/layout_wrapper.rs
parentb98bb241dc84196dde1c836ff965d7d77fdd458a (diff)
downloadservo-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.rs47
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.
///