PassRefPtr<RenderStyle> CompositeAnimation::animate(RenderObject* renderer, RenderStyle* currentStyle, RenderStyle* targetStyle) { RefPtr<RenderStyle> resultStyle; // We don't do any transitions if we don't have a currentStyle (on startup). updateTransitions(renderer, currentStyle, targetStyle); updateKeyframeAnimations(renderer, currentStyle, targetStyle); m_keyframeAnimations.checkConsistency(); if (currentStyle) { // Now that we have transition objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. if (!m_transitions.isEmpty()) { CSSPropertyTransitionsMap::const_iterator end = m_transitions.end(); for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) { if (ImplicitAnimation* anim = it->second.get()) anim->animate(this, renderer, currentStyle, targetStyle, resultStyle); } } } // Now that we have animation objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. for (Vector<AtomicStringImpl*>::const_iterator it = m_keyframeAnimationOrderMap.begin(); it != m_keyframeAnimationOrderMap.end(); ++it) { RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(*it); if (keyframeAnim) keyframeAnim->animate(this, renderer, currentStyle, targetStyle, resultStyle); } return resultStyle ? resultStyle.release() : targetStyle; }
Ref<RenderStyle> CompositeAnimation::animate(RenderElement& renderer, RenderStyle* currentStyle, RenderStyle& targetStyle) { RefPtr<RenderStyle> resultStyle; // We don't do any transitions if we don't have a currentStyle (on startup). updateTransitions(&renderer, currentStyle, &targetStyle); updateKeyframeAnimations(&renderer, currentStyle, &targetStyle); m_keyframeAnimations.checkConsistency(); if (currentStyle) { // Now that we have transition objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. if (!m_transitions.isEmpty()) { for (auto& transition : m_transitions.values()) transition->animate(this, &renderer, currentStyle, &targetStyle, resultStyle); } } // Now that we have animation objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. for (auto& name : m_keyframeAnimationOrderMap) { RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(name); if (keyframeAnim) keyframeAnim->animate(this, &renderer, currentStyle, &targetStyle, resultStyle); } if (resultStyle) return resultStyle.releaseNonNull(); return targetStyle; }
bool CompositeAnimation::animate(RenderElement& renderer, RenderStyle* currentStyle, RenderStyle& targetStyle, Ref<RenderStyle>& blendedStyle) { // We don't do any transitions if we don't have a currentStyle (on startup). updateTransitions(&renderer, currentStyle, &targetStyle); updateKeyframeAnimations(&renderer, currentStyle, &targetStyle); m_keyframeAnimations.checkConsistency(); RefPtr<RenderStyle> animatedStyle; bool animationStateChanged = false; if (currentStyle) { // Now that we have transition objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. for (auto& transition : m_transitions.values()) { if (transition->animate(this, &renderer, currentStyle, &targetStyle, animatedStyle)) animationStateChanged = true; } } // Now that we have animation objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. for (auto& name : m_keyframeAnimationOrderMap) { RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(name); if (keyframeAnim && keyframeAnim->animate(this, &renderer, currentStyle, &targetStyle, animatedStyle)) animationStateChanged = true; } if (animatedStyle) blendedStyle = animatedStyle.releaseNonNull(); else blendedStyle = targetStyle; return animationStateChanged; }
RenderStyle* CompositeAnimation::animate(RenderObject* renderer, const RenderStyle* currentStyle, RenderStyle* targetStyle) { RenderStyle* resultStyle = 0; // We don't do any transitions if we don't have a currentStyle (on startup) updateTransitions(renderer, currentStyle, targetStyle); if (currentStyle) { // Now that we have transition objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. CSSPropertyTransitionsMap::const_iterator end = m_transitions.end(); for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) { ImplicitAnimation* anim = it->second; if (anim) { anim->animate(this, renderer, currentStyle, targetStyle, resultStyle); } } } updateKeyframeAnimations(renderer, currentStyle, targetStyle); // Now that we have animation objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. if (targetStyle->hasAnimations()) { for (size_t i = 0; i < targetStyle->animations()->size(); ++i) { const Animation* anim = (*targetStyle->animations())[i].get(); if (anim->isValidAnimation()) { AtomicString name(anim->name()); KeyframeAnimation* keyframeAnim = m_keyframeAnimations.get(name.impl()); if (keyframeAnim) keyframeAnim->animate(this, renderer, currentStyle, targetStyle, resultStyle); } } } cleanupFinishedAnimations(renderer); return resultStyle ? resultStyle : targetStyle; }
PassRefPtr<RenderStyle> CompositeAnimationPrivate::animate(RenderObject* renderer, RenderStyle* currentStyle, RenderStyle* targetStyle) { RefPtr<RenderStyle> resultStyle; // Update animations first so we can see if any transitions are overridden updateKeyframeAnimations(renderer, currentStyle, targetStyle); // We don't do any transitions if we don't have a currentStyle (on startup) updateTransitions(renderer, currentStyle, targetStyle); if (currentStyle) { // Now that we have transition objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. CSSPropertyTransitionsMap::const_iterator end = m_transitions.end(); for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) { if (ImplicitAnimation* anim = it->second.get()) anim->animate(m_compositeAnimation, renderer, currentStyle, targetStyle, resultStyle); } } // Now that we have animation objects ready, let them know about the new goal state. We want them // to fill in a RenderStyle*& only if needed. if (targetStyle->hasAnimations()) { for (size_t i = 0; i < targetStyle->animations()->size(); ++i) { const Animation* anim = targetStyle->animations()->animation(i); if (anim->isValidAnimation()) { AtomicString animationName(anim->name()); RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(animationName.impl()); if (keyframeAnim) keyframeAnim->animate(m_compositeAnimation, renderer, currentStyle, targetStyle, resultStyle); } } } cleanupFinishedAnimations(renderer); return resultStyle ? resultStyle.release() : targetStyle; }