| 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 115 |
| 116 // Values-animation accumulates using the last values entry corresponding to
the end of duration time. | 116 // Values-animation accumulates using the last values entry corresponding to
the end of duration time. |
| 117 SVGPropertyBase* toAtEndOfDurationProperty = m_toAtEndOfDurationProperty ? m
_toAtEndOfDurationProperty.get() : m_toProperty.get(); | 117 SVGPropertyBase* toAtEndOfDurationProperty = m_toAtEndOfDurationProperty ? m
_toAtEndOfDurationProperty.get() : m_toProperty.get(); |
| 118 m_animator.calculateAnimatedValue(percentage, repeatCount, m_fromProperty.ge
t(), m_toProperty.get(), toAtEndOfDurationProperty, resultAnimationElement->m_an
imatedProperty.get()); | 118 m_animator.calculateAnimatedValue(percentage, repeatCount, m_fromProperty.ge
t(), m_toProperty.get(), toAtEndOfDurationProperty, resultAnimationElement->m_an
imatedProperty.get()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 bool SVGAnimateElement::calculateToAtEndOfDurationValue(const String& toAtEndOfD
urationString) | 121 bool SVGAnimateElement::calculateToAtEndOfDurationValue(const String& toAtEndOfD
urationString) |
| 122 { | 122 { |
| 123 if (toAtEndOfDurationString.isEmpty()) | 123 if (toAtEndOfDurationString.isEmpty()) |
| 124 return false; | 124 return false; |
| 125 m_toAtEndOfDurationProperty = m_animator.constructFromString(toAtEndOfDurati
onString); | 125 m_toAtEndOfDurationProperty = m_animator.createAnimatedValueFromString(toAtE
ndOfDurationString); |
| 126 return true; | 126 return true; |
| 127 } | 127 } |
| 128 | 128 |
| 129 bool SVGAnimateElement::calculateFromAndToValues(const String& fromString, const
String& toString) | 129 bool SVGAnimateElement::calculateFromAndToValues(const String& fromString, const
String& toString) |
| 130 { | 130 { |
| 131 SVGElement* targetElement = this->targetElement(); | 131 SVGElement* targetElement = this->targetElement(); |
| 132 if (!targetElement) | 132 if (!targetElement) |
| 133 return false; | 133 return false; |
| 134 | 134 |
| 135 determinePropertyValueTypes(fromString, toString); | 135 determinePropertyValueTypes(fromString, toString); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 if (shouldApply == DontApplyAnimation) | 181 if (shouldApply == DontApplyAnimation) |
| 182 return; | 182 return; |
| 183 if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimati
on) { | 183 if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimati
on) { |
| 184 // SVG DOM animVal animation code-path. | 184 // SVG DOM animVal animation code-path. |
| 185 SVGElementInstances animatedElements = findElementInstances(targetElemen
t); | 185 SVGElementInstances animatedElements = findElementInstances(targetElemen
t); |
| 186 ASSERT(!animatedElements.isEmpty()); | 186 ASSERT(!animatedElements.isEmpty()); |
| 187 | 187 |
| 188 for (SVGElement* element : animatedElements) | 188 for (SVGElement* element : animatedElements) |
| 189 addReferenceTo(element); | 189 addReferenceTo(element); |
| 190 | 190 |
| 191 if (!m_animatedProperty) | 191 m_animatedProperty = m_animator.createAnimatedValue(); |
| 192 m_animatedProperty = m_animator.startAnimValAnimation(); | 192 targetElement->setAnimatedAttribute(attributeName, m_animatedProperty); |
| 193 else | |
| 194 m_animatedProperty = m_animator.resetAnimValToBaseVal(); | |
| 195 | |
| 196 return; | 193 return; |
| 197 } | 194 } |
| 198 DCHECK_EQ(shouldApply, ApplyCSSAnimation); | 195 DCHECK_EQ(shouldApply, ApplyCSSAnimation); |
| 199 | 196 |
| 200 // CSS properties animation code-path. | 197 // CSS properties animation code-path. |
| 201 String baseValue; | 198 String baseValue; |
| 202 DCHECK(isTargetAttributeCSSProperty(targetElement, attributeName)); | 199 DCHECK(isTargetAttributeCSSProperty(targetElement, attributeName)); |
| 203 computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName
()), baseValue); | 200 computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName
()), baseValue); |
| 204 | 201 |
| 205 m_animatedProperty = m_animator.constructFromString(baseValue); | 202 m_animatedProperty = m_animator.createAnimatedValueFromString(baseValue); |
| 206 } | 203 } |
| 207 | 204 |
| 208 void SVGAnimateElement::clearAnimatedType() | 205 void SVGAnimateElement::clearAnimatedType() |
| 209 { | 206 { |
| 210 if (!m_animatedProperty) | 207 if (!m_animatedProperty) |
| 211 return; | 208 return; |
| 212 | 209 |
| 213 // The animated property lock is held for the "result animation" (see SMILTi
meContainer::updateAnimations()) | 210 // The animated property lock is held for the "result animation" (see SMILTi
meContainer::updateAnimations()) |
| 214 // while we're processing an animation group. We will very likely crash late
r if we clear the animated type | 211 // while we're processing an animation group. We will very likely crash late
r if we clear the animated type |
| 215 // while the lock is held. See crbug.com/581546. | 212 // while the lock is held. See crbug.com/581546. |
| 216 DCHECK(!animatedTypeIsLocked()); | 213 DCHECK(!animatedTypeIsLocked()); |
| 217 | 214 |
| 218 SVGElement* targetElement = this->targetElement(); | 215 SVGElement* targetElement = this->targetElement(); |
| 219 if (!targetElement) { | 216 if (!targetElement) { |
| 220 m_animatedProperty.clear(); | 217 m_animatedProperty.clear(); |
| 221 return; | 218 return; |
| 222 } | 219 } |
| 223 | 220 |
| 224 ShouldApplyAnimationType shouldApply = shouldApplyAnimation(targetElement, a
ttributeName()); | 221 ShouldApplyAnimationType shouldApply = shouldApplyAnimation(targetElement, a
ttributeName()); |
| 225 if (shouldApply == ApplyXMLandCSSAnimation || m_animator.isAnimatingCSSPrope
rty()) { | 222 if (shouldApply == ApplyXMLandCSSAnimation || m_animator.isAnimatingCSSPrope
rty()) { |
| 226 // CSS properties animation code-path. | 223 // CSS properties animation code-path. |
| 227 if (shouldApply != DontApplyAnimation) { | 224 if (shouldApply != DontApplyAnimation) { |
| 228 CSSPropertyID id = cssPropertyID(attributeName().localName()); | 225 CSSPropertyID id = cssPropertyID(attributeName().localName()); |
| 229 targetElement->ensureAnimatedSMILStyleProperties()->removeProperty(i
d); | 226 targetElement->ensureAnimatedSMILStyleProperties()->removeProperty(i
d); |
| 230 targetElement->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReas
onForTracing::create(StyleChangeReason::Animation)); | 227 targetElement->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReas
onForTracing::create(StyleChangeReason::Animation)); |
| 231 } | 228 } |
| 232 } | 229 } |
| 233 if (shouldApply == ApplyXMLandCSSAnimation || m_animator.isAnimatingSVGDom()
) { | 230 if (shouldApply == ApplyXMLandCSSAnimation || m_animator.isAnimatingSVGDom()
) { |
| 234 // SVG DOM animVal animation code-path. | 231 // SVG DOM animVal animation code-path. |
| 235 m_animator.stopAnimValAnimation(); | 232 targetElement->clearAnimatedAttribute(attributeName()); |
| 236 if (shouldApply != DontApplyAnimation) | 233 if (shouldApply != DontApplyAnimation) |
| 237 targetElement->invalidateAnimatedAttribute(attributeName()); | 234 targetElement->invalidateAnimatedAttribute(attributeName()); |
| 238 } | 235 } |
| 239 | 236 |
| 240 m_animatedProperty.clear(); | 237 m_animatedProperty.clear(); |
| 241 m_animator.clear(); | 238 m_animator.clear(); |
| 242 } | 239 } |
| 243 | 240 |
| 244 void SVGAnimateElement::applyResultsToTarget() | 241 void SVGAnimateElement::applyResultsToTarget() |
| 245 { | 242 { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 { | 327 { |
| 331 visitor->trace(m_fromProperty); | 328 visitor->trace(m_fromProperty); |
| 332 visitor->trace(m_toProperty); | 329 visitor->trace(m_toProperty); |
| 333 visitor->trace(m_toAtEndOfDurationProperty); | 330 visitor->trace(m_toAtEndOfDurationProperty); |
| 334 visitor->trace(m_animatedProperty); | 331 visitor->trace(m_animatedProperty); |
| 335 visitor->trace(m_animator); | 332 visitor->trace(m_animator); |
| 336 SVGAnimationElement::trace(visitor); | 333 SVGAnimationElement::trace(visitor); |
| 337 } | 334 } |
| 338 | 335 |
| 339 } // namespace blink | 336 } // namespace blink |
| OLD | NEW |