| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> |    2  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> | 
|    3  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> |    3  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> | 
|    4  * Copyright (C) 2008 Apple Inc. All rights reserved. |    4  * Copyright (C) 2008 Apple Inc. All rights reserved. | 
|    5  * Copyright (C) Research In Motion Limited 2011. All rights reserved. |    5  * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 
|    6  * |    6  * | 
|    7  * This library is free software; you can redistribute it and/or |    7  * This library is free software; you can redistribute it and/or | 
|    8  * modify it under the terms of the GNU Library General Public |    8  * modify it under the terms of the GNU Library General Public | 
|    9  * License as published by the Free Software Foundation; either |    9  * License as published by the Free Software Foundation; either | 
|   10  * version 2 of the License, or (at your option) any later version. |   10  * version 2 of the License, or (at your option) any later version. | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|   27 #include "core/css/StylePropertySet.h" |   27 #include "core/css/StylePropertySet.h" | 
|   28 #include "core/dom/Document.h" |   28 #include "core/dom/Document.h" | 
|   29 #include "core/dom/QualifiedName.h" |   29 #include "core/dom/QualifiedName.h" | 
|   30 #include "core/dom/StyleChangeReason.h" |   30 #include "core/dom/StyleChangeReason.h" | 
|   31 #include "core/svg/properties/SVGProperty.h" |   31 #include "core/svg/properties/SVGProperty.h" | 
|   32  |   32  | 
|   33 namespace blink { |   33 namespace blink { | 
|   34  |   34  | 
|   35 namespace { |   35 namespace { | 
|   36  |   36  | 
 |   37 bool isTargetAttributeCSSProperty(SVGElement& targetElement, | 
 |   38                                   const QualifiedName& attributeName) { | 
 |   39   return SVGElement::isAnimatableCSSProperty(attributeName) || | 
 |   40          targetElement.isPresentationAttribute(attributeName); | 
 |   41 } | 
 |   42  | 
|   37 String computeCSSPropertyValue(SVGElement* element, CSSPropertyID id) { |   43 String computeCSSPropertyValue(SVGElement* element, CSSPropertyID id) { | 
|   38   DCHECK(element); |   44   DCHECK(element); | 
|   39   // TODO(fs): StyleEngine doesn't support document without a frame. |   45   // TODO(fs): StyleEngine doesn't support document without a frame. | 
|   40   // Refer to comment in Element::computedStyle. |   46   // Refer to comment in Element::computedStyle. | 
|   41   DCHECK(element->inActiveDocument()); |   47   DCHECK(element->inActiveDocument()); | 
|   42  |   48  | 
|   43   // Don't include any properties resulting from CSS Transitions/Animations or |   49   // Don't include any properties resulting from CSS Transitions/Animations or | 
|   44   // SMIL animations, as we want to retrieve the "base value". |   50   // SMIL animations, as we want to retrieve the "base value". | 
|   45   element->setUseOverrideComputedStyle(true); |   51   element->setUseOverrideComputedStyle(true); | 
|   46   String value = |   52   String value = | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  135 SVGAnimateElement::ShouldApplyAnimationType |  141 SVGAnimateElement::ShouldApplyAnimationType | 
|  136 SVGAnimateElement::shouldApplyAnimation(SVGElement* targetElement, |  142 SVGAnimateElement::shouldApplyAnimation(SVGElement* targetElement, | 
|  137                                         const QualifiedName& attributeName) { |  143                                         const QualifiedName& attributeName) { | 
|  138   if (!hasValidAttributeType() || attributeName == anyQName() || |  144   if (!hasValidAttributeType() || attributeName == anyQName() || | 
|  139       !targetElement || !targetElement->inActiveDocument() || |  145       !targetElement || !targetElement->inActiveDocument() || | 
|  140       !targetElement->parentNode()) |  146       !targetElement->parentNode()) | 
|  141     return DontApplyAnimation; |  147     return DontApplyAnimation; | 
|  142  |  148  | 
|  143   // Always animate CSS properties using the ApplyCSSAnimation code path, |  149   // Always animate CSS properties using the ApplyCSSAnimation code path, | 
|  144   // regardless of the attributeType value. |  150   // regardless of the attributeType value. | 
|  145   if (isTargetAttributeCSSProperty(targetElement, attributeName)) { |  151   if (isTargetAttributeCSSProperty(*targetElement, attributeName)) { | 
|  146     if (targetElement->isPresentationAttributeWithSVGDOM(attributeName)) |  152     if (targetElement->isPresentationAttributeWithSVGDOM(attributeName)) | 
|  147       return ApplyXMLandCSSAnimation; |  153       return ApplyXMLandCSSAnimation; | 
|  148  |  154  | 
|  149     return ApplyCSSAnimation; |  155     return ApplyCSSAnimation; | 
|  150   } |  156   } | 
|  151   // If attributeType="CSS" and attributeName doesn't point to a CSS property, |  157   // If attributeType="CSS" and attributeName doesn't point to a CSS property, | 
|  152   // ignore the animation. |  158   // ignore the animation. | 
|  153   if (getAttributeType() == AttributeTypeCSS) |  159   if (getAttributeType() == AttributeTypeCSS) | 
|  154     return DontApplyAnimation; |  160     return DontApplyAnimation; | 
|  155  |  161  | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  280   if (shouldApply == ApplyXMLAnimation || |  286   if (shouldApply == ApplyXMLAnimation || | 
|  281       shouldApply == ApplyXMLandCSSAnimation) { |  287       shouldApply == ApplyXMLandCSSAnimation) { | 
|  282     // SVG DOM animVal animation code-path. |  288     // SVG DOM animVal animation code-path. | 
|  283     m_animatedProperty = m_animator.createAnimatedValue(); |  289     m_animatedProperty = m_animator.createAnimatedValue(); | 
|  284     targetElement->setAnimatedAttribute(attributeName, m_animatedProperty); |  290     targetElement->setAnimatedAttribute(attributeName, m_animatedProperty); | 
|  285     return; |  291     return; | 
|  286   } |  292   } | 
|  287   DCHECK_EQ(shouldApply, ApplyCSSAnimation); |  293   DCHECK_EQ(shouldApply, ApplyCSSAnimation); | 
|  288  |  294  | 
|  289   // CSS properties animation code-path. |  295   // CSS properties animation code-path. | 
|  290   DCHECK(isTargetAttributeCSSProperty(targetElement, attributeName)); |  296   DCHECK(isTargetAttributeCSSProperty(*targetElement, attributeName)); | 
|  291   String baseValue = computeCSSPropertyValue( |  297   String baseValue = computeCSSPropertyValue( | 
|  292       targetElement, cssPropertyID(attributeName.localName())); |  298       targetElement, cssPropertyID(attributeName.localName())); | 
|  293   m_animatedProperty = m_animator.createPropertyForAnimation(baseValue); |  299   m_animatedProperty = m_animator.createPropertyForAnimation(baseValue); | 
|  294 } |  300 } | 
|  295  |  301  | 
|  296 void SVGAnimateElement::clearAnimatedType() { |  302 void SVGAnimateElement::clearAnimatedType() { | 
|  297   if (!m_animatedProperty) |  303   if (!m_animatedProperty) | 
|  298     return; |  304     return; | 
|  299  |  305  | 
|  300   // The animated property lock is held for the "result animation" (see |  306   // The animated property lock is held for the "result animation" (see | 
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  427     m_attributeType = AttributeTypeXML; |  433     m_attributeType = AttributeTypeXML; | 
|  428   else |  434   else | 
|  429     m_attributeType = AttributeTypeAuto; |  435     m_attributeType = AttributeTypeAuto; | 
|  430   checkInvalidCSSAttributeType(); |  436   checkInvalidCSSAttributeType(); | 
|  431 } |  437 } | 
|  432  |  438  | 
|  433 void SVGAnimateElement::checkInvalidCSSAttributeType() { |  439 void SVGAnimateElement::checkInvalidCSSAttributeType() { | 
|  434   bool hasInvalidCSSAttributeType = |  440   bool hasInvalidCSSAttributeType = | 
|  435       targetElement() && hasValidAttributeName() && |  441       targetElement() && hasValidAttributeName() && | 
|  436       getAttributeType() == AttributeTypeCSS && |  442       getAttributeType() == AttributeTypeCSS && | 
|  437       !isTargetAttributeCSSProperty(targetElement(), attributeName()); |  443       !isTargetAttributeCSSProperty(*targetElement(), attributeName()); | 
|  438  |  444  | 
|  439   if (hasInvalidCSSAttributeType != m_hasInvalidCSSAttributeType) { |  445   if (hasInvalidCSSAttributeType != m_hasInvalidCSSAttributeType) { | 
|  440     if (hasInvalidCSSAttributeType) |  446     if (hasInvalidCSSAttributeType) | 
|  441       unscheduleIfScheduled(); |  447       unscheduleIfScheduled(); | 
|  442  |  448  | 
|  443     m_hasInvalidCSSAttributeType = hasInvalidCSSAttributeType; |  449     m_hasInvalidCSSAttributeType = hasInvalidCSSAttributeType; | 
|  444  |  450  | 
|  445     if (!hasInvalidCSSAttributeType) |  451     if (!hasInvalidCSSAttributeType) | 
|  446       schedule(); |  452       schedule(); | 
|  447   } |  453   } | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  462 DEFINE_TRACE(SVGAnimateElement) { |  468 DEFINE_TRACE(SVGAnimateElement) { | 
|  463   visitor->trace(m_fromProperty); |  469   visitor->trace(m_fromProperty); | 
|  464   visitor->trace(m_toProperty); |  470   visitor->trace(m_toProperty); | 
|  465   visitor->trace(m_toAtEndOfDurationProperty); |  471   visitor->trace(m_toAtEndOfDurationProperty); | 
|  466   visitor->trace(m_animatedProperty); |  472   visitor->trace(m_animatedProperty); | 
|  467   visitor->trace(m_animator); |  473   visitor->trace(m_animator); | 
|  468   SVGAnimationElement::trace(visitor); |  474   SVGAnimationElement::trace(visitor); | 
|  469 } |  475 } | 
|  470  |  476  | 
|  471 }  // namespace blink |  477 }  // namespace blink | 
| OLD | NEW |