aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/main/css/node_util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/main/css/node_util.rs')
-rw-r--r--src/components/main/css/node_util.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/components/main/css/node_util.rs b/src/components/main/css/node_util.rs
index 0342d8e2dc7..a63ee695af5 100644
--- a/src/components/main/css/node_util.rs
+++ b/src/components/main/css/node_util.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use layout::aux::LayoutAuxMethods;
+use layout::incremental::RestyleDamage;
use std::cast::transmute;
use newcss::complete::CompleteSelectResults;
@@ -11,6 +12,10 @@ use script::dom::node::{AbstractNode, LayoutView};
pub trait NodeUtil<'self> {
fn get_css_select_results(self) -> &'self CompleteSelectResults;
fn set_css_select_results(self, decl: CompleteSelectResults);
+ fn have_css_select_results(self) -> bool;
+
+ fn get_restyle_damage(self) -> RestyleDamage;
+ fn set_restyle_damage(self, damage: RestyleDamage);
}
impl<'self> NodeUtil<'self> for AbstractNode<LayoutView> {
@@ -32,6 +37,11 @@ impl<'self> NodeUtil<'self> for AbstractNode<LayoutView> {
}
}
+ /// Does this node have a computed style yet?
+ fn have_css_select_results(self) -> bool {
+ self.has_layout_data() && self.layout_data().style.is_some()
+ }
+
/// Update the computed style of an HTML element with a style specified by CSS.
fn set_css_select_results(self, decl: CompleteSelectResults) {
if !self.has_layout_data() {
@@ -40,4 +50,30 @@ impl<'self> NodeUtil<'self> for AbstractNode<LayoutView> {
self.layout_data().style = Some(decl);
}
+
+ /// 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 {
+ // For DOM elements, if we haven't computed damage yet, assume the worst.
+ // Other nodes don't have styles.
+ let default = if self.is_element() {
+ RestyleDamage::all()
+ } else {
+ RestyleDamage::none()
+ };
+
+ if !self.has_layout_data() {
+ return default;
+ }
+ self.layout_data().restyle_damage.get_or_default(default)
+ }
+
+ /// Set the restyle damage field.
+ fn set_restyle_damage(self, damage: RestyleDamage) {
+ if !self.has_layout_data() {
+ fail!(~"set_restyle_damage() called on a node without aux data!");
+ }
+
+ self.layout_data().restyle_damage = Some(damage);
+ }
}