Skip to content

Commit 92e0962

Browse files
committed
fix: cache anmation keyframes
1 parent c353f85 commit 92e0962

File tree

3 files changed

+19
-25
lines changed

3 files changed

+19
-25
lines changed

webf/lib/src/css/css_animation.dart

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,7 @@ mixin CSSAnimationMixin on RenderStyle {
115115

116116
List<Keyframe>? _getKeyFrames(String animationName) {
117117
CSSKeyframesRule? cssKeyframesRule = target.ownerDocument.ruleSet.keyframesRules[animationName];
118-
if (cssKeyframesRule != null) {
119-
List<Keyframe> keyframes = [];
120-
121-
cssKeyframesRule.blocks.forEach((rule) {
122-
double? offset;
123-
final keyText = rule.blockSelectors[0];
124-
if (keyText == 'from') {
125-
offset = 0;
126-
} else if (keyText == 'to') {
127-
offset = 1;
128-
} else {
129-
offset = CSSPercentage.parsePercentage(keyText);
130-
}
131-
for (MapEntry<String, String> entry in rule.declarations) {
132-
final property = camelize(entry.key);
133-
keyframes.add(Keyframe(property, entry.value, offset ?? 0, LINEAR));
134-
}
135-
return;
136-
});
137-
return keyframes;
138-
}
139-
return null;
118+
return cssKeyframesRule?.keyframes;
140119
}
141120

142121
void beforeRunningAnimation() {

webf/lib/src/css/css_rule.dart

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,30 @@ class KeyFrameBlock {
3838
class CSSKeyframesRule extends CSSRule {
3939
final int _keyframeName;
4040
final String name;
41-
final List<KeyFrameBlock> blocks = [];
41+
final List<KeyFrameBlock> _blocks = [];
42+
43+
final List<Keyframe> keyframes = [];
4244

4345
@override
4446
int get type => CSSRule.KEYFRAMES_RULE;
4547

4648
CSSKeyframesRule(this._keyframeName, this.name) : super();
4749

4850
void add(KeyFrameBlock block) {
49-
blocks.add(block);
51+
_blocks.add(block);
52+
double? offset;
53+
final keyText = block.blockSelectors[0];
54+
if (keyText == 'from') {
55+
offset = 0;
56+
} else if (keyText == 'to') {
57+
offset = 1;
58+
} else {
59+
offset = CSSPercentage.parsePercentage(keyText);
60+
}
61+
for (MapEntry<String, String> entry in block.declarations) {
62+
final property = camelize(entry.key);
63+
keyframes.add(Keyframe(property, entry.value, offset ?? 0, LINEAR));
64+
}
5065
}
5166

5267
String? get keyFrameName {

webf/test/src/css/style_animations_parser.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ void main() {
1515
test('0', () {
1616
CSSRule? style = parseSingleRule('@keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } }');
1717
expect(style is CSSKeyframesRule, true);
18-
expect((style as CSSKeyframesRule).blocks.first.blockSelectors, ['75%', '100%']);
18+
expect((style as CSSKeyframesRule).keyframes[0].offset, 0.75);
1919
});
2020
});
2121
}

0 commit comments

Comments
 (0)