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

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp

Issue 2395793004: Move isTargetAttributeCSSProperty to SVGAnimateElement (Closed)
Patch Set: Created 4 years, 2 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 | « no previous file | third_party/WebKit/Source/core/svg/SVGAnimationElement.h » ('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) 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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/svg/SVGAnimationElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698