| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "core/animation/InterpolationEnvironment.h" | 43 #include "core/animation/InterpolationEnvironment.h" |
| 44 #include "core/animation/InterpolationType.h" | 44 #include "core/animation/InterpolationType.h" |
| 45 #include "core/animation/KeyframeEffectModel.h" | 45 #include "core/animation/KeyframeEffectModel.h" |
| 46 #include "core/animation/KeyframeEffectReadOnly.h" | 46 #include "core/animation/KeyframeEffectReadOnly.h" |
| 47 #include "core/animation/TransitionInterpolation.h" | 47 #include "core/animation/TransitionInterpolation.h" |
| 48 #include "core/animation/css/CSSAnimatableValueFactory.h" | 48 #include "core/animation/css/CSSAnimatableValueFactory.h" |
| 49 #include "core/css/CSSKeyframeRule.h" | 49 #include "core/css/CSSKeyframeRule.h" |
| 50 #include "core/css/CSSPropertyEquality.h" | 50 #include "core/css/CSSPropertyEquality.h" |
| 51 #include "core/css/CSSPropertyMetadata.h" | 51 #include "core/css/CSSPropertyMetadata.h" |
| 52 #include "core/css/CSSValueList.h" | 52 #include "core/css/CSSValueList.h" |
| 53 #include "core/css/PropertyRegistry.h" |
| 54 #include "core/css/parser/CSSVariableParser.h" |
| 53 #include "core/css/resolver/CSSToStyleMap.h" | 55 #include "core/css/resolver/CSSToStyleMap.h" |
| 54 #include "core/css/resolver/StyleResolver.h" | 56 #include "core/css/resolver/StyleResolver.h" |
| 55 #include "core/dom/Element.h" | 57 #include "core/dom/Element.h" |
| 56 #include "core/dom/PseudoElement.h" | 58 #include "core/dom/PseudoElement.h" |
| 57 #include "core/dom/StyleEngine.h" | 59 #include "core/dom/StyleEngine.h" |
| 58 #include "core/events/AnimationEvent.h" | 60 #include "core/events/AnimationEvent.h" |
| 59 #include "core/events/TransitionEvent.h" | 61 #include "core/events/TransitionEvent.h" |
| 60 #include "core/frame/UseCounter.h" | 62 #include "core/frame/UseCounter.h" |
| 61 #include "core/layout/LayoutObject.h" | 63 #include "core/layout/LayoutObject.h" |
| 62 #include "core/paint/PaintLayer.h" | 64 #include "core/paint/PaintLayer.h" |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram( | 611 UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram( |
| 610 property.cssProperty())); | 612 property.cssProperty())); |
| 611 } | 613 } |
| 612 clearPendingUpdate(); | 614 clearPendingUpdate(); |
| 613 } | 615 } |
| 614 | 616 |
| 615 void CSSAnimations::calculateTransitionUpdateForProperty( | 617 void CSSAnimations::calculateTransitionUpdateForProperty( |
| 616 TransitionUpdateState& state, | 618 TransitionUpdateState& state, |
| 617 const PropertyHandle& property, | 619 const PropertyHandle& property, |
| 618 size_t transitionIndex) { | 620 size_t transitionIndex) { |
| 619 state.listedProperties.set(property.cssProperty() - firstCSSProperty); | 621 state.listedProperties.insert(property); |
| 620 | 622 |
| 621 // FIXME: We should transition if an !important property changes even when an | 623 // FIXME: We should transition if an !important property changes even when an |
| 622 // animation is running, but this is a bit hard to do with the current | 624 // animation is running, but this is a bit hard to do with the current |
| 623 // applyMatchedProperties system. | 625 // applyMatchedProperties system. |
| 624 if (state.update.activeInterpolationsForAnimations().contains(property) || | 626 if (state.update.activeInterpolationsForAnimations().contains(property) || |
| 625 (state.animatingElement->elementAnimations() && | 627 (state.animatingElement->elementAnimations() && |
| 626 state.animatingElement->elementAnimations() | 628 state.animatingElement->elementAnimations() |
| 627 ->cssAnimations() | 629 ->cssAnimations() |
| 628 .m_previousActiveInterpolationsForAnimations.contains(property))) { | 630 .m_previousActiveInterpolationsForAnimations.contains(property))) { |
| 629 return; | 631 return; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 644 DCHECK(!state.animatingElement->elementAnimations() || | 646 DCHECK(!state.animatingElement->elementAnimations() || |
| 645 !state.animatingElement->elementAnimations() | 647 !state.animatingElement->elementAnimations() |
| 646 ->isAnimationStyleChange()); | 648 ->isAnimationStyleChange()); |
| 647 | 649 |
| 648 if (to->equals(runningTransition->reversingAdjustedStartValue.get())) { | 650 if (to->equals(runningTransition->reversingAdjustedStartValue.get())) { |
| 649 interruptedTransition = runningTransition; | 651 interruptedTransition = runningTransition; |
| 650 } | 652 } |
| 651 } | 653 } |
| 652 } | 654 } |
| 653 | 655 |
| 654 if (CSSPropertyEquality::propertiesEqual(property.cssProperty(), | 656 const PropertyRegistry* registry = |
| 655 state.oldStyle, state.style)) { | 657 state.animatingElement->document().propertyRegistry(); |
| 658 |
| 659 if (property.isCSSCustomProperty()) { |
| 660 if (!registry || !registry->registration(property.customPropertyName()) || |
| 661 CSSPropertyEquality::registeredCustomPropertiesEqual( |
| 662 property.customPropertyName(), state.oldStyle, state.style)) { |
| 663 return; |
| 664 } |
| 665 } else if (CSSPropertyEquality::propertiesEqual( |
| 666 property.cssProperty(), state.oldStyle, state.style)) { |
| 656 return; | 667 return; |
| 657 } | 668 } |
| 658 | 669 |
| 659 if (!to) | 670 if (!to) |
| 660 to = CSSAnimatableValueFactory::create(property, state.style); | 671 to = CSSAnimatableValueFactory::create(property, state.style); |
| 661 RefPtr<AnimatableValue> from = | 672 RefPtr<AnimatableValue> from = |
| 662 CSSAnimatableValueFactory::create(property, state.oldStyle); | 673 CSSAnimatableValueFactory::create(property, state.oldStyle); |
| 663 | 674 |
| 664 // TODO(alancutter): Support transitions on registered custom properties and | 675 CSSInterpolationTypesMap map(registry); |
| 665 // give the map a PropertyRegistry. | |
| 666 CSSInterpolationTypesMap map(nullptr); | |
| 667 InterpolationEnvironment oldEnvironment(map, state.oldStyle); | 676 InterpolationEnvironment oldEnvironment(map, state.oldStyle); |
| 668 InterpolationEnvironment newEnvironment(map, state.style); | 677 InterpolationEnvironment newEnvironment(map, state.style); |
| 669 InterpolationValue start = nullptr; | 678 InterpolationValue start = nullptr; |
| 670 InterpolationValue end = nullptr; | 679 InterpolationValue end = nullptr; |
| 671 const InterpolationType* transitionType = nullptr; | 680 const InterpolationType* transitionType = nullptr; |
| 672 for (const auto& interpolationType : map.get(property)) { | 681 for (const auto& interpolationType : map.get(property)) { |
| 673 start = interpolationType->maybeConvertUnderlyingValue(oldEnvironment); | 682 start = interpolationType->maybeConvertUnderlyingValue(oldEnvironment); |
| 674 if (!start) { | 683 if (!start) { |
| 675 continue; | 684 continue; |
| 676 } | 685 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 TransitionKeyframeEffectModel* model = | 776 TransitionKeyframeEffectModel* model = |
| 768 TransitionKeyframeEffectModel::create(keyframes); | 777 TransitionKeyframeEffectModel::create(keyframes); |
| 769 state.update.startTransition( | 778 state.update.startTransition( |
| 770 property, from.get(), to.get(), reversingAdjustedStartValue, | 779 property, from.get(), to.get(), reversingAdjustedStartValue, |
| 771 reversingShorteningFactor, *InertEffect::create(model, timing, false, 0)); | 780 reversingShorteningFactor, *InertEffect::create(model, timing, false, 0)); |
| 772 DCHECK( | 781 DCHECK( |
| 773 !state.animatingElement->elementAnimations() || | 782 !state.animatingElement->elementAnimations() || |
| 774 !state.animatingElement->elementAnimations()->isAnimationStyleChange()); | 783 !state.animatingElement->elementAnimations()->isAnimationStyleChange()); |
| 775 } | 784 } |
| 776 | 785 |
| 786 void CSSAnimations::calculateTransitionUpdateForCustomProperty( |
| 787 TransitionUpdateState& state, |
| 788 const CSSTransitionData::TransitionProperty& transitionProperty, |
| 789 size_t transitionIndex) { |
| 790 if (transitionProperty.propertyType != |
| 791 CSSTransitionData::TransitionUnknownProperty) { |
| 792 return; |
| 793 } |
| 794 if (!CSSVariableParser::isValidVariableName( |
| 795 transitionProperty.propertyString)) { |
| 796 return; |
| 797 } |
| 798 calculateTransitionUpdateForProperty( |
| 799 state, PropertyHandle(transitionProperty.propertyString), |
| 800 transitionIndex); |
| 801 } |
| 802 |
| 777 void CSSAnimations::calculateTransitionUpdateForStandardProperty( | 803 void CSSAnimations::calculateTransitionUpdateForStandardProperty( |
| 778 TransitionUpdateState& state, | 804 TransitionUpdateState& state, |
| 779 const CSSTransitionData::TransitionProperty& transitionProperty, | 805 const CSSTransitionData::TransitionProperty& transitionProperty, |
| 780 size_t transitionIndex) { | 806 size_t transitionIndex) { |
| 781 if (transitionProperty.propertyType != | 807 if (transitionProperty.propertyType != |
| 782 CSSTransitionData::TransitionKnownProperty) { | 808 CSSTransitionData::TransitionKnownProperty) { |
| 783 return; | 809 return; |
| 784 } | 810 } |
| 785 | 811 |
| 786 CSSPropertyID resolvedID = | 812 CSSPropertyID resolvedID = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 800 if (!animateAll && | 826 if (!animateAll && |
| 801 !CSSPropertyMetadata::isInterpolableProperty(longhandID)) { | 827 !CSSPropertyMetadata::isInterpolableProperty(longhandID)) { |
| 802 continue; | 828 continue; |
| 803 } | 829 } |
| 804 | 830 |
| 805 calculateTransitionUpdateForProperty(state, property, transitionIndex); | 831 calculateTransitionUpdateForProperty(state, property, transitionIndex); |
| 806 } | 832 } |
| 807 } | 833 } |
| 808 | 834 |
| 809 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate& update, | 835 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate& update, |
| 836 PropertyPass propertyPass, |
| 810 const Element* animatingElement, | 837 const Element* animatingElement, |
| 811 const ComputedStyle& style) { | 838 const ComputedStyle& style) { |
| 812 if (!animatingElement) | 839 if (!animatingElement) |
| 813 return; | 840 return; |
| 814 | 841 |
| 815 if (animatingElement->document().finishingOrIsPrinting()) | 842 if (animatingElement->document().finishingOrIsPrinting()) |
| 816 return; | 843 return; |
| 817 | 844 |
| 818 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); | 845 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); |
| 819 const TransitionMap* activeTransitions = | 846 const TransitionMap* activeTransitions = |
| 820 elementAnimations ? &elementAnimations->cssAnimations().m_transitions | 847 elementAnimations ? &elementAnimations->cssAnimations().m_transitions |
| 821 : nullptr; | 848 : nullptr; |
| 822 const CSSTransitionData* transitionData = style.transitions(); | 849 const CSSTransitionData* transitionData = style.transitions(); |
| 823 | 850 |
| 824 const bool animationStyleRecalc = | 851 const bool animationStyleRecalc = |
| 825 elementAnimations && elementAnimations->isAnimationStyleChange(); | 852 elementAnimations && elementAnimations->isAnimationStyleChange(); |
| 826 | 853 |
| 827 std::bitset<numCSSProperties> listedProperties; | 854 HashSet<PropertyHandle> listedProperties; |
| 828 bool anyTransitionHadTransitionAll = false; | 855 bool anyTransitionHadTransitionAll = false; |
| 829 const LayoutObject* layoutObject = animatingElement->layoutObject(); | 856 const LayoutObject* layoutObject = animatingElement->layoutObject(); |
| 830 if (!animationStyleRecalc && style.display() != EDisplay::None && | 857 if (!animationStyleRecalc && style.display() != EDisplay::None && |
| 831 layoutObject && layoutObject->style() && transitionData) { | 858 layoutObject && layoutObject->style() && transitionData) { |
| 832 TransitionUpdateState state = { | 859 TransitionUpdateState state = { |
| 833 update, animatingElement, *layoutObject->style(), | 860 update, animatingElement, *layoutObject->style(), |
| 834 style, activeTransitions, listedProperties, | 861 style, activeTransitions, listedProperties, |
| 835 *transitionData}; | 862 *transitionData}; |
| 836 | 863 |
| 837 for (size_t transitionIndex = 0; | 864 for (size_t transitionIndex = 0; |
| 838 transitionIndex < transitionData->propertyList().size(); | 865 transitionIndex < transitionData->propertyList().size(); |
| 839 ++transitionIndex) { | 866 ++transitionIndex) { |
| 840 const CSSTransitionData::TransitionProperty& transitionProperty = | 867 const CSSTransitionData::TransitionProperty& transitionProperty = |
| 841 transitionData->propertyList()[transitionIndex]; | 868 transitionData->propertyList()[transitionIndex]; |
| 842 if (transitionProperty.unresolvedProperty == CSSPropertyAll) { | 869 if (transitionProperty.unresolvedProperty == CSSPropertyAll) { |
| 843 anyTransitionHadTransitionAll = true; | 870 anyTransitionHadTransitionAll = true; |
| 844 } | 871 } |
| 845 calculateTransitionUpdateForStandardProperty(state, transitionProperty, | 872 if (propertyPass == PropertyPass::Custom) { |
| 873 calculateTransitionUpdateForCustomProperty(state, transitionProperty, |
| 846 transitionIndex); | 874 transitionIndex); |
| 875 } else { |
| 876 DCHECK_EQ(propertyPass, PropertyPass::Standard); |
| 877 calculateTransitionUpdateForStandardProperty(state, transitionProperty, |
| 878 transitionIndex); |
| 879 } |
| 847 } | 880 } |
| 848 } | 881 } |
| 849 | 882 |
| 850 if (activeTransitions) { | 883 if (activeTransitions) { |
| 851 for (const auto& entry : *activeTransitions) { | 884 for (const auto& entry : *activeTransitions) { |
| 852 const PropertyHandle& property = entry.key; | 885 const PropertyHandle& property = entry.key; |
| 853 // TODO(alancutter): Handle transitions on custom properties. | 886 if (property.isCSSCustomProperty() != |
| 854 DCHECK(!property.isCSSCustomProperty()); | 887 (propertyPass == PropertyPass::Custom)) { |
| 855 CSSPropertyID id = property.cssProperty(); | 888 continue; |
| 889 } |
| 856 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && | 890 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && |
| 857 !listedProperties.test(id - firstCSSProperty)) { | 891 !listedProperties.contains(property)) { |
| 858 update.cancelTransition(property); | 892 update.cancelTransition(property); |
| 859 } else if (entry.value.animation->finishedInternal()) { | 893 } else if (entry.value.animation->finishedInternal()) { |
| 860 update.finishTransition(property); | 894 update.finishTransition(property); |
| 861 } | 895 } |
| 862 } | 896 } |
| 863 } | 897 } |
| 864 calculateTransitionActiveInterpolations(update, animatingElement); | 898 |
| 899 calculateTransitionActiveInterpolations(update, propertyPass, |
| 900 animatingElement); |
| 865 } | 901 } |
| 866 | 902 |
| 867 void CSSAnimations::cancel() { | 903 void CSSAnimations::cancel() { |
| 868 for (const auto& runningAnimation : m_runningAnimations) { | 904 for (const auto& runningAnimation : m_runningAnimations) { |
| 869 runningAnimation->animation->cancel(); | 905 runningAnimation->animation->cancel(); |
| 870 runningAnimation->animation->update(TimingUpdateOnDemand); | 906 runningAnimation->animation->update(TimingUpdateOnDemand); |
| 871 } | 907 } |
| 872 | 908 |
| 873 for (const auto& entry : m_transitions) { | 909 for (const auto& entry : m_transitions) { |
| 874 entry.value.animation->cancel(); | 910 entry.value.animation->cancel(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 920 newEffects.push_back(updatedAnimation.effect); | 956 newEffects.push_back(updatedAnimation.effect); |
| 921 | 957 |
| 922 ActiveInterpolationsMap activeInterpolationsForAnimations( | 958 ActiveInterpolationsMap activeInterpolationsForAnimations( |
| 923 EffectStack::activeInterpolations( | 959 EffectStack::activeInterpolations( |
| 924 effectStack, &newEffects, &update.suppressedAnimations(), | 960 effectStack, &newEffects, &update.suppressedAnimations(), |
| 925 KeyframeEffectReadOnly::DefaultPriority, isStylePropertyHandle)); | 961 KeyframeEffectReadOnly::DefaultPriority, isStylePropertyHandle)); |
| 926 update.adoptActiveInterpolationsForAnimations( | 962 update.adoptActiveInterpolationsForAnimations( |
| 927 activeInterpolationsForAnimations); | 963 activeInterpolationsForAnimations); |
| 928 } | 964 } |
| 929 | 965 |
| 966 static bool isCustomStylePropertyHandle(const PropertyHandle& property) { |
| 967 return property.isCSSCustomProperty(); |
| 968 } |
| 969 |
| 970 static bool isStandardStylePropertyHandle(const PropertyHandle& property) { |
| 971 return isStylePropertyHandle(property) && !property.isCSSCustomProperty(); |
| 972 } |
| 973 |
| 974 static EffectStack::PropertyHandleFilter stylePropertyFilter( |
| 975 CSSAnimations::PropertyPass propertyPass) { |
| 976 if (propertyPass == CSSAnimations::PropertyPass::Custom) { |
| 977 return isCustomStylePropertyHandle; |
| 978 } |
| 979 DCHECK_EQ(propertyPass, CSSAnimations::PropertyPass::Standard); |
| 980 return isStandardStylePropertyHandle; |
| 981 } |
| 982 |
| 930 void CSSAnimations::calculateTransitionActiveInterpolations( | 983 void CSSAnimations::calculateTransitionActiveInterpolations( |
| 931 CSSAnimationUpdate& update, | 984 CSSAnimationUpdate& update, |
| 985 PropertyPass propertyPass, |
| 932 const Element* animatingElement) { | 986 const Element* animatingElement) { |
| 933 ElementAnimations* elementAnimations = | 987 ElementAnimations* elementAnimations = |
| 934 animatingElement ? animatingElement->elementAnimations() : nullptr; | 988 animatingElement ? animatingElement->elementAnimations() : nullptr; |
| 935 EffectStack* effectStack = | 989 EffectStack* effectStack = |
| 936 elementAnimations ? &elementAnimations->effectStack() : nullptr; | 990 elementAnimations ? &elementAnimations->effectStack() : nullptr; |
| 937 | 991 |
| 938 ActiveInterpolationsMap activeInterpolationsForTransitions; | 992 ActiveInterpolationsMap activeInterpolationsForTransitions; |
| 939 if (update.newTransitions().isEmpty() && | 993 if (update.newTransitions().isEmpty() && |
| 940 update.cancelledTransitions().isEmpty()) { | 994 update.cancelledTransitions().isEmpty()) { |
| 941 activeInterpolationsForTransitions = EffectStack::activeInterpolations( | 995 activeInterpolationsForTransitions = EffectStack::activeInterpolations( |
| 942 effectStack, nullptr, nullptr, | 996 effectStack, nullptr, nullptr, |
| 943 KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle); | 997 KeyframeEffectReadOnly::TransitionPriority, |
| 998 stylePropertyFilter(propertyPass)); |
| 944 } else { | 999 } else { |
| 945 HeapVector<Member<const InertEffect>> newTransitions; | 1000 HeapVector<Member<const InertEffect>> newTransitions; |
| 946 for (const auto& entry : update.newTransitions()) | 1001 for (const auto& entry : update.newTransitions()) |
| 947 newTransitions.push_back(entry.value.effect.get()); | 1002 newTransitions.push_back(entry.value.effect.get()); |
| 948 | 1003 |
| 949 HeapHashSet<Member<const Animation>> cancelledAnimations; | 1004 HeapHashSet<Member<const Animation>> cancelledAnimations; |
| 950 if (!update.cancelledTransitions().isEmpty()) { | 1005 if (!update.cancelledTransitions().isEmpty()) { |
| 951 DCHECK(elementAnimations); | 1006 DCHECK(elementAnimations); |
| 952 const TransitionMap& transitionMap = | 1007 const TransitionMap& transitionMap = |
| 953 elementAnimations->cssAnimations().m_transitions; | 1008 elementAnimations->cssAnimations().m_transitions; |
| 954 for (const PropertyHandle& property : update.cancelledTransitions()) { | 1009 for (const PropertyHandle& property : update.cancelledTransitions()) { |
| 955 DCHECK(transitionMap.contains(property)); | 1010 DCHECK(transitionMap.contains(property)); |
| 956 cancelledAnimations.insert(transitionMap.at(property).animation.get()); | 1011 cancelledAnimations.insert(transitionMap.at(property).animation.get()); |
| 957 } | 1012 } |
| 958 } | 1013 } |
| 959 | 1014 |
| 960 activeInterpolationsForTransitions = EffectStack::activeInterpolations( | 1015 activeInterpolationsForTransitions = EffectStack::activeInterpolations( |
| 961 effectStack, &newTransitions, &cancelledAnimations, | 1016 effectStack, &newTransitions, &cancelledAnimations, |
| 962 KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle); | 1017 KeyframeEffectReadOnly::TransitionPriority, |
| 1018 stylePropertyFilter(propertyPass)); |
| 963 } | 1019 } |
| 964 | 1020 |
| 965 // Properties being animated by animations don't get values from transitions | 1021 // Properties being animated by animations don't get values from transitions |
| 966 // applied. | 1022 // applied. |
| 967 if (!update.activeInterpolationsForAnimations().isEmpty() && | 1023 if (!update.activeInterpolationsForAnimations().isEmpty() && |
| 968 !activeInterpolationsForTransitions.isEmpty()) { | 1024 !activeInterpolationsForTransitions.isEmpty()) { |
| 969 for (const auto& entry : update.activeInterpolationsForAnimations()) | 1025 for (const auto& entry : update.activeInterpolationsForAnimations()) |
| 970 activeInterpolationsForTransitions.erase(entry.key); | 1026 activeInterpolationsForTransitions.erase(entry.key); |
| 971 } | 1027 } |
| 972 update.adoptActiveInterpolationsForStandardTransitions( | 1028 |
| 973 activeInterpolationsForTransitions); | 1029 if (propertyPass == PropertyPass::Custom) { |
| 1030 update.adoptActiveInterpolationsForCustomTransitions( |
| 1031 activeInterpolationsForTransitions); |
| 1032 } else { |
| 1033 DCHECK_EQ(propertyPass, PropertyPass::Standard); |
| 1034 update.adoptActiveInterpolationsForStandardTransitions( |
| 1035 activeInterpolationsForTransitions); |
| 1036 } |
| 974 } | 1037 } |
| 975 | 1038 |
| 976 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { | 1039 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { |
| 977 return EventPath::eventTargetRespectingTargetRules(*m_animationTarget); | 1040 return EventPath::eventTargetRespectingTargetRules(*m_animationTarget); |
| 978 } | 1041 } |
| 979 | 1042 |
| 980 void CSSAnimations::AnimationEventDelegate::maybeDispatch( | 1043 void CSSAnimations::AnimationEventDelegate::maybeDispatch( |
| 981 Document::ListenerType listenerType, | 1044 Document::ListenerType listenerType, |
| 982 const AtomicString& eventName, | 1045 const AtomicString& eventName, |
| 983 double elapsedTime) { | 1046 double elapsedTime) { |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1144 isCustomPropertyHandle); | 1207 isCustomPropertyHandle); |
| 1145 } | 1208 } |
| 1146 | 1209 |
| 1147 DEFINE_TRACE(CSSAnimations) { | 1210 DEFINE_TRACE(CSSAnimations) { |
| 1148 visitor->trace(m_transitions); | 1211 visitor->trace(m_transitions); |
| 1149 visitor->trace(m_pendingUpdate); | 1212 visitor->trace(m_pendingUpdate); |
| 1150 visitor->trace(m_runningAnimations); | 1213 visitor->trace(m_runningAnimations); |
| 1151 } | 1214 } |
| 1152 | 1215 |
| 1153 } // namespace blink | 1216 } // namespace blink |
| OLD | NEW |