Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(759)

Side by Side Diff: Source/core/animation/css/CSSAnimations.cpp

Issue 454423003: Add animatable flag to CSSProperties.in (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/core.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 22 matching lines...) Expand all
33 33
34 #include "core/StylePropertyShorthand.h" 34 #include "core/StylePropertyShorthand.h"
35 #include "core/animation/ActiveAnimations.h" 35 #include "core/animation/ActiveAnimations.h"
36 #include "core/animation/AnimationTimeline.h" 36 #include "core/animation/AnimationTimeline.h"
37 #include "core/animation/CompositorAnimations.h" 37 #include "core/animation/CompositorAnimations.h"
38 #include "core/animation/KeyframeEffectModel.h" 38 #include "core/animation/KeyframeEffectModel.h"
39 #include "core/animation/LegacyStyleInterpolation.h" 39 #include "core/animation/LegacyStyleInterpolation.h"
40 #include "core/animation/css/CSSAnimatableValueFactory.h" 40 #include "core/animation/css/CSSAnimatableValueFactory.h"
41 #include "core/animation/css/CSSPropertyEquality.h" 41 #include "core/animation/css/CSSPropertyEquality.h"
42 #include "core/css/CSSKeyframeRule.h" 42 #include "core/css/CSSKeyframeRule.h"
43 #include "core/css/CSSPropertyMetadata.h"
43 #include "core/css/resolver/CSSToStyleMap.h" 44 #include "core/css/resolver/CSSToStyleMap.h"
44 #include "core/css/resolver/StyleResolver.h" 45 #include "core/css/resolver/StyleResolver.h"
45 #include "core/dom/Element.h" 46 #include "core/dom/Element.h"
46 #include "core/dom/PseudoElement.h" 47 #include "core/dom/PseudoElement.h"
47 #include "core/dom/StyleEngine.h" 48 #include "core/dom/StyleEngine.h"
48 #include "core/events/TransitionEvent.h" 49 #include "core/events/TransitionEvent.h"
49 #include "core/events/WebKitAnimationEvent.h" 50 #include "core/events/WebKitAnimationEvent.h"
50 #include "core/frame/UseCounter.h" 51 #include "core/frame/UseCounter.h"
51 #include "core/rendering/RenderLayer.h" 52 #include "core/rendering/RenderLayer.h"
52 #include "core/rendering/RenderObject.h" 53 #include "core/rendering/RenderObject.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 if (property == CSSPropertyWebkitAnimationTimingFunction || property == CSSPropertyAnimationTimingFunction) { 112 if (property == CSSPropertyWebkitAnimationTimingFunction || property == CSSPropertyAnimationTimingFunction) {
112 CSSValue* value = properties.propertyAt(j).value(); 113 CSSValue* value = properties.propertyAt(j).value();
113 RefPtr<TimingFunction> timingFunction; 114 RefPtr<TimingFunction> timingFunction;
114 if (value->isInheritedValue() && parentStyle->animations()) 115 if (value->isInheritedValue() && parentStyle->animations())
115 timingFunction = parentStyle->animations()->timingFunctionLi st()[0]; 116 timingFunction = parentStyle->animations()->timingFunctionLi st()[0];
116 else if (value->isInheritedValue() || value->isInitialValue()) 117 else if (value->isInheritedValue() || value->isInitialValue())
117 timingFunction = CSSTimingData::initialTimingFunction(); 118 timingFunction = CSSTimingData::initialTimingFunction();
118 else 119 else
119 timingFunction = CSSToStyleMap::mapAnimationTimingFunction(t oCSSValueList(value)->item(0)); 120 timingFunction = CSSToStyleMap::mapAnimationTimingFunction(t oCSSValueList(value)->item(0));
120 keyframe->setEasing(timingFunction.release()); 121 keyframe->setEasing(timingFunction.release());
121 } else if (CSSAnimations::isAnimatableProperty(property)) { 122 } else if (CSSPropertyMetadata::isAnimatableProperty(property)) {
122 keyframe->setPropertyValue(property, CSSAnimatableValueFactory:: create(property, *keyframeStyle).get()); 123 keyframe->setPropertyValue(property, CSSAnimatableValueFactory:: create(property, *keyframeStyle).get());
123 } 124 }
124 } 125 }
125 keyframes.append(keyframe); 126 keyframes.append(keyframe);
126 // The last keyframe specified at a given offset is used. 127 // The last keyframe specified at a given offset is used.
127 for (size_t j = 1; j < offsets.size(); ++j) { 128 for (size_t j = 1; j < offsets.size(); ++j) {
128 keyframes.append(toAnimatableValueKeyframe(keyframe->cloneWithOffset (offsets[j]).get())); 129 keyframes.append(toAnimatableValueKeyframe(keyframe->cloneWithOffset (offsets[j]).get()));
129 } 130 }
130 } 131 }
131 ASSERT(!keyframes.isEmpty()); 132 ASSERT(!keyframes.isEmpty());
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 if (animateAll) 485 if (animateAll)
485 anyTransitionHadTransitionAll = true; 486 anyTransitionHadTransitionAll = true;
486 const StylePropertyShorthand& propertyList = animateAll ? CSSAnimati ons::animatableProperties() : shorthandForProperty(property); 487 const StylePropertyShorthand& propertyList = animateAll ? CSSAnimati ons::animatableProperties() : shorthandForProperty(property);
487 // If not a shorthand we only execute one iteration of this loop, an d refer to the property directly. 488 // If not a shorthand we only execute one iteration of this loop, an d refer to the property directly.
488 for (unsigned j = 0; !j || j < propertyList.length(); ++j) { 489 for (unsigned j = 0; !j || j < propertyList.length(); ++j) {
489 CSSPropertyID id = propertyList.length() ? propertyList.properti es()[j] : property; 490 CSSPropertyID id = propertyList.length() ? propertyList.properti es()[j] : property;
490 CSSPropertyID eventId = id; 491 CSSPropertyID eventId = id;
491 492
492 if (!animateAll) { 493 if (!animateAll) {
493 id = propertyForAnimation(id); 494 id = propertyForAnimation(id);
494 if (CSSAnimations::isAnimatableProperty(id)) 495 if (CSSPropertyMetadata::isAnimatableProperty(id))
495 listedProperties.set(id); 496 listedProperties.set(id);
496 else 497 else
497 continue; 498 continue;
498 } 499 }
499 500
500 // FIXME: We should transition if an !important property changes even when an animation is running, 501 // FIXME: We should transition if an !important property changes even when an animation is running,
501 // but this is a bit hard to do with the current applyMatchedPro perties system. 502 // but this is a bit hard to do with the current applyMatchedPro perties system.
502 if (!update->activeInterpolationsForAnimations().contains(id) 503 if (!update->activeInterpolationsForAnimations().contains(id)
503 && (!activeAnimations || !activeAnimations->cssAnimations(). m_previousActiveInterpolationsForAnimations.contains(id))) { 504 && (!activeAnimations || !activeAnimations->cssAnimations(). m_previousActiveInterpolationsForAnimations.contains(id))) {
504 calculateTransitionUpdateForProperty(id, eventId, *transitio nData, i, oldStyle, style, activeTransitions, update, element); 505 calculateTransitionUpdateForProperty(id, eventId, *transitio nData, i, oldStyle, style, activeTransitions, update, element);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 653
653 m_previousPhase = currentPhase; 654 m_previousPhase = currentPhase;
654 } 655 }
655 656
656 void CSSAnimations::TransitionEventDelegate::trace(Visitor* visitor) 657 void CSSAnimations::TransitionEventDelegate::trace(Visitor* visitor)
657 { 658 {
658 visitor->trace(m_target); 659 visitor->trace(m_target);
659 AnimationNode::EventDelegate::trace(visitor); 660 AnimationNode::EventDelegate::trace(visitor);
660 } 661 }
661 662
662 bool CSSAnimations::isAnimatableProperty(CSSPropertyID property)
663 {
664 switch (property) {
665 case CSSPropertyBackgroundColor:
666 case CSSPropertyBackgroundImage:
667 case CSSPropertyBackgroundPositionX:
668 case CSSPropertyBackgroundPositionY:
669 case CSSPropertyBackgroundSize:
670 case CSSPropertyBaselineShift:
671 case CSSPropertyBorderBottomColor:
672 case CSSPropertyBorderBottomLeftRadius:
673 case CSSPropertyBorderBottomRightRadius:
674 case CSSPropertyBorderBottomWidth:
675 case CSSPropertyBorderImageOutset:
676 case CSSPropertyBorderImageSlice:
677 case CSSPropertyBorderImageSource:
678 case CSSPropertyBorderImageWidth:
679 case CSSPropertyBorderLeftColor:
680 case CSSPropertyBorderLeftWidth:
681 case CSSPropertyBorderRightColor:
682 case CSSPropertyBorderRightWidth:
683 case CSSPropertyBorderTopColor:
684 case CSSPropertyBorderTopLeftRadius:
685 case CSSPropertyBorderTopRightRadius:
686 case CSSPropertyBorderTopWidth:
687 case CSSPropertyBottom:
688 case CSSPropertyBoxShadow:
689 case CSSPropertyClip:
690 case CSSPropertyColor:
691 case CSSPropertyFill:
692 case CSSPropertyFillOpacity:
693 case CSSPropertyFlexBasis:
694 case CSSPropertyFlexGrow:
695 case CSSPropertyFlexShrink:
696 case CSSPropertyFloodColor:
697 case CSSPropertyFloodOpacity:
698 case CSSPropertyFontSize:
699 case CSSPropertyFontWeight:
700 case CSSPropertyHeight:
701 case CSSPropertyLeft:
702 case CSSPropertyLetterSpacing:
703 case CSSPropertyLightingColor:
704 case CSSPropertyLineHeight:
705 case CSSPropertyListStyleImage:
706 case CSSPropertyMarginBottom:
707 case CSSPropertyMarginLeft:
708 case CSSPropertyMarginRight:
709 case CSSPropertyMarginTop:
710 case CSSPropertyMaxHeight:
711 case CSSPropertyMaxWidth:
712 case CSSPropertyMinHeight:
713 case CSSPropertyMinWidth:
714 case CSSPropertyObjectPosition:
715 case CSSPropertyOpacity:
716 case CSSPropertyOrphans:
717 case CSSPropertyOutlineColor:
718 case CSSPropertyOutlineOffset:
719 case CSSPropertyOutlineWidth:
720 case CSSPropertyPaddingBottom:
721 case CSSPropertyPaddingLeft:
722 case CSSPropertyPaddingRight:
723 case CSSPropertyPaddingTop:
724 case CSSPropertyRight:
725 case CSSPropertyStopColor:
726 case CSSPropertyStopOpacity:
727 case CSSPropertyStroke:
728 case CSSPropertyStrokeDasharray:
729 case CSSPropertyStrokeDashoffset:
730 case CSSPropertyStrokeMiterlimit:
731 case CSSPropertyStrokeOpacity:
732 case CSSPropertyStrokeWidth:
733 case CSSPropertyTextDecorationColor:
734 case CSSPropertyTextIndent:
735 case CSSPropertyTextShadow:
736 case CSSPropertyTop:
737 case CSSPropertyVerticalAlign:
738 case CSSPropertyVisibility:
739 case CSSPropertyWebkitBackgroundSize:
740 case CSSPropertyWebkitBorderHorizontalSpacing:
741 case CSSPropertyWebkitBorderVerticalSpacing:
742 case CSSPropertyWebkitBoxShadow:
743 case CSSPropertyWebkitClipPath:
744 case CSSPropertyWebkitColumnCount:
745 case CSSPropertyWebkitColumnGap:
746 case CSSPropertyWebkitColumnRuleColor:
747 case CSSPropertyWebkitColumnRuleWidth:
748 case CSSPropertyWebkitColumnWidth:
749 case CSSPropertyWebkitFilter:
750 case CSSPropertyWebkitMaskBoxImageOutset:
751 case CSSPropertyWebkitMaskBoxImageSlice:
752 case CSSPropertyWebkitMaskBoxImageSource:
753 case CSSPropertyWebkitMaskBoxImageWidth:
754 case CSSPropertyWebkitMaskImage:
755 case CSSPropertyWebkitMaskPositionX:
756 case CSSPropertyWebkitMaskPositionY:
757 case CSSPropertyWebkitMaskSize:
758 case CSSPropertyPerspective:
759 case CSSPropertyPerspectiveOrigin:
760 case CSSPropertyShapeOutside:
761 case CSSPropertyShapeMargin:
762 case CSSPropertyShapeImageThreshold:
763 case CSSPropertyWebkitTextStrokeColor:
764 case CSSPropertyTransform:
765 case CSSPropertyTransformOrigin:
766 case CSSPropertyWidows:
767 case CSSPropertyWidth:
768 case CSSPropertyWordSpacing:
769 case CSSPropertyZIndex:
770 case CSSPropertyZoom:
771 return true;
772 default:
773 return false;
774 }
775 }
776
777 const StylePropertyShorthand& CSSAnimations::animatableProperties() 663 const StylePropertyShorthand& CSSAnimations::animatableProperties()
778 { 664 {
779 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); 665 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ());
780 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ()); 666 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ());
781 if (properties.isEmpty()) { 667 if (properties.isEmpty()) {
782 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) { 668 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) {
783 CSSPropertyID id = convertToCSSPropertyID(i); 669 CSSPropertyID id = convertToCSSPropertyID(i);
784 if (isAnimatableProperty(id)) 670 if (CSSPropertyMetadata::isAnimatableProperty(id))
785 properties.append(id); 671 properties.append(id);
786 } 672 }
787 propertyShorthand = StylePropertyShorthand(CSSPropertyInvalid, propertie s.begin(), properties.size()); 673 propertyShorthand = StylePropertyShorthand(CSSPropertyInvalid, propertie s.begin(), properties.size());
788 } 674 }
789 return propertyShorthand; 675 return propertyShorthand;
790 } 676 }
791 677
792 // Animation properties are not allowed to be affected by Web Animations. 678 // Animation properties are not allowed to be affected by Web Animations.
793 // http://dev.w3.org/fxtf/web-animations/#not-animatable 679 // http://dev.w3.org/fxtf/web-animations/#not-animatable
794 bool CSSAnimations::isAllowedAnimation(CSSPropertyID property) 680 bool CSSAnimations::isAllowedAnimation(CSSPropertyID property)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 #if ENABLE(OILPAN) 730 #if ENABLE(OILPAN)
845 visitor->trace(m_newTransitions); 731 visitor->trace(m_newTransitions);
846 visitor->trace(m_activeInterpolationsForAnimations); 732 visitor->trace(m_activeInterpolationsForAnimations);
847 visitor->trace(m_activeInterpolationsForTransitions); 733 visitor->trace(m_activeInterpolationsForTransitions);
848 visitor->trace(m_newAnimations); 734 visitor->trace(m_newAnimations);
849 visitor->trace(m_cancelledAnimationPlayers); 735 visitor->trace(m_cancelledAnimationPlayers);
850 #endif 736 #endif
851 } 737 }
852 738
853 } // namespace blink 739 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/core.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698