aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/css
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2014-10-14 16:51:30 -0600
committerbors-servo <metajack+bors@gmail.com>2014-10-14 16:51:30 -0600
commit56989b8dec4aa95a3b484d45f15b23f9b3daaf13 (patch)
tree91c6c430b9a9513be320bc69d79b63f1523f2af5 /components/layout/css
parente2d7777c41135b71293c195d2a9d7a1bc2afd0ca (diff)
parentf552e2f7501337fae76ad66401a1e011d00211df (diff)
downloadservo-56989b8dec4aa95a3b484d45f15b23f9b3daaf13.tar.gz
servo-56989b8dec4aa95a3b484d45f15b23f9b3daaf13.zip
auto merge of #3640 : cgaebel/servo/incremental-flow-construction, r=pcwalton
This also hides the not-yet-working parts of incremental reflow behind a runtime flag. As I get the failing reftests passing, I'll send pull requests for them one by one.
Diffstat (limited to 'components/layout/css')
-rw-r--r--components/layout/css/node_style.rs5
-rw-r--r--components/layout/css/node_util.rs15
2 files changed, 20 insertions, 0 deletions
diff --git a/components/layout/css/node_style.rs b/components/layout/css/node_style.rs
index 8512429442a..35bb1b1a8fa 100644
--- a/components/layout/css/node_style.rs
+++ b/components/layout/css/node_style.rs
@@ -14,6 +14,7 @@ use sync::Arc;
/// Node mixin providing `style` method that returns a `NodeStyle`
pub trait StyledNode {
fn style<'a>(&'a self) -> &'a Arc<ComputedValues>;
+ fn unstyle(self);
fn restyle_damage(self) -> RestyleDamage;
fn set_restyle_damage(self, damage: RestyleDamage);
}
@@ -24,6 +25,10 @@ impl<'ln> StyledNode for ThreadSafeLayoutNode<'ln> {
self.get_css_select_results()
}
+ fn unstyle(self) {
+ self.remove_css_select_results()
+ }
+
fn restyle_damage(self) -> RestyleDamage {
self.get_restyle_damage()
}
diff --git a/components/layout/css/node_util.rs b/components/layout/css/node_util.rs
index 17d181b9937..c5268abf169 100644
--- a/components/layout/css/node_util.rs
+++ b/components/layout/css/node_util.rs
@@ -13,6 +13,7 @@ use sync::Arc;
pub trait NodeUtil {
fn get_css_select_results<'a>(&'a self) -> &'a Arc<ComputedValues>;
fn have_css_select_results(&self) -> bool;
+ fn remove_css_select_results(self);
fn get_restyle_damage(self) -> RestyleDamage;
fn set_restyle_damage(self, damage: RestyleDamage);
@@ -60,6 +61,20 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
layout_data_ref.as_ref().unwrap().shared_data.style.is_some()
}
+ fn remove_css_select_results(self) {
+ let mut layout_data_ref = self.mutate_layout_data();
+ let layout_data = layout_data_ref.as_mut().expect("no layout data");
+
+ let style =
+ match self.get_pseudo_element_type() {
+ Before(_) => &mut layout_data.data.before_style,
+ After (_) => &mut layout_data.data.after_style,
+ Normal => &mut layout_data.shared_data.style,
+ };
+
+ *style = None;
+ }
+
/// Get the description of how to account for recent style changes.
/// This is a simple bitfield and fine to copy by value.
fn get_restyle_damage(self) -> RestyleDamage {