| 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 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 animation.update(TimingUpdateOnDemand); | 505 animation.update(TimingUpdateOnDemand); |
| 506 m_runningAnimations.remove(cancelledIndices[i]); | 506 m_runningAnimations.remove(cancelledIndices[i]); |
| 507 } | 507 } |
| 508 | 508 |
| 509 for (const auto& entry : m_pendingUpdate.newAnimations()) { | 509 for (const auto& entry : m_pendingUpdate.newAnimations()) { |
| 510 const InertEffect* inertAnimation = entry.effect.get(); | 510 const InertEffect* inertAnimation = entry.effect.get(); |
| 511 AnimationEventDelegate* eventDelegate = | 511 AnimationEventDelegate* eventDelegate = |
| 512 new AnimationEventDelegate(element, entry.name); | 512 new AnimationEventDelegate(element, entry.name); |
| 513 KeyframeEffect* effect = KeyframeEffect::create( | 513 KeyframeEffect* effect = KeyframeEffect::create( |
| 514 element, inertAnimation->model(), inertAnimation->specifiedTiming(), | 514 element, inertAnimation->model(), inertAnimation->specifiedTiming(), |
| 515 KeyframeEffect::DefaultPriority, eventDelegate); | 515 KeyframeEffectReadOnly::DefaultPriority, eventDelegate); |
| 516 Animation* animation = element->document().timeline().play(effect); | 516 Animation* animation = element->document().timeline().play(effect); |
| 517 animation->setId(entry.name); | 517 animation->setId(entry.name); |
| 518 if (inertAnimation->paused()) | 518 if (inertAnimation->paused()) |
| 519 animation->pause(); | 519 animation->pause(); |
| 520 animation->update(TimingUpdateOnDemand); | 520 animation->update(TimingUpdateOnDemand); |
| 521 | 521 |
| 522 m_runningAnimations.append(new RunningAnimation(animation, entry)); | 522 m_runningAnimations.append(new RunningAnimation(animation, entry)); |
| 523 } | 523 } |
| 524 | 524 |
| 525 // Transitions that are run on the compositor only update main-thread state | 525 // Transitions that are run on the compositor only update main-thread state |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 newFrames[0]->setPropertyValue( | 609 newFrames[0]->setPropertyValue( |
| 610 id, toLegacyStyleInterpolation(sample.at(0).get())->currentValue()); | 610 id, toLegacyStyleInterpolation(sample.at(0).get())->currentValue()); |
| 611 newFrames[1]->setPropertyValue( | 611 newFrames[1]->setPropertyValue( |
| 612 id, toLegacyStyleInterpolation(sample.at(0).get())->currentValue()); | 612 id, toLegacyStyleInterpolation(sample.at(0).get())->currentValue()); |
| 613 model = AnimatableValueKeyframeEffectModel::create(newFrames); | 613 model = AnimatableValueKeyframeEffectModel::create(newFrames); |
| 614 } | 614 } |
| 615 } | 615 } |
| 616 | 616 |
| 617 KeyframeEffect* transition = KeyframeEffect::create( | 617 KeyframeEffect* transition = KeyframeEffect::create( |
| 618 element, model, inertAnimation->specifiedTiming(), | 618 element, model, inertAnimation->specifiedTiming(), |
| 619 KeyframeEffect::TransitionPriority, eventDelegate); | 619 KeyframeEffectReadOnly::TransitionPriority, eventDelegate); |
| 620 Animation* animation = element->document().timeline().play(transition); | 620 Animation* animation = element->document().timeline().play(transition); |
| 621 animation->setId(getPropertyName(newTransition.id)); | 621 animation->setId(getPropertyName(newTransition.id)); |
| 622 // Set the current time as the start time for retargeted transitions | 622 // Set the current time as the start time for retargeted transitions |
| 623 if (retargetedCompositorTransitions.contains(id)) | 623 if (retargetedCompositorTransitions.contains(id)) |
| 624 animation->setStartTime(element->document().timeline().currentTime()); | 624 animation->setStartTime(element->document().timeline().currentTime()); |
| 625 animation->update(TimingUpdateOnDemand); | 625 animation->update(TimingUpdateOnDemand); |
| 626 runningTransition.animation = animation; | 626 runningTransition.animation = animation; |
| 627 m_transitions.set(id, runningTransition); | 627 m_transitions.set(id, runningTransition); |
| 628 DCHECK_NE(id, CSSPropertyInvalid); | 628 DCHECK_NE(id, CSSPropertyInvalid); |
| 629 | 629 |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 CSSAnimationUpdate& update, | 850 CSSAnimationUpdate& update, |
| 851 const Element* animatingElement) { | 851 const Element* animatingElement) { |
| 852 ElementAnimations* elementAnimations = | 852 ElementAnimations* elementAnimations = |
| 853 animatingElement ? animatingElement->elementAnimations() : nullptr; | 853 animatingElement ? animatingElement->elementAnimations() : nullptr; |
| 854 AnimationStack* animationStack = | 854 AnimationStack* animationStack = |
| 855 elementAnimations ? &elementAnimations->animationStack() : nullptr; | 855 elementAnimations ? &elementAnimations->animationStack() : nullptr; |
| 856 | 856 |
| 857 if (update.newAnimations().isEmpty() && | 857 if (update.newAnimations().isEmpty() && |
| 858 update.suppressedAnimations().isEmpty()) { | 858 update.suppressedAnimations().isEmpty()) { |
| 859 ActiveInterpolationsMap activeInterpolationsForAnimations( | 859 ActiveInterpolationsMap activeInterpolationsForAnimations( |
| 860 AnimationStack::activeInterpolations(animationStack, nullptr, nullptr, | 860 AnimationStack::activeInterpolations( |
| 861 KeyframeEffect::DefaultPriority, | 861 animationStack, nullptr, nullptr, |
| 862 isStylePropertyHandle)); | 862 KeyframeEffectReadOnly::DefaultPriority, isStylePropertyHandle)); |
| 863 update.adoptActiveInterpolationsForAnimations( | 863 update.adoptActiveInterpolationsForAnimations( |
| 864 activeInterpolationsForAnimations); | 864 activeInterpolationsForAnimations); |
| 865 return; | 865 return; |
| 866 } | 866 } |
| 867 | 867 |
| 868 HeapVector<Member<const InertEffect>> newEffects; | 868 HeapVector<Member<const InertEffect>> newEffects; |
| 869 for (const auto& newAnimation : update.newAnimations()) | 869 for (const auto& newAnimation : update.newAnimations()) |
| 870 newEffects.append(newAnimation.effect); | 870 newEffects.append(newAnimation.effect); |
| 871 | 871 |
| 872 // Animations with updates use a temporary InertEffect for the current frame. | 872 // Animations with updates use a temporary InertEffect for the current frame. |
| 873 for (const auto& updatedAnimation : update.animationsWithUpdates()) | 873 for (const auto& updatedAnimation : update.animationsWithUpdates()) |
| 874 newEffects.append(updatedAnimation.effect); | 874 newEffects.append(updatedAnimation.effect); |
| 875 | 875 |
| 876 ActiveInterpolationsMap activeInterpolationsForAnimations( | 876 ActiveInterpolationsMap activeInterpolationsForAnimations( |
| 877 AnimationStack::activeInterpolations( | 877 AnimationStack::activeInterpolations( |
| 878 animationStack, &newEffects, &update.suppressedAnimations(), | 878 animationStack, &newEffects, &update.suppressedAnimations(), |
| 879 KeyframeEffect::DefaultPriority, isStylePropertyHandle)); | 879 KeyframeEffectReadOnly::DefaultPriority, isStylePropertyHandle)); |
| 880 update.adoptActiveInterpolationsForAnimations( | 880 update.adoptActiveInterpolationsForAnimations( |
| 881 activeInterpolationsForAnimations); | 881 activeInterpolationsForAnimations); |
| 882 } | 882 } |
| 883 | 883 |
| 884 void CSSAnimations::calculateTransitionActiveInterpolations( | 884 void CSSAnimations::calculateTransitionActiveInterpolations( |
| 885 CSSAnimationUpdate& update, | 885 CSSAnimationUpdate& update, |
| 886 const Element* animatingElement) { | 886 const Element* animatingElement) { |
| 887 ElementAnimations* elementAnimations = | 887 ElementAnimations* elementAnimations = |
| 888 animatingElement ? animatingElement->elementAnimations() : nullptr; | 888 animatingElement ? animatingElement->elementAnimations() : nullptr; |
| 889 AnimationStack* animationStack = | 889 AnimationStack* animationStack = |
| 890 elementAnimations ? &elementAnimations->animationStack() : nullptr; | 890 elementAnimations ? &elementAnimations->animationStack() : nullptr; |
| 891 | 891 |
| 892 ActiveInterpolationsMap activeInterpolationsForTransitions; | 892 ActiveInterpolationsMap activeInterpolationsForTransitions; |
| 893 if (update.newTransitions().isEmpty() && | 893 if (update.newTransitions().isEmpty() && |
| 894 update.cancelledTransitions().isEmpty()) { | 894 update.cancelledTransitions().isEmpty()) { |
| 895 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( | 895 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( |
| 896 animationStack, nullptr, nullptr, KeyframeEffect::TransitionPriority, | 896 animationStack, nullptr, nullptr, |
| 897 isStylePropertyHandle); | 897 KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle); |
| 898 } else { | 898 } else { |
| 899 HeapVector<Member<const InertEffect>> newTransitions; | 899 HeapVector<Member<const InertEffect>> newTransitions; |
| 900 for (const auto& entry : update.newTransitions()) | 900 for (const auto& entry : update.newTransitions()) |
| 901 newTransitions.append(entry.value.effect.get()); | 901 newTransitions.append(entry.value.effect.get()); |
| 902 | 902 |
| 903 HeapHashSet<Member<const Animation>> cancelledAnimations; | 903 HeapHashSet<Member<const Animation>> cancelledAnimations; |
| 904 if (!update.cancelledTransitions().isEmpty()) { | 904 if (!update.cancelledTransitions().isEmpty()) { |
| 905 DCHECK(elementAnimations); | 905 DCHECK(elementAnimations); |
| 906 const TransitionMap& transitionMap = | 906 const TransitionMap& transitionMap = |
| 907 elementAnimations->cssAnimations().m_transitions; | 907 elementAnimations->cssAnimations().m_transitions; |
| 908 for (CSSPropertyID id : update.cancelledTransitions()) { | 908 for (CSSPropertyID id : update.cancelledTransitions()) { |
| 909 DCHECK(transitionMap.contains(id)); | 909 DCHECK(transitionMap.contains(id)); |
| 910 cancelledAnimations.add(transitionMap.get(id).animation.get()); | 910 cancelledAnimations.add(transitionMap.get(id).animation.get()); |
| 911 } | 911 } |
| 912 } | 912 } |
| 913 | 913 |
| 914 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( | 914 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( |
| 915 animationStack, &newTransitions, &cancelledAnimations, | 915 animationStack, &newTransitions, &cancelledAnimations, |
| 916 KeyframeEffect::TransitionPriority, isStylePropertyHandle); | 916 KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle); |
| 917 } | 917 } |
| 918 | 918 |
| 919 // Properties being animated by animations don't get values from transitions | 919 // Properties being animated by animations don't get values from transitions |
| 920 // applied. | 920 // applied. |
| 921 if (!update.activeInterpolationsForAnimations().isEmpty() && | 921 if (!update.activeInterpolationsForAnimations().isEmpty() && |
| 922 !activeInterpolationsForTransitions.isEmpty()) { | 922 !activeInterpolationsForTransitions.isEmpty()) { |
| 923 for (const auto& entry : update.activeInterpolationsForAnimations()) | 923 for (const auto& entry : update.activeInterpolationsForAnimations()) |
| 924 activeInterpolationsForTransitions.remove(entry.key); | 924 activeInterpolationsForTransitions.remove(entry.key); |
| 925 } | 925 } |
| 926 update.adoptActiveInterpolationsForTransitions( | 926 update.adoptActiveInterpolationsForTransitions( |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 return toShadowRoot(treeScope.rootNode()).host() == element; | 1084 return toShadowRoot(treeScope.rootNode()).host() == element; |
| 1085 } | 1085 } |
| 1086 | 1086 |
| 1087 DEFINE_TRACE(CSSAnimations) { | 1087 DEFINE_TRACE(CSSAnimations) { |
| 1088 visitor->trace(m_transitions); | 1088 visitor->trace(m_transitions); |
| 1089 visitor->trace(m_pendingUpdate); | 1089 visitor->trace(m_pendingUpdate); |
| 1090 visitor->trace(m_runningAnimations); | 1090 visitor->trace(m_runningAnimations); |
| 1091 } | 1091 } |
| 1092 | 1092 |
| 1093 } // namespace blink | 1093 } // namespace blink |
| OLD | NEW |