Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Side by Side Diff: Source/core/animation/css/CSSAnimations.h

Issue 194673002: Web Animations: Refactor KeyframeEffectModel to work via an InterpolationEffect. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@interpolationWrap
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 15 matching lines...) Expand all
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #ifndef CSSAnimations_h 31 #ifndef CSSAnimations_h
32 #define CSSAnimations_h 32 #define CSSAnimations_h
33 33
34 #include "core/animation/Animation.h" 34 #include "core/animation/Animation.h"
35 #include "core/animation/InertAnimation.h" 35 #include "core/animation/InertAnimation.h"
36 #include "core/animation/Interpolation.h"
36 #include "core/animation/Player.h" 37 #include "core/animation/Player.h"
37 #include "core/animation/css/CSSAnimationData.h" 38 #include "core/animation/css/CSSAnimationData.h"
38 #include "core/css/StylePropertySet.h" 39 #include "core/css/StylePropertySet.h"
39 #include "core/dom/Document.h" 40 #include "core/dom/Document.h"
40 #include "core/rendering/style/RenderStyleConstants.h" 41 #include "core/rendering/style/RenderStyleConstants.h"
41 #include "wtf/HashMap.h" 42 #include "wtf/HashMap.h"
42 #include "wtf/Vector.h" 43 #include "wtf/Vector.h"
43 #include "wtf/text/AtomicString.h" 44 #include "wtf/text/AtomicString.h"
44 45
45 namespace WebCore { 46 namespace WebCore {
46 47
47 class Element; 48 class Element;
48 class StylePropertyShorthand; 49 class StylePropertyShorthand;
49 class StyleResolver; 50 class StyleResolver;
50 class StyleRuleKeyframes; 51 class StyleRuleKeyframes;
51 52
52 // This class stores the CSS Animations/Transitions information we use during a style recalc. 53 // This class stores the CSS Animations/Transitions information we use during a style recalc.
53 // This includes updates to animations/transitions as well as the CompositableVa lueMaps to be applied. 54 // This includes updates to animations/transitions as well as the Interpolations to be applied.
54 class CSSAnimationUpdate FINAL { 55 class CSSAnimationUpdate FINAL {
55 public: 56 public:
56 void startAnimation(AtomicString& animationName, const HashSet<RefPtr<InertA nimation> >& animations) 57 void startAnimation(AtomicString& animationName, const HashSet<RefPtr<InertA nimation> >& animations)
57 { 58 {
58 NewAnimation newAnimation; 59 NewAnimation newAnimation;
59 newAnimation.name = animationName; 60 newAnimation.name = animationName;
60 newAnimation.animations = animations; 61 newAnimation.animations = animations;
61 m_newAnimations.append(newAnimation); 62 m_newAnimations.append(newAnimation);
62 } 63 }
63 // Returns whether player has been cancelled and should be filtered during s tyle application. 64 // Returns whether player has been cancelled and should be filtered during s tyle application.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 struct NewTransition { 98 struct NewTransition {
98 CSSPropertyID id; 99 CSSPropertyID id;
99 const AnimatableValue* from; 100 const AnimatableValue* from;
100 const AnimatableValue* to; 101 const AnimatableValue* to;
101 RefPtr<InertAnimation> animation; 102 RefPtr<InertAnimation> animation;
102 }; 103 };
103 typedef HashMap<CSSPropertyID, NewTransition> NewTransitionMap; 104 typedef HashMap<CSSPropertyID, NewTransition> NewTransitionMap;
104 const NewTransitionMap& newTransitions() const { return m_newTransitions; } 105 const NewTransitionMap& newTransitions() const { return m_newTransitions; }
105 const HashSet<CSSPropertyID>& cancelledTransitions() const { return m_cancel ledTransitions; } 106 const HashSet<CSSPropertyID>& cancelledTransitions() const { return m_cancel ledTransitions; }
106 107
107 void adoptCompositableValuesForAnimations(AnimationEffect::CompositableValue Map& newMap) { newMap.swap(m_compositableValuesForAnimations); } 108 void adoptActiveInterpolationsForAnimations(HashMap<CSSPropertyID, RefPtr<In terpolation> >& newMap) { newMap.swap(m_activeInterpolationsForAnimations); }
108 void adoptCompositableValuesForTransitions(AnimationEffect::CompositableValu eMap& newMap) { newMap.swap(m_compositableValuesForTransitions); } 109 void adoptActiveInterpolationsForTransitions(HashMap<CSSPropertyID, RefPtr<I nterpolation> >& newMap) { newMap.swap(m_activeInterpolationsForTransitions); }
109 const AnimationEffect::CompositableValueMap& compositableValuesForAnimations () const { return m_compositableValuesForAnimations; } 110 const HashMap<CSSPropertyID, RefPtr<Interpolation> >& activeInterpolationsFo rAnimations() const { return m_activeInterpolationsForAnimations; }
110 const AnimationEffect::CompositableValueMap& compositableValuesForTransition s() const { return m_compositableValuesForTransitions; } 111 const HashMap<CSSPropertyID, RefPtr<Interpolation> >& activeInterpolationsFo rTransitions() const { return m_activeInterpolationsForTransitions; }
111 AnimationEffect::CompositableValueMap& compositableValuesForAnimations() { r eturn m_compositableValuesForAnimations; } 112 HashMap<CSSPropertyID, RefPtr<Interpolation> >& activeInterpolationsForAnima tions() { return m_activeInterpolationsForAnimations; }
112 113
113 bool isEmpty() const 114 bool isEmpty() const
114 { 115 {
115 return m_newAnimations.isEmpty() 116 return m_newAnimations.isEmpty()
116 && m_cancelledAnimationNames.isEmpty() 117 && m_cancelledAnimationNames.isEmpty()
117 && m_cancelledAnimationPlayers.isEmpty() 118 && m_cancelledAnimationPlayers.isEmpty()
118 && m_animationsWithPauseToggled.isEmpty() 119 && m_animationsWithPauseToggled.isEmpty()
119 && m_newTransitions.isEmpty() 120 && m_newTransitions.isEmpty()
120 && m_cancelledTransitions.isEmpty() 121 && m_cancelledTransitions.isEmpty()
121 && m_compositableValuesForAnimations.isEmpty() 122 && m_activeInterpolationsForAnimations.isEmpty()
122 && m_compositableValuesForTransitions.isEmpty(); 123 && m_activeInterpolationsForTransitions.isEmpty();
123 } 124 }
124 private: 125 private:
125 // Order is significant since it defines the order in which new animations 126 // Order is significant since it defines the order in which new animations
126 // will be started. Note that there may be multiple animations present 127 // will be started. Note that there may be multiple animations present
127 // with the same name, due to the way in which we split up animations with 128 // with the same name, due to the way in which we split up animations with
128 // incomplete keyframes. 129 // incomplete keyframes.
129 Vector<NewAnimation> m_newAnimations; 130 Vector<NewAnimation> m_newAnimations;
130 Vector<AtomicString> m_cancelledAnimationNames; 131 Vector<AtomicString> m_cancelledAnimationNames;
131 HashSet<const Player*> m_cancelledAnimationPlayers; 132 HashSet<const Player*> m_cancelledAnimationPlayers;
132 Vector<AtomicString> m_animationsWithPauseToggled; 133 Vector<AtomicString> m_animationsWithPauseToggled;
133 134
134 NewTransitionMap m_newTransitions; 135 NewTransitionMap m_newTransitions;
135 HashSet<CSSPropertyID> m_cancelledTransitions; 136 HashSet<CSSPropertyID> m_cancelledTransitions;
136 137
137 AnimationEffect::CompositableValueMap m_compositableValuesForAnimations; 138 HashMap<CSSPropertyID, RefPtr<Interpolation> > m_activeInterpolationsForAnim ations;
138 AnimationEffect::CompositableValueMap m_compositableValuesForTransitions; 139 HashMap<CSSPropertyID, RefPtr<Interpolation> > m_activeInterpolationsForTran sitions;
139 }; 140 };
140 141
141 class CSSAnimations FINAL { 142 class CSSAnimations FINAL {
142 public: 143 public:
143 // FIXME: This method is only used here and in the legacy animations 144 // FIXME: This method is only used here and in the legacy animations
144 // implementation. It should be made private or file-scope when the legacy 145 // implementation. It should be made private or file-scope when the legacy
145 // engine is removed. 146 // engine is removed.
146 static const StyleRuleKeyframes* matchScopedKeyframesRule(StyleResolver*, co nst Element*, const StringImpl*); 147 static const StyleRuleKeyframes* matchScopedKeyframesRule(StyleResolver*, co nst Element*, const StringImpl*);
147 148
148 static bool isAnimatableProperty(CSSPropertyID); 149 static bool isAnimatableProperty(CSSPropertyID);
(...skipping 16 matching lines...) Expand all
165 struct RunningTransition { 166 struct RunningTransition {
166 Animation* transition; // The TransitionTimeline keeps the Players alive 167 Animation* transition; // The TransitionTimeline keeps the Players alive
167 const AnimatableValue* from; 168 const AnimatableValue* from;
168 const AnimatableValue* to; 169 const AnimatableValue* to;
169 }; 170 };
170 typedef HashMap<CSSPropertyID, RunningTransition > TransitionMap; 171 typedef HashMap<CSSPropertyID, RunningTransition > TransitionMap;
171 AnimationMap m_animations; 172 AnimationMap m_animations;
172 TransitionMap m_transitions; 173 TransitionMap m_transitions;
173 OwnPtr<CSSAnimationUpdate> m_pendingUpdate; 174 OwnPtr<CSSAnimationUpdate> m_pendingUpdate;
174 175
175 AnimationEffect::CompositableValueMap m_previousCompositableValuesForAnimati ons; 176 HashMap<CSSPropertyID, RefPtr<Interpolation> > m_previousActiveInterpolation sForAnimations;
176 177
177 static void calculateAnimationUpdate(CSSAnimationUpdate*, Element*, const El ement& parentElement, const RenderStyle&, RenderStyle* parentStyle, StyleResolve r*); 178 static void calculateAnimationUpdate(CSSAnimationUpdate*, Element*, const El ement& parentElement, const RenderStyle&, RenderStyle* parentStyle, StyleResolve r*);
178 static void calculateTransitionUpdate(CSSAnimationUpdate*, const Element*, c onst RenderStyle&); 179 static void calculateTransitionUpdate(CSSAnimationUpdate*, const Element*, c onst RenderStyle&);
179 static void calculateTransitionUpdateForProperty(CSSPropertyID, const CSSAni mationData*, const RenderStyle& oldStyle, const RenderStyle&, const TransitionMa p* activeTransitions, CSSAnimationUpdate*, const Element*); 180 static void calculateTransitionUpdateForProperty(CSSPropertyID, const CSSAni mationData*, const RenderStyle& oldStyle, const RenderStyle&, const TransitionMa p* activeTransitions, CSSAnimationUpdate*, const Element*);
180 181
181 static void calculateAnimationCompositableValues(CSSAnimationUpdate*, const Element*); 182 static void calculateAnimationActiveInterpolations(CSSAnimationUpdate*, cons t Element*);
182 static void calculateTransitionCompositableValues(CSSAnimationUpdate*, const Element*); 183 static void calculateTransitionActiveInterpolations(CSSAnimationUpdate*, con st Element*);
183 184
184 class AnimationEventDelegate FINAL : public TimedItem::EventDelegate { 185 class AnimationEventDelegate FINAL : public TimedItem::EventDelegate {
185 public: 186 public:
186 AnimationEventDelegate(Element* target, const AtomicString& name) 187 AnimationEventDelegate(Element* target, const AtomicString& name)
187 : m_target(target) 188 : m_target(target)
188 , m_name(name) 189 , m_name(name)
189 { 190 {
190 } 191 }
191 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time dItem::Phase previousPhase, double previousIteration) OVERRIDE; 192 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time dItem::Phase previousPhase, double previousIteration) OVERRIDE;
192 private: 193 private:
(...skipping 12 matching lines...) Expand all
205 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time dItem::Phase previousPhase, double previousIteration) OVERRIDE; 206 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time dItem::Phase previousPhase, double previousIteration) OVERRIDE;
206 private: 207 private:
207 Element* m_target; 208 Element* m_target;
208 const CSSPropertyID m_property; 209 const CSSPropertyID m_property;
209 }; 210 };
210 }; 211 };
211 212
212 } // namespace WebCore 213 } // namespace WebCore
213 214
214 #endif 215 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698