mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Clean up cascade rule iteration. r=nordzilla
The current API was pretty awkward as a result of two things: * Not being able to create empty iterators for smallbitvec. * We used to call the `F` function multiple times, but turns out that collecting the declarations in a SmallVec was a perf win. So clean this up so that it looks more similar to other APIs, taking an iterator directly. This is a bit more code, but hopefully easier to understand (and also hopefully easier to optimize). The motivation for this work is that I plan to investigate rebasing / landing https://github.com/servo/servo/pull/20151, and I don't want more instantiations of apply_declarations and such. Differential Revision: https://phabricator.services.mozilla.com/D74369
This commit is contained in:
parent
6bae0b99ca
commit
ec6ecf7d21
4 changed files with 105 additions and 71 deletions
|
@ -978,7 +978,13 @@ where
|
|||
} => {
|
||||
let guard = declarations.read_with(context.guards.author);
|
||||
|
||||
let iter = || {
|
||||
// This currently ignores visited styles, which seems acceptable,
|
||||
// as existing browsers don't appear to animate visited styles.
|
||||
let computed = properties::apply_declarations::<E, _>(
|
||||
context.stylist.device(),
|
||||
/* pseudo = */ None,
|
||||
previous_style.rules(),
|
||||
&context.guards,
|
||||
// It's possible to have !important properties in keyframes
|
||||
// so we have to filter them out.
|
||||
// See the spec issue https://github.com/w3c/csswg-drafts/issues/1824
|
||||
|
@ -986,17 +992,7 @@ where
|
|||
guard
|
||||
.normal_declaration_iter()
|
||||
.filter(|declaration| declaration.is_animatable())
|
||||
.map(|decl| (decl, Origin::Author))
|
||||
};
|
||||
|
||||
// This currently ignores visited styles, which seems acceptable,
|
||||
// as existing browsers don't appear to animate visited styles.
|
||||
let computed = properties::apply_declarations::<E, _, _>(
|
||||
context.stylist.device(),
|
||||
/* pseudo = */ None,
|
||||
previous_style.rules(),
|
||||
&context.guards,
|
||||
iter,
|
||||
.map(|decl| (decl, Origin::Author)),
|
||||
Some(previous_style),
|
||||
Some(previous_style),
|
||||
Some(previous_style),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue