aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-11-05 16:32:40 -0800
committerBrian Anderson <banderson@mozilla.com>2012-11-05 16:32:40 -0800
commit2daa422483eb8a3fd3cb03e9318990445f45a430 (patch)
treeae5b32b90565b8588763a9c78cf5f84cb8f3b8e6
parentdd13a1781269a85a67073d8b68ac3fba94af08c2 (diff)
downloadservo-2daa422483eb8a3fd3cb03e9318990445f45a430.tar.gz
servo-2daa422483eb8a3fd3cb03e9318990445f45a430.zip
Only element nodes have styles
-rw-r--r--src/servo/css/matching.rs13
-rw-r--r--src/servo/css/node_style.rs1
-rw-r--r--src/servo/css/select_handler.rs9
-rw-r--r--src/servo/dom/node.rs6
-rw-r--r--src/servo/layout/box.rs5
5 files changed, 21 insertions, 13 deletions
diff --git a/src/servo/css/matching.rs b/src/servo/css/matching.rs
index 2f3408e8c40..a2b39e84e56 100644
--- a/src/servo/css/matching.rs
+++ b/src/servo/css/matching.rs
@@ -27,10 +27,13 @@ impl Node : MatchMethods {
kid.restyle_subtree(select_ctx);
}
- let select_handler = NodeSelectHandler {
- node: self
- };
- let style = select_ctx.select_style(&self, &select_handler);
- self.set_css_select_results(move style);
+ // Only elements have styles
+ if self.is_element() {
+ let select_handler = NodeSelectHandler {
+ node: self
+ };
+ let style = select_ctx.select_style(&self, &select_handler);
+ self.set_css_select_results(move style);
+ }
}
}
diff --git a/src/servo/css/node_style.rs b/src/servo/css/node_style.rs
index 1ab1a4f905d..70209a761fb 100644
--- a/src/servo/css/node_style.rs
+++ b/src/servo/css/node_style.rs
@@ -25,6 +25,7 @@ trait StyledNode {
impl Node: StyledNode {
fn style(&self) -> NodeStyle/&self {
+ assert self.is_element(); // Only elements can have styles
NodeStyle::new(self)
}
}
diff --git a/src/servo/css/select_handler.rs b/src/servo/css/select_handler.rs
index 861de58fbf1..e3d94cfa6d9 100644
--- a/src/servo/css/select_handler.rs
+++ b/src/servo/css/select_handler.rs
@@ -6,17 +6,10 @@ pub struct NodeSelectHandler {
node: Node
}
-/// Placeholder names
-fn unnamed_node(name: &str) -> ~str {
- fmt!("unnamed-%s", name)
-}
-
fn node_name(data: &NodeData) -> ~str {
match *data.kind {
- Doctype(*) => unnamed_node("doctype"),
- Comment(*) => unnamed_node("comment"),
Element(ref data) => copy data.tag_name,
- Text(*) => unnamed_node("text")
+ _ => fail ~"attempting to style non-element node"
}
}
diff --git a/src/servo/dom/node.rs b/src/servo/dom/node.rs
index d4d6e2e6bbe..6650c76ae6c 100644
--- a/src/servo/dom/node.rs
+++ b/src/servo/dom/node.rs
@@ -71,6 +71,12 @@ impl Node : DebugMethods {
}
}
+impl Node {
+ fn is_element(&self) -> bool {
+ self.read(|n| match *n.kind { Element(*) => true, _ => false } )
+ }
+}
+
pub enum NodeKind {
Doctype(DoctypeData),
Comment(~str),
diff --git a/src/servo/layout/box.rs b/src/servo/layout/box.rs
index 1754df0b6b4..4934f82f2f7 100644
--- a/src/servo/layout/box.rs
+++ b/src/servo/layout/box.rs
@@ -435,6 +435,9 @@ impl RenderBox : RenderBoxMethods {
fn add_bgcolor_to_list(list: &mut DisplayList, abs_bounds: &Rect<Au>) {
use std::cmp::FuzzyEq;
+
+ if !self.d().node.is_element() { return }
+
let bgcolor = self.style().background_color();
if !bgcolor.alpha.fuzzy_eq(&0.0) {
list.append_item(~DisplayItem::new_SolidColor(abs_bounds, bgcolor.to_gfx_color()));
@@ -442,6 +445,8 @@ impl RenderBox : RenderBoxMethods {
}
fn add_border_to_list(list: &mut DisplayList, abs_bounds: &Rect<Au>) {
+ if !self.d().node.is_element() { return }
+
let top_width = self.style().border_top_width();
let right_width = self.style().border_right_width();
let bottom_width = self.style().border_bottom_width();