| 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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 261 |
| 262 void CSSAnimations::calculateCompositorAnimationUpdate( | 262 void CSSAnimations::calculateCompositorAnimationUpdate( |
| 263 CSSAnimationUpdate& update, | 263 CSSAnimationUpdate& update, |
| 264 const Element* animatingElement, | 264 const Element* animatingElement, |
| 265 Element& element, | 265 Element& element, |
| 266 const ComputedStyle& style, | 266 const ComputedStyle& style, |
| 267 const ComputedStyle* parentStyle) { | 267 const ComputedStyle* parentStyle) { |
| 268 ElementAnimations* elementAnimations = | 268 ElementAnimations* elementAnimations = |
| 269 animatingElement ? animatingElement->elementAnimations() : nullptr; | 269 animatingElement ? animatingElement->elementAnimations() : nullptr; |
| 270 | 270 |
| 271 // We only update compositor animations in response to changes in the base sty
le. | 271 // We only update compositor animations in response to changes in the base |
| 272 // style. |
| 272 if (!elementAnimations || elementAnimations->isAnimationStyleChange()) | 273 if (!elementAnimations || elementAnimations->isAnimationStyleChange()) |
| 273 return; | 274 return; |
| 274 | 275 |
| 275 if (!animatingElement->layoutObject() || | 276 if (!animatingElement->layoutObject() || |
| 276 !animatingElement->layoutObject()->style()) | 277 !animatingElement->layoutObject()->style()) |
| 277 return; | 278 return; |
| 278 | 279 |
| 279 const ComputedStyle& oldStyle = *animatingElement->layoutObject()->style(); | 280 const ComputedStyle& oldStyle = *animatingElement->layoutObject()->style(); |
| 280 if (!oldStyle.shouldCompositeForCurrentAnimations()) | 281 if (!oldStyle.shouldCompositeForCurrentAnimations()) |
| 281 return; | 282 return; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 312 const ComputedStyle& style, | 313 const ComputedStyle& style, |
| 313 ComputedStyle* parentStyle, | 314 ComputedStyle* parentStyle, |
| 314 StyleResolver* resolver) { | 315 StyleResolver* resolver) { |
| 315 const ElementAnimations* elementAnimations = | 316 const ElementAnimations* elementAnimations = |
| 316 animatingElement ? animatingElement->elementAnimations() : nullptr; | 317 animatingElement ? animatingElement->elementAnimations() : nullptr; |
| 317 | 318 |
| 318 bool isAnimationStyleChange = | 319 bool isAnimationStyleChange = |
| 319 elementAnimations && elementAnimations->isAnimationStyleChange(); | 320 elementAnimations && elementAnimations->isAnimationStyleChange(); |
| 320 | 321 |
| 321 #if !DCHECK_IS_ON() | 322 #if !DCHECK_IS_ON() |
| 322 // If we're in an animation style change, no animations can have started, been
cancelled or changed play state. | 323 // If we're in an animation style change, no animations can have started, been |
| 323 // When DCHECK is enabled, we verify this optimization. | 324 // cancelled or changed play state. When DCHECK is enabled, we verify this |
| 325 // optimization. |
| 324 if (isAnimationStyleChange) | 326 if (isAnimationStyleChange) |
| 325 return; | 327 return; |
| 326 #endif | 328 #endif |
| 327 | 329 |
| 328 const CSSAnimationData* animationData = style.animations(); | 330 const CSSAnimationData* animationData = style.animations(); |
| 329 const CSSAnimations* cssAnimations = | 331 const CSSAnimations* cssAnimations = |
| 330 elementAnimations ? &elementAnimations->cssAnimations() : nullptr; | 332 elementAnimations ? &elementAnimations->cssAnimations() : nullptr; |
| 331 const Element* elementForScoping = | 333 const Element* elementForScoping = |
| 332 animatingElement ? animatingElement : &element; | 334 animatingElement ? animatingElement : &element; |
| 333 | 335 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 } | 459 } |
| 458 | 460 |
| 459 void CSSAnimations::maybeApplyPendingUpdate(Element* element) { | 461 void CSSAnimations::maybeApplyPendingUpdate(Element* element) { |
| 460 m_previousActiveInterpolationsForAnimations.clear(); | 462 m_previousActiveInterpolationsForAnimations.clear(); |
| 461 if (m_pendingUpdate.isEmpty()) | 463 if (m_pendingUpdate.isEmpty()) |
| 462 return; | 464 return; |
| 463 | 465 |
| 464 m_previousActiveInterpolationsForAnimations.swap( | 466 m_previousActiveInterpolationsForAnimations.swap( |
| 465 m_pendingUpdate.activeInterpolationsForAnimations()); | 467 m_pendingUpdate.activeInterpolationsForAnimations()); |
| 466 | 468 |
| 467 // FIXME: cancelling, pausing, unpausing animations all query compositingState
, which is not necessarily up to date here | 469 // FIXME: cancelling, pausing, unpausing animations all query |
| 470 // compositingState, which is not necessarily up to date here |
| 468 // since we call this from recalc style. | 471 // since we call this from recalc style. |
| 469 // https://code.google.com/p/chromium/issues/detail?id=339847 | 472 // https://code.google.com/p/chromium/issues/detail?id=339847 |
| 470 DisableCompositingQueryAsserts disabler; | 473 DisableCompositingQueryAsserts disabler; |
| 471 | 474 |
| 472 for (size_t pausedIndex : | 475 for (size_t pausedIndex : |
| 473 m_pendingUpdate.animationIndicesWithPauseToggled()) { | 476 m_pendingUpdate.animationIndicesWithPauseToggled()) { |
| 474 Animation& animation = *m_runningAnimations[pausedIndex]->animation; | 477 Animation& animation = *m_runningAnimations[pausedIndex]->animation; |
| 475 if (animation.paused()) | 478 if (animation.paused()) |
| 476 animation.unpause(); | 479 animation.unpause(); |
| 477 else | 480 else |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 Timing timing = transitionData.convertToTiming(transitionIndex); | 679 Timing timing = transitionData.convertToTiming(transitionIndex); |
| 677 if (timing.startDelay + timing.iterationDuration <= 0) | 680 if (timing.startDelay + timing.iterationDuration <= 0) |
| 678 return; | 681 return; |
| 679 | 682 |
| 680 AnimatableValue* reversingAdjustedStartValue = from.get(); | 683 AnimatableValue* reversingAdjustedStartValue = from.get(); |
| 681 double reversingShorteningFactor = 1; | 684 double reversingShorteningFactor = 1; |
| 682 if (interruptedTransition) { | 685 if (interruptedTransition) { |
| 683 const double interruptedProgress = | 686 const double interruptedProgress = |
| 684 interruptedTransition->animation->effect()->progress(); | 687 interruptedTransition->animation->effect()->progress(); |
| 685 if (!std::isnan(interruptedProgress)) { | 688 if (!std::isnan(interruptedProgress)) { |
| 686 // const_cast because we need to take a ref later when passing to startTra
nsition. | 689 // const_cast because we need to take a ref later when passing to |
| 690 // startTransition. |
| 687 reversingAdjustedStartValue = | 691 reversingAdjustedStartValue = |
| 688 const_cast<AnimatableValue*>(interruptedTransition->to); | 692 const_cast<AnimatableValue*>(interruptedTransition->to); |
| 689 reversingShorteningFactor = | 693 reversingShorteningFactor = |
| 690 clampTo((interruptedProgress * | 694 clampTo((interruptedProgress * |
| 691 interruptedTransition->reversingShorteningFactor) + | 695 interruptedTransition->reversingShorteningFactor) + |
| 692 (1 - interruptedTransition->reversingShorteningFactor), | 696 (1 - interruptedTransition->reversingShorteningFactor), |
| 693 0.0, 1.0); | 697 0.0, 1.0); |
| 694 timing.iterationDuration *= reversingShorteningFactor; | 698 timing.iterationDuration *= reversingShorteningFactor; |
| 695 if (timing.startDelay < 0) { | 699 if (timing.startDelay < 0) { |
| 696 timing.startDelay *= reversingShorteningFactor; | 700 timing.startDelay *= reversingShorteningFactor; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 animatingElement->document().wasPrinting()) | 750 animatingElement->document().wasPrinting()) |
| 747 return; | 751 return; |
| 748 | 752 |
| 749 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); | 753 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); |
| 750 const TransitionMap* activeTransitions = | 754 const TransitionMap* activeTransitions = |
| 751 elementAnimations ? &elementAnimations->cssAnimations().m_transitions | 755 elementAnimations ? &elementAnimations->cssAnimations().m_transitions |
| 752 : nullptr; | 756 : nullptr; |
| 753 const CSSTransitionData* transitionData = style.transitions(); | 757 const CSSTransitionData* transitionData = style.transitions(); |
| 754 | 758 |
| 755 #if DCHECK_IS_ON() | 759 #if DCHECK_IS_ON() |
| 756 // In debug builds we verify that it would have been safe to avoid populating
and testing listedProperties if the style recalc is due to animation. | 760 // In debug builds we verify that it would have been safe to avoid populating |
| 761 // and testing listedProperties if the style recalc is due to animation. |
| 757 const bool animationStyleRecalc = false; | 762 const bool animationStyleRecalc = false; |
| 758 #else | 763 #else |
| 759 // In release builds we avoid the cost of checking for new and interrupted tra
nsitions if the style recalc is due to animation. | 764 // In release builds we avoid the cost of checking for new and interrupted |
| 765 // transitions if the style recalc is due to animation. |
| 760 const bool animationStyleRecalc = | 766 const bool animationStyleRecalc = |
| 761 elementAnimations && elementAnimations->isAnimationStyleChange(); | 767 elementAnimations && elementAnimations->isAnimationStyleChange(); |
| 762 #endif | 768 #endif |
| 763 | 769 |
| 764 std::bitset<numCSSProperties> listedProperties; | 770 std::bitset<numCSSProperties> listedProperties; |
| 765 bool anyTransitionHadTransitionAll = false; | 771 bool anyTransitionHadTransitionAll = false; |
| 766 const LayoutObject* layoutObject = animatingElement->layoutObject(); | 772 const LayoutObject* layoutObject = animatingElement->layoutObject(); |
| 767 if (!animationStyleRecalc && style.display() != EDisplay::None && | 773 if (!animationStyleRecalc && style.display() != EDisplay::None && |
| 768 layoutObject && layoutObject->style() && transitionData) { | 774 layoutObject && layoutObject->style() && transitionData) { |
| 769 const ComputedStyle& oldStyle = *layoutObject->style(); | 775 const ComputedStyle& oldStyle = *layoutObject->style(); |
| 770 | 776 |
| 771 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { | 777 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { |
| 772 const CSSTransitionData::TransitionProperty& transitionProperty = | 778 const CSSTransitionData::TransitionProperty& transitionProperty = |
| 773 transitionData->propertyList()[i]; | 779 transitionData->propertyList()[i]; |
| 774 if (transitionProperty.propertyType != | 780 if (transitionProperty.propertyType != |
| 775 CSSTransitionData::TransitionKnownProperty) | 781 CSSTransitionData::TransitionKnownProperty) |
| 776 continue; | 782 continue; |
| 777 | 783 |
| 778 CSSPropertyID property = | 784 CSSPropertyID property = |
| 779 resolveCSSPropertyID(transitionProperty.unresolvedProperty); | 785 resolveCSSPropertyID(transitionProperty.unresolvedProperty); |
| 780 bool animateAll = property == CSSPropertyAll; | 786 bool animateAll = property == CSSPropertyAll; |
| 781 if (animateAll) | 787 if (animateAll) |
| 782 anyTransitionHadTransitionAll = true; | 788 anyTransitionHadTransitionAll = true; |
| 783 const StylePropertyShorthand& propertyList = | 789 const StylePropertyShorthand& propertyList = |
| 784 animateAll ? CSSAnimations::propertiesForTransitionAll() | 790 animateAll ? CSSAnimations::propertiesForTransitionAll() |
| 785 : shorthandForProperty(property); | 791 : shorthandForProperty(property); |
| 786 // If not a shorthand we only execute one iteration of this loop, and refe
r to the property directly. | 792 // If not a shorthand we only execute one iteration of this loop, and |
| 793 // refer to the property directly. |
| 787 for (unsigned j = 0; !j || j < propertyList.length(); ++j) { | 794 for (unsigned j = 0; !j || j < propertyList.length(); ++j) { |
| 788 CSSPropertyID id = | 795 CSSPropertyID id = |
| 789 propertyList.length() ? propertyList.properties()[j] : property; | 796 propertyList.length() ? propertyList.properties()[j] : property; |
| 790 DCHECK_GE(id, firstCSSProperty); | 797 DCHECK_GE(id, firstCSSProperty); |
| 791 | 798 |
| 792 if (!animateAll) { | 799 if (!animateAll) { |
| 793 if (CSSPropertyMetadata::isInterpolableProperty(id)) | 800 if (CSSPropertyMetadata::isInterpolableProperty(id)) |
| 794 listedProperties.set(id - firstCSSProperty); | 801 listedProperties.set(id - firstCSSProperty); |
| 795 else | 802 else |
| 796 continue; | 803 continue; |
| 797 } | 804 } |
| 798 | 805 |
| 799 // FIXME: We should transition if an !important property changes even wh
en an animation is running, | 806 // FIXME: We should transition if an !important property changes even |
| 800 // but this is a bit hard to do with the current applyMatchedProperties
system. | 807 // when an animation is running, but this is a bit hard to do with the |
| 808 // current applyMatchedProperties system. |
| 801 PropertyHandle property = PropertyHandle(id); | 809 PropertyHandle property = PropertyHandle(id); |
| 802 if (!update.activeInterpolationsForAnimations().contains(property) && | 810 if (!update.activeInterpolationsForAnimations().contains(property) && |
| 803 (!elementAnimations || | 811 (!elementAnimations || |
| 804 !elementAnimations->cssAnimations() | 812 !elementAnimations->cssAnimations() |
| 805 .m_previousActiveInterpolationsForAnimations.contains( | 813 .m_previousActiveInterpolationsForAnimations.contains( |
| 806 property))) { | 814 property))) { |
| 807 calculateTransitionUpdateForProperty(id, *transitionData, i, oldStyle, | 815 calculateTransitionUpdateForProperty(id, *transitionData, i, oldStyle, |
| 808 style, activeTransitions, update, | 816 style, activeTransitions, update, |
| 809 animatingElement); | 817 animatingElement); |
| 810 } | 818 } |
| 811 } | 819 } |
| 812 } | 820 } |
| 813 } | 821 } |
| 814 | 822 |
| 815 if (activeTransitions) { | 823 if (activeTransitions) { |
| 816 for (const auto& entry : *activeTransitions) { | 824 for (const auto& entry : *activeTransitions) { |
| 817 CSSPropertyID id = entry.key; | 825 CSSPropertyID id = entry.key; |
| 818 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && | 826 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && |
| 819 !listedProperties.test(id - firstCSSProperty)) { | 827 !listedProperties.test(id - firstCSSProperty)) { |
| 820 // TODO: Figure out why this fails on Chrome OS login page. crbug.com/36
5507 | 828 // TODO(crbug.com/365507): Figure out why this fails on Chrome OS login |
| 821 // DCHECK(animation.playStateInternal() == Animation::Finished || !(elem
entAnimations && elementAnimations->isAnimationStyleChange())); | 829 // page. |
| 830 // DCHECK(animation.playStateInternal() == Animation::Finished || |
| 831 // !(elementAnimations && |
| 832 // elementAnimations->isAnimationStyleChange())); |
| 822 update.cancelTransition(id); | 833 update.cancelTransition(id); |
| 823 } else if (entry.value.animation->finishedInternal()) { | 834 } else if (entry.value.animation->finishedInternal()) { |
| 824 update.finishTransition(id); | 835 update.finishTransition(id); |
| 825 } | 836 } |
| 826 } | 837 } |
| 827 } | 838 } |
| 828 } | 839 } |
| 829 | 840 |
| 830 void CSSAnimations::cancel() { | 841 void CSSAnimations::cancel() { |
| 831 for (const auto& runningAnimation : m_runningAnimations) { | 842 for (const auto& runningAnimation : m_runningAnimations) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 KeyframeEffect::DefaultPriority, | 874 KeyframeEffect::DefaultPriority, |
| 864 isStylePropertyHandle)); | 875 isStylePropertyHandle)); |
| 865 update.adoptActiveInterpolationsForAnimations( | 876 update.adoptActiveInterpolationsForAnimations( |
| 866 activeInterpolationsForAnimations); | 877 activeInterpolationsForAnimations); |
| 867 return; | 878 return; |
| 868 } | 879 } |
| 869 | 880 |
| 870 HeapVector<Member<const InertEffect>> newEffects; | 881 HeapVector<Member<const InertEffect>> newEffects; |
| 871 for (const auto& newAnimation : update.newAnimations()) | 882 for (const auto& newAnimation : update.newAnimations()) |
| 872 newEffects.append(newAnimation.effect); | 883 newEffects.append(newAnimation.effect); |
| 884 |
| 885 // Animations with updates use a temporary InertEffect for the current frame. |
| 873 for (const auto& updatedAnimation : update.animationsWithUpdates()) | 886 for (const auto& updatedAnimation : update.animationsWithUpdates()) |
| 874 newEffects.append( | 887 newEffects.append(updatedAnimation.effect); |
| 875 updatedAnimation | |
| 876 .effect); // Animations with updates use a temporary InertEffect fo
r the current frame. | |
| 877 | 888 |
| 878 ActiveInterpolationsMap activeInterpolationsForAnimations( | 889 ActiveInterpolationsMap activeInterpolationsForAnimations( |
| 879 AnimationStack::activeInterpolations( | 890 AnimationStack::activeInterpolations( |
| 880 animationStack, &newEffects, &update.suppressedAnimations(), | 891 animationStack, &newEffects, &update.suppressedAnimations(), |
| 881 KeyframeEffect::DefaultPriority, isStylePropertyHandle)); | 892 KeyframeEffect::DefaultPriority, isStylePropertyHandle)); |
| 882 update.adoptActiveInterpolationsForAnimations( | 893 update.adoptActiveInterpolationsForAnimations( |
| 883 activeInterpolationsForAnimations); | 894 activeInterpolationsForAnimations); |
| 884 } | 895 } |
| 885 | 896 |
| 886 void CSSAnimations::calculateTransitionActiveInterpolations( | 897 void CSSAnimations::calculateTransitionActiveInterpolations( |
| (...skipping 24 matching lines...) Expand all Loading... |
| 911 DCHECK(transitionMap.contains(id)); | 922 DCHECK(transitionMap.contains(id)); |
| 912 cancelledAnimations.add(transitionMap.get(id).animation.get()); | 923 cancelledAnimations.add(transitionMap.get(id).animation.get()); |
| 913 } | 924 } |
| 914 } | 925 } |
| 915 | 926 |
| 916 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( | 927 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( |
| 917 animationStack, &newTransitions, &cancelledAnimations, | 928 animationStack, &newTransitions, &cancelledAnimations, |
| 918 KeyframeEffect::TransitionPriority, isStylePropertyHandle); | 929 KeyframeEffect::TransitionPriority, isStylePropertyHandle); |
| 919 } | 930 } |
| 920 | 931 |
| 921 // Properties being animated by animations don't get values from transitions a
pplied. | 932 // Properties being animated by animations don't get values from transitions |
| 933 // applied. |
| 922 if (!update.activeInterpolationsForAnimations().isEmpty() && | 934 if (!update.activeInterpolationsForAnimations().isEmpty() && |
| 923 !activeInterpolationsForTransitions.isEmpty()) { | 935 !activeInterpolationsForTransitions.isEmpty()) { |
| 924 for (const auto& entry : update.activeInterpolationsForAnimations()) | 936 for (const auto& entry : update.activeInterpolationsForAnimations()) |
| 925 activeInterpolationsForTransitions.remove(entry.key); | 937 activeInterpolationsForTransitions.remove(entry.key); |
| 926 } | 938 } |
| 927 update.adoptActiveInterpolationsForTransitions( | 939 update.adoptActiveInterpolationsForTransitions( |
| 928 activeInterpolationsForTransitions); | 940 activeInterpolationsForTransitions); |
| 929 } | 941 } |
| 930 | 942 |
| 931 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { | 943 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 visitor->trace(m_transitionTarget); | 1035 visitor->trace(m_transitionTarget); |
| 1024 AnimationEffectReadOnly::EventDelegate::trace(visitor); | 1036 AnimationEffectReadOnly::EventDelegate::trace(visitor); |
| 1025 } | 1037 } |
| 1026 | 1038 |
| 1027 const StylePropertyShorthand& CSSAnimations::propertiesForTransitionAll() { | 1039 const StylePropertyShorthand& CSSAnimations::propertiesForTransitionAll() { |
| 1028 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); | 1040 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); |
| 1029 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ()); | 1041 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ()); |
| 1030 if (properties.isEmpty()) { | 1042 if (properties.isEmpty()) { |
| 1031 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) { | 1043 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) { |
| 1032 CSSPropertyID id = convertToCSSPropertyID(i); | 1044 CSSPropertyID id = convertToCSSPropertyID(i); |
| 1033 // Avoid creating overlapping transitions with perspective-origin and tran
sition-origin. | 1045 // Avoid creating overlapping transitions with perspective-origin and |
| 1046 // transition-origin. |
| 1034 if (id == CSSPropertyWebkitPerspectiveOriginX || | 1047 if (id == CSSPropertyWebkitPerspectiveOriginX || |
| 1035 id == CSSPropertyWebkitPerspectiveOriginY || | 1048 id == CSSPropertyWebkitPerspectiveOriginY || |
| 1036 id == CSSPropertyWebkitTransformOriginX || | 1049 id == CSSPropertyWebkitTransformOriginX || |
| 1037 id == CSSPropertyWebkitTransformOriginY || | 1050 id == CSSPropertyWebkitTransformOriginY || |
| 1038 id == CSSPropertyWebkitTransformOriginZ) | 1051 id == CSSPropertyWebkitTransformOriginZ) |
| 1039 continue; | 1052 continue; |
| 1040 if (CSSPropertyMetadata::isInterpolableProperty(id)) | 1053 if (CSSPropertyMetadata::isInterpolableProperty(id)) |
| 1041 properties.append(id); | 1054 properties.append(id); |
| 1042 } | 1055 } |
| 1043 propertyShorthand = StylePropertyShorthand( | 1056 propertyShorthand = StylePropertyShorthand( |
| 1044 CSSPropertyInvalid, properties.begin(), properties.size()); | 1057 CSSPropertyInvalid, properties.begin(), properties.size()); |
| 1045 } | 1058 } |
| 1046 return propertyShorthand; | 1059 return propertyShorthand; |
| 1047 } | 1060 } |
| 1048 | 1061 |
| 1049 // Properties that affect animations are not allowed to be affected by animation
s. | 1062 // Properties that affect animations are not allowed to be affected by |
| 1050 // http://w3c.github.io/web-animations/#not-animatable-section | 1063 // animations. http://w3c.github.io/web-animations/#not-animatable-section |
| 1051 bool CSSAnimations::isAnimatableProperty(CSSPropertyID property) { | 1064 bool CSSAnimations::isAnimatableProperty(CSSPropertyID property) { |
| 1052 switch (property) { | 1065 switch (property) { |
| 1053 case CSSPropertyAnimation: | 1066 case CSSPropertyAnimation: |
| 1054 case CSSPropertyAnimationDelay: | 1067 case CSSPropertyAnimationDelay: |
| 1055 case CSSPropertyAnimationDirection: | 1068 case CSSPropertyAnimationDirection: |
| 1056 case CSSPropertyAnimationDuration: | 1069 case CSSPropertyAnimationDuration: |
| 1057 case CSSPropertyAnimationFillMode: | 1070 case CSSPropertyAnimationFillMode: |
| 1058 case CSSPropertyAnimationIterationCount: | 1071 case CSSPropertyAnimationIterationCount: |
| 1059 case CSSPropertyAnimationName: | 1072 case CSSPropertyAnimationName: |
| 1060 case CSSPropertyAnimationPlayState: | 1073 case CSSPropertyAnimationPlayState: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1084 return toShadowRoot(treeScope.rootNode()).host() == element; | 1097 return toShadowRoot(treeScope.rootNode()).host() == element; |
| 1085 } | 1098 } |
| 1086 | 1099 |
| 1087 DEFINE_TRACE(CSSAnimations) { | 1100 DEFINE_TRACE(CSSAnimations) { |
| 1088 visitor->trace(m_transitions); | 1101 visitor->trace(m_transitions); |
| 1089 visitor->trace(m_pendingUpdate); | 1102 visitor->trace(m_pendingUpdate); |
| 1090 visitor->trace(m_runningAnimations); | 1103 visitor->trace(m_runningAnimations); |
| 1091 } | 1104 } |
| 1092 | 1105 |
| 1093 } // namespace blink | 1106 } // namespace blink |
| OLD | NEW |