void SVGAnimateElement::resetToBaseValue(const String& baseString) { // If animatedProperty is not null, we're dealing with a SVG DOM primitive animation. // In that case we don't need any base value strings, but can directly operate on these // SVG DOM primitives, like SVGLength. SVGAnimatedTypeAnimator* animator = ensureAnimator(); ASSERT(m_animatedPropertyType == animator->type()); SVGElement* targetElement = this->targetElement(); const QualifiedName& attributeName = this->attributeName(); ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName); if (shouldApply == ApplyXMLAnimation) m_animatedProperties = animator->findAnimatedPropertiesForAttributeName(targetElement, attributeName); else ASSERT(m_animatedProperties.isEmpty()); if (m_animatedProperties.isEmpty()) { // Legacy fallback code path, uses the passed-in baseString, which is cached. if (!m_animatedType) m_animatedType = animator->constructFromString(baseString); else m_animatedType->setValueAsString(attributeName, baseString); return; } ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties)); if (!m_animatedType) m_animatedType = animator->startAnimValAnimation(m_animatedProperties); else animator->resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get()); }
void SVGAnimateElement::resetToBaseValue() { SVGAnimatedTypeAnimator* animator = ensureAnimator(); ASSERT(m_animatedPropertyType == animator->type()); SVGElement* targetElement = this->targetElement(); const QualifiedName& attributeName = this->attributeName(); ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName); if (shouldApply == ApplyXMLAnimation) { // SVG DOM animVal animation code-path. m_animatedProperties = animator->findAnimatedPropertiesForAttributeName(targetElement, attributeName); ASSERT(!m_animatedProperties.isEmpty()); ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties)); if (!m_animatedType) m_animatedType = animator->startAnimValAnimation(m_animatedProperties); else animator->resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get()); return; } // CSS properties animation code-path. ASSERT(m_animatedProperties.isEmpty()); String baseValue; if (shouldApply == ApplyCSSAnimation) { ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName)); computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue); } if (!m_animatedType) m_animatedType = animator->constructFromString(baseValue); else m_animatedType->setValueAsString(attributeName, baseValue); }
void SVGAnimateElement::resetAnimatedType() { SVGAnimatedTypeAnimator* animator = ensureAnimator(); ASSERT(m_animatedPropertyType == animator->type()); SVGElement* targetElement = this->targetElement(); const QualifiedName& attributeName = this->attributeName(); ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName); if (shouldApply == DontApplyAnimation) return; if (shouldApply == ApplyXMLAnimation) { // SVG DOM animVal animation code-path. m_animatedProperties = animator->findAnimatedPropertiesForAttributeName(targetElement, attributeName); SVGElementAnimatedPropertyList::const_iterator end = m_animatedProperties.end(); for (SVGElementAnimatedPropertyList::const_iterator it = m_animatedProperties.begin(); it != end; ++it) document().accessSVGExtensions()->addElementReferencingTarget(this, it->element); ASSERT(!m_animatedProperties.isEmpty()); ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties)); if (!m_animatedType) m_animatedType = animator->startAnimValAnimation(m_animatedProperties); else { animator->resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get()); animator->animValDidChange(m_animatedProperties); } return; } // CSS properties animation code-path. ASSERT(m_animatedProperties.isEmpty()); String baseValue; if (shouldApply == ApplyCSSAnimation) { ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName)); computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue); } if (!m_animatedType) m_animatedType = animator->constructFromString(baseValue); else m_animatedType->setValueAsString(attributeName, baseValue); }