| OLD | NEW |
| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 | 45 |
| 46 namespace WebCore { | 46 namespace WebCore { |
| 47 | 47 |
| 48 class Element; | 48 class Element; |
| 49 class StylePropertyShorthand; | 49 class StylePropertyShorthand; |
| 50 class StyleResolver; | 50 class StyleResolver; |
| 51 class StyleRuleKeyframes; | 51 class StyleRuleKeyframes; |
| 52 | 52 |
| 53 // 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. |
| 54 // This includes updates to animations/transitions as well as the Interpolations
to be applied. | 54 // This includes updates to animations/transitions as well as the Interpolations
to be applied. |
| 55 class CSSAnimationUpdate FINAL { | 55 class CSSAnimationUpdate FINAL : public NoBaseWillBeGarbageCollectedFinalized<CS
SAnimationUpdate> { |
| 56 public: | 56 public: |
| 57 void startAnimation(AtomicString& animationName, const HashSet<RefPtr<InertA
nimation> >& animations) | 57 void startAnimation(AtomicString& animationName, const HashSet<RefPtr<InertA
nimation> >& animations) |
| 58 { | 58 { |
| 59 NewAnimation newAnimation; | 59 NewAnimation newAnimation; |
| 60 newAnimation.name = animationName; | 60 newAnimation.name = animationName; |
| 61 newAnimation.animations = animations; | 61 newAnimation.animations = animations; |
| 62 m_newAnimations.append(newAnimation); | 62 m_newAnimations.append(newAnimation); |
| 63 } | 63 } |
| 64 // 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. |
| 65 bool isCancelledAnimation(const AnimationPlayer* player) const { return m_ca
ncelledAnimationAnimationPlayers.contains(player); } | 65 bool isCancelledAnimation(const AnimationPlayer* player) const { return m_ca
ncelledAnimationAnimationPlayers.contains(player); } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 { | 102 { |
| 103 visitor->trace(from); | 103 visitor->trace(from); |
| 104 visitor->trace(to); | 104 visitor->trace(to); |
| 105 } | 105 } |
| 106 | 106 |
| 107 CSSPropertyID id; | 107 CSSPropertyID id; |
| 108 RawPtrWillBeMember<const AnimatableValue> from; | 108 RawPtrWillBeMember<const AnimatableValue> from; |
| 109 RawPtrWillBeMember<const AnimatableValue> to; | 109 RawPtrWillBeMember<const AnimatableValue> to; |
| 110 RefPtr<InertAnimation> animation; | 110 RefPtr<InertAnimation> animation; |
| 111 }; | 111 }; |
| 112 typedef WillBePersistentHeapHashMap<CSSPropertyID, NewTransition> NewTransit
ionMap; | 112 typedef WillBeHeapHashMap<CSSPropertyID, NewTransition> NewTransitionMap; |
| 113 const NewTransitionMap& newTransitions() const { return m_newTransitions; } | 113 const NewTransitionMap& newTransitions() const { return m_newTransitions; } |
| 114 const HashSet<CSSPropertyID>& cancelledTransitions() const { return m_cancel
ledTransitions; } | 114 const HashSet<CSSPropertyID>& cancelledTransitions() const { return m_cancel
ledTransitions; } |
| 115 | 115 |
| 116 void adoptActiveInterpolationsForAnimations(WillBeHeapHashMap<CSSPropertyID,
RefPtrWillBeMember<Interpolation> >& newMap) { newMap.swap(m_activeInterpolatio
nsForAnimations); } | 116 void adoptActiveInterpolationsForAnimations(WillBeHeapHashMap<CSSPropertyID,
RefPtrWillBeMember<Interpolation> >& newMap) { newMap.swap(m_activeInterpolatio
nsForAnimations); } |
| 117 void adoptActiveInterpolationsForTransitions(WillBeHeapHashMap<CSSPropertyID
, RefPtrWillBeMember<Interpolation> >& newMap) { newMap.swap(m_activeInterpolati
onsForTransitions); } | 117 void adoptActiveInterpolationsForTransitions(WillBeHeapHashMap<CSSPropertyID
, RefPtrWillBeMember<Interpolation> >& newMap) { newMap.swap(m_activeInterpolati
onsForTransitions); } |
| 118 const WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >&
activeInterpolationsForAnimations() const { return m_activeInterpolationsForAnim
ations; } | 118 const WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >&
activeInterpolationsForAnimations() const { return m_activeInterpolationsForAnim
ations; } |
| 119 const WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >&
activeInterpolationsForTransitions() const { return m_activeInterpolationsForTra
nsitions; } | 119 const WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >&
activeInterpolationsForTransitions() const { return m_activeInterpolationsForTra
nsitions; } |
| 120 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >& active
InterpolationsForAnimations() { return m_activeInterpolationsForAnimations; } | 120 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >& active
InterpolationsForAnimations() { return m_activeInterpolationsForAnimations; } |
| 121 | 121 |
| 122 bool isEmpty() const | 122 bool isEmpty() const |
| 123 { | 123 { |
| 124 return m_newAnimations.isEmpty() | 124 return m_newAnimations.isEmpty() |
| 125 && m_cancelledAnimationNames.isEmpty() | 125 && m_cancelledAnimationNames.isEmpty() |
| 126 && m_cancelledAnimationAnimationPlayers.isEmpty() | 126 && m_cancelledAnimationAnimationPlayers.isEmpty() |
| 127 && m_animationsWithPauseToggled.isEmpty() | 127 && m_animationsWithPauseToggled.isEmpty() |
| 128 && m_newTransitions.isEmpty() | 128 && m_newTransitions.isEmpty() |
| 129 && m_cancelledTransitions.isEmpty() | 129 && m_cancelledTransitions.isEmpty() |
| 130 && m_activeInterpolationsForAnimations.isEmpty() | 130 && m_activeInterpolationsForAnimations.isEmpty() |
| 131 && m_activeInterpolationsForTransitions.isEmpty(); | 131 && m_activeInterpolationsForTransitions.isEmpty(); |
| 132 } | 132 } |
| 133 |
| 134 void trace(Visitor*); |
| 135 |
| 133 private: | 136 private: |
| 134 // Order is significant since it defines the order in which new animations | 137 // Order is significant since it defines the order in which new animations |
| 135 // will be started. Note that there may be multiple animations present | 138 // will be started. Note that there may be multiple animations present |
| 136 // with the same name, due to the way in which we split up animations with | 139 // with the same name, due to the way in which we split up animations with |
| 137 // incomplete keyframes. | 140 // incomplete keyframes. |
| 138 Vector<NewAnimation> m_newAnimations; | 141 Vector<NewAnimation> m_newAnimations; |
| 139 Vector<AtomicString> m_cancelledAnimationNames; | 142 Vector<AtomicString> m_cancelledAnimationNames; |
| 140 HashSet<const AnimationPlayer*> m_cancelledAnimationAnimationPlayers; | 143 HashSet<const AnimationPlayer*> m_cancelledAnimationAnimationPlayers; |
| 141 Vector<AtomicString> m_animationsWithPauseToggled; | 144 Vector<AtomicString> m_animationsWithPauseToggled; |
| 142 | 145 |
| 143 NewTransitionMap m_newTransitions; | 146 NewTransitionMap m_newTransitions; |
| 144 HashSet<CSSPropertyID> m_cancelledTransitions; | 147 HashSet<CSSPropertyID> m_cancelledTransitions; |
| 145 | 148 |
| 146 WillBePersistentHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation>
> m_activeInterpolationsForAnimations; | 149 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > m_activ
eInterpolationsForAnimations; |
| 147 WillBePersistentHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation>
> m_activeInterpolationsForTransitions; | 150 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > m_activ
eInterpolationsForTransitions; |
| 148 }; | 151 }; |
| 149 | 152 |
| 150 class CSSAnimations FINAL { | 153 class CSSAnimations FINAL : public NoBaseWillBeGarbageCollectedFinalized<CSSAnim
ations> { |
| 151 public: | 154 public: |
| 152 // FIXME: This method is only used here and in the legacy animations | 155 // FIXME: This method is only used here and in the legacy animations |
| 153 // implementation. It should be made private or file-scope when the legacy | 156 // implementation. It should be made private or file-scope when the legacy |
| 154 // engine is removed. | 157 // engine is removed. |
| 155 static const StyleRuleKeyframes* matchScopedKeyframesRule(StyleResolver*, co
nst Element*, const StringImpl*); | 158 static const StyleRuleKeyframes* matchScopedKeyframesRule(StyleResolver*, co
nst Element*, const StringImpl*); |
| 156 | 159 |
| 157 static bool isAnimatableProperty(CSSPropertyID); | 160 static bool isAnimatableProperty(CSSPropertyID); |
| 158 static const StylePropertyShorthand& animatableProperties(); | 161 static const StylePropertyShorthand& animatableProperties(); |
| 159 // FIXME: This should take a const ScopedStyleTree instead of a StyleResolve
r. | 162 // FIXME: This should take a const ScopedStyleTree instead of a StyleResolve
r. |
| 160 // We should also change the Element* to a const Element* | 163 // We should also change the Element* to a const Element* |
| 161 static PassOwnPtr<CSSAnimationUpdate> calculateUpdate(Element*, const Elemen
t& parentElement, const RenderStyle&, RenderStyle* parentStyle, StyleResolver*); | 164 static PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> calculateUpdate(Element*,
const Element& parentElement, const RenderStyle&, RenderStyle* parentStyle, Styl
eResolver*); |
| 162 | 165 |
| 163 void setPendingUpdate(PassOwnPtr<CSSAnimationUpdate> update) { m_pendingUpda
te = update; } | 166 void setPendingUpdate(PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> update) { m
_pendingUpdate = update; } |
| 164 void maybeApplyPendingUpdate(Element*); | 167 void maybeApplyPendingUpdate(Element*); |
| 165 bool isEmpty() const { return m_animations.isEmpty() && m_transitions.isEmpt
y() && !m_pendingUpdate; } | 168 bool isEmpty() const { return m_animations.isEmpty() && m_transitions.isEmpt
y() && !m_pendingUpdate; } |
| 166 void cancel(); | 169 void cancel(); |
| 167 | 170 |
| 171 void trace(Visitor*); |
| 172 |
| 168 private: | 173 private: |
| 169 // Note that a single animation name may map to multiple players due to | 174 // Note that a single animation name may map to multiple players due to |
| 170 // the way in which we split up animations with incomplete keyframes. | 175 // the way in which we split up animations with incomplete keyframes. |
| 171 // FIXME: Once the Web Animations model supports groups, we could use a | 176 // FIXME: Once the Web Animations model supports groups, we could use a |
| 172 // ParGroup to drive multiple animations from a single AnimationPlayer. | 177 // ParGroup to drive multiple animations from a single AnimationPlayer. |
| 173 typedef HashMap<AtomicString, HashSet<RefPtr<AnimationPlayer> > > AnimationM
ap; | 178 typedef HashMap<AtomicString, HashSet<RefPtr<AnimationPlayer> > > AnimationM
ap; |
| 174 struct RunningTransition { | 179 struct RunningTransition { |
| 175 ALLOW_ONLY_INLINE_ALLOCATION(); | 180 ALLOW_ONLY_INLINE_ALLOCATION(); |
| 176 public: | 181 public: |
| 177 void trace(Visitor* visitor) | 182 void trace(Visitor* visitor) |
| 178 { | 183 { |
| 179 visitor->trace(from); | 184 visitor->trace(from); |
| 180 visitor->trace(to); | 185 visitor->trace(to); |
| 181 } | 186 } |
| 182 | 187 |
| 183 Animation* transition; // The TransitionTimeline keeps the AnimationPlay
ers alive | 188 Animation* transition; // The TransitionTimeline keeps the AnimationPlay
ers alive |
| 184 RawPtrWillBeMember<const AnimatableValue> from; | 189 RawPtrWillBeMember<const AnimatableValue> from; |
| 185 RawPtrWillBeMember<const AnimatableValue> to; | 190 RawPtrWillBeMember<const AnimatableValue> to; |
| 186 }; | 191 }; |
| 187 typedef WillBePersistentHeapHashMap<CSSPropertyID, RunningTransition> Transi
tionMap; | 192 typedef WillBeHeapHashMap<CSSPropertyID, RunningTransition> TransitionMap; |
| 188 AnimationMap m_animations; | 193 AnimationMap m_animations; |
| 189 TransitionMap m_transitions; | 194 TransitionMap m_transitions; |
| 190 OwnPtr<CSSAnimationUpdate> m_pendingUpdate; | 195 OwnPtrWillBeMember<CSSAnimationUpdate> m_pendingUpdate; |
| 191 | 196 |
| 192 WillBePersistentHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation>
> m_previousActiveInterpolationsForAnimations; | 197 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > m_previ
ousActiveInterpolationsForAnimations; |
| 193 | 198 |
| 194 static void calculateAnimationUpdate(CSSAnimationUpdate*, Element*, const El
ement& parentElement, const RenderStyle&, RenderStyle* parentStyle, StyleResolve
r*); | 199 static void calculateAnimationUpdate(CSSAnimationUpdate*, Element*, const El
ement& parentElement, const RenderStyle&, RenderStyle* parentStyle, StyleResolve
r*); |
| 195 static void calculateTransitionUpdate(CSSAnimationUpdate*, const Element*, c
onst RenderStyle&); | 200 static void calculateTransitionUpdate(CSSAnimationUpdate*, const Element*, c
onst RenderStyle&); |
| 196 static void calculateTransitionUpdateForProperty(CSSPropertyID, const CSSAni
mationData*, const RenderStyle& oldStyle, const RenderStyle&, const TransitionMa
p* activeTransitions, CSSAnimationUpdate*, const Element*); | 201 static void calculateTransitionUpdateForProperty(CSSPropertyID, const CSSAni
mationData*, const RenderStyle& oldStyle, const RenderStyle&, const TransitionMa
p* activeTransitions, CSSAnimationUpdate*, const Element*); |
| 197 | 202 |
| 198 static void calculateAnimationActiveInterpolations(CSSAnimationUpdate*, cons
t Element*); | 203 static void calculateAnimationActiveInterpolations(CSSAnimationUpdate*, cons
t Element*); |
| 199 static void calculateTransitionActiveInterpolations(CSSAnimationUpdate*, con
st Element*); | 204 static void calculateTransitionActiveInterpolations(CSSAnimationUpdate*, con
st Element*); |
| 200 | 205 |
| 201 class AnimationEventDelegate FINAL : public TimedItem::EventDelegate { | 206 class AnimationEventDelegate FINAL : public TimedItem::EventDelegate { |
| 202 public: | 207 public: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 222 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time
dItem::Phase previousPhase, double previousIteration) OVERRIDE; | 227 virtual void onEventCondition(const TimedItem*, bool isFirstSample, Time
dItem::Phase previousPhase, double previousIteration) OVERRIDE; |
| 223 private: | 228 private: |
| 224 Element* m_target; | 229 Element* m_target; |
| 225 const CSSPropertyID m_property; | 230 const CSSPropertyID m_property; |
| 226 }; | 231 }; |
| 227 }; | 232 }; |
| 228 | 233 |
| 229 } // namespace WebCore | 234 } // namespace WebCore |
| 230 | 235 |
| 231 #endif | 236 #endif |
| OLD | NEW |