diff options
-rw-r--r-- | components/style/stylist.rs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 732edc212b5..54d006d4ff8 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -1555,27 +1555,25 @@ impl Stylist { E: TElement, { use font_metrics::get_metrics_provider_for_product; - use std::iter; - - // FIXME(emilio): Why do we even need the rule node? We should probably - // just avoid allocating it and calling `apply_declarations` directly, - // maybe... - let rule_node = self.rule_tree.insert_ordered_rules(iter::once(( - StyleSource::from_declarations(declarations), - CascadeLevel::StyleAttributeNormal, - ))); - - // This currently ignores visited styles. It appears to be used for - // font styles in <canvas> via Servo_StyleSet_ResolveForDeclarations. - // It is unclear if visited styles are meaningful for this case. + + let block = declarations.read_with(guards.author); + let iter_declarations = || { + block.declaration_importance_iter().map(|(declaration, importance)| { + debug_assert!(!importance.important()); + (declaration, CascadeLevel::StyleAttributeNormal) + }) + }; + let metrics = get_metrics_provider_for_product(); - // FIXME(emilio): the pseudo bit looks quite dubious! - properties::cascade::<E>( + // We don't bother inserting these declarations in the rule tree, since + // it'd be quite useless and slow. + properties::apply_declarations::<E, _, _>( &self.device, /* pseudo = */ None, - &rule_node, + self.rule_tree.root(), guards, + iter_declarations, Some(parent_style), Some(parent_style), Some(parent_style), |