| 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 | 170 |
| 171 SVGElement* targetElement = this->targetElement(); | 171 SVGElement* targetElement = this->targetElement(); |
| 172 const QualifiedName& attributeName = this->attributeName(); | 172 const QualifiedName& attributeName = this->attributeName(); |
| 173 ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attri
buteName); | 173 ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attri
buteName); |
| 174 | 174 |
| 175 if (shouldApply == DontApplyAnimation) | 175 if (shouldApply == DontApplyAnimation) |
| 176 return; | 176 return; |
| 177 | 177 |
| 178 if (shouldApply == ApplyXMLAnimation) { | 178 if (shouldApply == ApplyXMLAnimation) { |
| 179 // SVG DOM animVal animation code-path. | 179 // SVG DOM animVal animation code-path. |
| 180 m_animatedElements = findElementInstances(targetElement); | 180 WillBeHeapVector<RawPtrWillBeMember<SVGElement> > animatedElements = fin
dElementInstances(targetElement); |
| 181 ASSERT(!m_animatedElements.isEmpty()); | 181 ASSERT(!animatedElements.isEmpty()); |
| 182 | 182 |
| 183 WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::const_iterator end =
m_animatedElements.end(); | 183 WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::const_iterator end =
animatedElements.end(); |
| 184 for (WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::const_iterator i
t = m_animatedElements.begin(); it != end; ++it) | 184 for (WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::const_iterator i
t = animatedElements.begin(); it != end; ++it) |
| 185 document().accessSVGExtensions().addElementReferencingTarget(this, *
it); | 185 document().accessSVGExtensions().addElementReferencingTarget(this, *
it); |
| 186 | 186 |
| 187 if (!m_animatedProperty) | 187 if (!m_animatedProperty) |
| 188 m_animatedProperty = animator->startAnimValAnimation(m_animatedEleme
nts); | 188 m_animatedProperty = animator->startAnimValAnimation(animatedElement
s); |
| 189 else | 189 else |
| 190 m_animatedProperty = animator->resetAnimValToBaseVal(m_animatedEleme
nts); | 190 m_animatedProperty = animator->resetAnimValToBaseVal(animatedElement
s); |
| 191 | 191 |
| 192 return; | 192 return; |
| 193 } | 193 } |
| 194 | 194 |
| 195 // CSS properties animation code-path. | 195 // CSS properties animation code-path. |
| 196 ASSERT(m_animatedElements.isEmpty()); | |
| 197 String baseValue; | 196 String baseValue; |
| 198 | 197 |
| 199 if (shouldApply == ApplyCSSAnimation) { | 198 if (shouldApply == ApplyCSSAnimation) { |
| 200 ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement,
attributeName)); | 199 ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement,
attributeName)); |
| 201 computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.local
Name()), baseValue); | 200 computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.local
Name()), baseValue); |
| 202 } | 201 } |
| 203 | 202 |
| 204 m_animatedProperty = animator->constructFromString(baseValue); | 203 m_animatedProperty = animator->constructFromString(baseValue); |
| 205 } | 204 } |
| 206 | 205 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 void SVGAnimateElement::clearAnimatedType(SVGElement* targetElement) | 294 void SVGAnimateElement::clearAnimatedType(SVGElement* targetElement) |
| 296 { | 295 { |
| 297 if (!m_animatedProperty) | 296 if (!m_animatedProperty) |
| 298 return; | 297 return; |
| 299 | 298 |
| 300 if (!targetElement) { | 299 if (!targetElement) { |
| 301 m_animatedProperty.clear(); | 300 m_animatedProperty.clear(); |
| 302 return; | 301 return; |
| 303 } | 302 } |
| 304 | 303 |
| 305 if (m_animatedElements.isEmpty()) { | 304 if (ensureAnimator()->isAnimatingCSSProperty()) { |
| 306 // CSS properties animation code-path. | 305 // CSS properties animation code-path. |
| 307 removeCSSPropertyFromTargetAndInstances(targetElement, attributeName()); | 306 removeCSSPropertyFromTargetAndInstances(targetElement, attributeName()); |
| 308 m_animatedProperty.clear(); | 307 m_animatedProperty.clear(); |
| 309 return; | 308 return; |
| 310 } | 309 } |
| 311 | 310 |
| 312 // SVG DOM animVal animation code-path. | 311 // SVG DOM animVal animation code-path. |
| 313 if (m_animator) { | 312 if (m_animator) { |
| 314 m_animator->stopAnimValAnimation(m_animatedElements); | 313 WillBeHeapVector<RawPtrWillBeMember<SVGElement> > animatedElements = fin
dElementInstances(targetElement); |
| 314 m_animator->stopAnimValAnimation(animatedElements); |
| 315 notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName(
)); | 315 notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName(
)); |
| 316 } | 316 } |
| 317 | 317 |
| 318 m_animatedElements.clear(); | |
| 319 m_animatedProperty.clear(); | 318 m_animatedProperty.clear(); |
| 320 } | 319 } |
| 321 | 320 |
| 322 void SVGAnimateElement::applyResultsToTarget() | 321 void SVGAnimateElement::applyResultsToTarget() |
| 323 { | 322 { |
| 324 ASSERT(m_animatedPropertyType != AnimatedTransformList || isSVGAnimateTransf
ormElement(*this)); | 323 ASSERT(m_animatedPropertyType != AnimatedTransformList || isSVGAnimateTransf
ormElement(*this)); |
| 325 ASSERT(m_animatedPropertyType != AnimatedUnknown); | 324 ASSERT(m_animatedPropertyType != AnimatedUnknown); |
| 326 ASSERT(m_animator); | 325 ASSERT(m_animator); |
| 327 | 326 |
| 328 // Early exit if our animated type got destructed by a previous endedActiveI
nterval(). | 327 // Early exit if our animated type got destructed by a previous endedActiveI
nterval(). |
| 329 if (!m_animatedProperty) | 328 if (!m_animatedProperty) |
| 330 return; | 329 return; |
| 331 | 330 |
| 332 if (m_animatedElements.isEmpty()) { | 331 if (ensureAnimator()->isAnimatingCSSProperty()) { |
| 333 // CSS properties animation code-path. | 332 // CSS properties animation code-path. |
| 334 // Convert the result of the animation to a String and apply it as CSS p
roperty on the target & all instances. | 333 // Convert the result of the animation to a String and apply it as CSS p
roperty on the target & all instances. |
| 335 applyCSSPropertyToTargetAndInstances(targetElement(), attributeName(), m
_animatedProperty->valueAsString()); | 334 applyCSSPropertyToTargetAndInstances(targetElement(), attributeName(), m
_animatedProperty->valueAsString()); |
| 336 return; | 335 return; |
| 337 } | 336 } |
| 338 | 337 |
| 339 // SVG DOM animVal animation code-path. | 338 // SVG DOM animVal animation code-path. |
| 340 // At this point the SVG DOM values are already changed, unlike for CSS. | 339 // At this point the SVG DOM values are already changed, unlike for CSS. |
| 341 // We only have to trigger update notifications here. | 340 // We only have to trigger update notifications here. |
| 342 notifyTargetAndInstancesAboutAnimValChange(targetElement(), attributeName())
; | 341 notifyTargetAndInstancesAboutAnimValChange(targetElement(), attributeName())
; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 SVGAnimatedTypeAnimator* SVGAnimateElement::ensureAnimator() | 400 SVGAnimatedTypeAnimator* SVGAnimateElement::ensureAnimator() |
| 402 { | 401 { |
| 403 if (!m_animator) | 402 if (!m_animator) |
| 404 m_animator = SVGAnimatedTypeAnimator::create(m_animatedPropertyType, thi
s, targetElement()); | 403 m_animator = SVGAnimatedTypeAnimator::create(m_animatedPropertyType, thi
s, targetElement()); |
| 405 ASSERT(m_animatedPropertyType == m_animator->type()); | 404 ASSERT(m_animatedPropertyType == m_animator->type()); |
| 406 return m_animator.get(); | 405 return m_animator.get(); |
| 407 } | 406 } |
| 408 | 407 |
| 409 void SVGAnimateElement::trace(Visitor* visitor) | 408 void SVGAnimateElement::trace(Visitor* visitor) |
| 410 { | 409 { |
| 411 #if ENABLE(OILPAN) | |
| 412 visitor->trace(m_animatedElements); | |
| 413 #endif | |
| 414 visitor->trace(m_animator); | 410 visitor->trace(m_animator); |
| 415 SVGAnimationElement::trace(visitor); | 411 SVGAnimationElement::trace(visitor); |
| 416 } | 412 } |
| 417 | 413 |
| 418 } | 414 } |
| OLD | NEW |