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

Side by Side Diff: Source/core/svg/SVGAnimationElement.cpp

Issue 21042009: [SVG2] Merge SVGStyledElement into SVGElement (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Build fix Created 7 years, 4 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 | Annotate | Revision Log
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, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 15 matching lines...) Expand all
26 26
27 #include "core/svg/SVGAnimationElement.h" 27 #include "core/svg/SVGAnimationElement.h"
28 28
29 #include "CSSPropertyNames.h" 29 #include "CSSPropertyNames.h"
30 #include "SVGNames.h" 30 #include "SVGNames.h"
31 #include "core/css/CSSComputedStyleDeclaration.h" 31 #include "core/css/CSSComputedStyleDeclaration.h"
32 #include "core/css/CSSParser.h" 32 #include "core/css/CSSParser.h"
33 #include "core/page/UseCounter.h" 33 #include "core/page/UseCounter.h"
34 #include "core/platform/FloatConversion.h" 34 #include "core/platform/FloatConversion.h"
35 #include "core/svg/SVGAnimateElement.h" 35 #include "core/svg/SVGAnimateElement.h"
36 #include "core/svg/SVGElement.h"
36 #include "core/svg/SVGParserUtilities.h" 37 #include "core/svg/SVGParserUtilities.h"
37 #include "core/svg/SVGStyledElement.h"
38 #include "wtf/MathExtras.h" 38 #include "wtf/MathExtras.h"
39 39
40 namespace WebCore { 40 namespace WebCore {
41 41
42 // Animated property definitions 42 // Animated property definitions
43 DEFINE_ANIMATED_BOOLEAN(SVGAnimationElement, SVGNames::externalResourcesRequired Attr, ExternalResourcesRequired, externalResourcesRequired) 43 DEFINE_ANIMATED_BOOLEAN(SVGAnimationElement, SVGNames::externalResourcesRequired Attr, ExternalResourcesRequired, externalResourcesRequired)
44 44
45 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGAnimationElement) 45 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGAnimationElement)
46 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired) 46 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired)
47 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests) 47 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests)
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 bool SVGAnimationElement::isAccumulated() const 355 bool SVGAnimationElement::isAccumulated() const
356 { 356 {
357 DEFINE_STATIC_LOCAL(const AtomicString, sum, ("sum", AtomicString::Construct FromLiteral)); 357 DEFINE_STATIC_LOCAL(const AtomicString, sum, ("sum", AtomicString::Construct FromLiteral));
358 const AtomicString& value = fastGetAttribute(SVGNames::accumulateAttr); 358 const AtomicString& value = fastGetAttribute(SVGNames::accumulateAttr);
359 return value == sum && animationMode() != ToAnimation; 359 return value == sum && animationMode() != ToAnimation;
360 } 360 }
361 361
362 bool SVGAnimationElement::isTargetAttributeCSSProperty(SVGElement* targetElement , const QualifiedName& attributeName) 362 bool SVGAnimationElement::isTargetAttributeCSSProperty(SVGElement* targetElement , const QualifiedName& attributeName)
363 { 363 {
364 ASSERT(targetElement); 364 ASSERT(targetElement);
365 if (!targetElement->isSVGStyledElement())
366 return false;
367 365
368 return SVGStyledElement::isAnimatableCSSProperty(attributeName); 366 return SVGElement::isAnimatableCSSProperty(attributeName);
369 } 367 }
370 368
371 SVGAnimationElement::ShouldApplyAnimation SVGAnimationElement::shouldApplyAnimat ion(SVGElement* targetElement, const QualifiedName& attributeName) 369 SVGAnimationElement::ShouldApplyAnimation SVGAnimationElement::shouldApplyAnimat ion(SVGElement* targetElement, const QualifiedName& attributeName)
372 { 370 {
373 if (!hasValidAttributeType() || !targetElement || attributeName == anyQName( )) 371 if (!hasValidAttributeType() || !targetElement || attributeName == anyQName( ))
374 return DontApplyAnimation; 372 return DontApplyAnimation;
375 373
376 // Always animate CSS properties, using the ApplyCSSAnimation code path, reg ardless of the attributeType value. 374 // Always animate CSS properties, using the ApplyCSSAnimation code path, reg ardless of the attributeType value.
377 if (isTargetAttributeCSSProperty(targetElement, attributeName)) 375 if (isTargetAttributeCSSProperty(targetElement, attributeName))
378 return ApplyCSSAnimation; 376 return ApplyCSSAnimation;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 effectivePercent = calculatePercentForFromTo(percent); 634 effectivePercent = calculatePercentForFromTo(percent);
637 else 635 else
638 effectivePercent = percent; 636 effectivePercent = percent;
639 637
640 calculateAnimatedValue(effectivePercent, repeatCount, resultElement); 638 calculateAnimatedValue(effectivePercent, repeatCount, resultElement);
641 } 639 }
642 640
643 void SVGAnimationElement::computeCSSPropertyValue(SVGElement* element, CSSProper tyID id, String& value) 641 void SVGAnimationElement::computeCSSPropertyValue(SVGElement* element, CSSProper tyID id, String& value)
644 { 642 {
645 ASSERT(element); 643 ASSERT(element);
646 ASSERT(element->isSVGStyledElement());
647 644
648 // Don't include any properties resulting from CSS Transitions/Animations or SMIL animations, as we want to retrieve the "base value". 645 // Don't include any properties resulting from CSS Transitions/Animations or SMIL animations, as we want to retrieve the "base value".
649 element->setUseOverrideComputedStyle(true); 646 element->setUseOverrideComputedStyle(true);
650 value = CSSComputedStyleDeclaration::create(element)->getPropertyValue(id); 647 value = CSSComputedStyleDeclaration::create(element)->getPropertyValue(id);
651 element->setUseOverrideComputedStyle(false); 648 element->setUseOverrideComputedStyle(false);
652 } 649 }
653 650
654 void SVGAnimationElement::adjustForInheritance(SVGElement* targetElement, const QualifiedName& attributeName, String& value) 651 void SVGAnimationElement::adjustForInheritance(SVGElement* targetElement, const QualifiedName& attributeName, String& value)
655 { 652 {
656 // FIXME: At the moment the computed style gets returned as a String and nee ds to get parsed again. 653 // FIXME: At the moment the computed style gets returned as a String and nee ds to get parsed again.
657 // In the future we might want to work with the value type directly to avoid the String parsing. 654 // In the future we might want to work with the value type directly to avoid the String parsing.
658 ASSERT(targetElement); 655 ASSERT(targetElement);
659 656
660 Element* parent = targetElement->parentElement(); 657 Element* parent = targetElement->parentElement();
661 if (!parent || !parent->isSVGElement()) 658 if (!parent || !parent->isSVGElement())
662 return; 659 return;
663 660
664 SVGElement* svgParent = toSVGElement(parent); 661 SVGElement* svgParent = toSVGElement(parent);
665 if (!svgParent->isSVGStyledElement())
666 return;
667 computeCSSPropertyValue(svgParent, cssPropertyID(attributeName.localName()), value); 662 computeCSSPropertyValue(svgParent, cssPropertyID(attributeName.localName()), value);
668 } 663 }
669 664
670 static bool inheritsFromProperty(SVGElement* targetElement, const QualifiedName& attributeName, const String& value) 665 static bool inheritsFromProperty(SVGElement* targetElement, const QualifiedName& attributeName, const String& value)
671 { 666 {
672 ASSERT(targetElement); 667 ASSERT(targetElement);
673 DEFINE_STATIC_LOCAL(const AtomicString, inherit, ("inherit", AtomicString::C onstructFromLiteral)); 668 DEFINE_STATIC_LOCAL(const AtomicString, inherit, ("inherit", AtomicString::C onstructFromLiteral));
674 669
675 if (value.isEmpty() || value != inherit || !targetElement->isSVGStyledElemen t()) 670 if (value.isEmpty() || value != inherit)
676 return false; 671 return false;
677 return SVGStyledElement::isAnimatableCSSProperty(attributeName); 672 return SVGElement::isAnimatableCSSProperty(attributeName);
678 } 673 }
679 674
680 void SVGAnimationElement::determinePropertyValueTypes(const String& from, const String& to) 675 void SVGAnimationElement::determinePropertyValueTypes(const String& from, const String& to)
681 { 676 {
682 SVGElement* targetElement = this->targetElement(); 677 SVGElement* targetElement = this->targetElement();
683 ASSERT(targetElement); 678 ASSERT(targetElement);
684 679
685 const QualifiedName& attributeName = this->attributeName(); 680 const QualifiedName& attributeName = this->attributeName();
686 if (inheritsFromProperty(targetElement, attributeName, from)) 681 if (inheritsFromProperty(targetElement, attributeName, from))
687 m_fromPropertyValueType = InheritValue; 682 m_fromPropertyValueType = InheritValue;
(...skipping 12 matching lines...) Expand all
700 SVGSMILElement::setAttributeName(attributeName); 695 SVGSMILElement::setAttributeName(attributeName);
701 checkInvalidCSSAttributeType(targetElement()); 696 checkInvalidCSSAttributeType(targetElement());
702 } 697 }
703 698
704 void SVGAnimationElement::checkInvalidCSSAttributeType(SVGElement* target) 699 void SVGAnimationElement::checkInvalidCSSAttributeType(SVGElement* target)
705 { 700 {
706 m_hasInvalidCSSAttributeType = target && hasValidAttributeName() && attribut eType() == AttributeTypeCSS && !isTargetAttributeCSSProperty(target, attributeNa me()); 701 m_hasInvalidCSSAttributeType = target && hasValidAttributeName() && attribut eType() == AttributeTypeCSS && !isTargetAttributeCSSProperty(target, attributeNa me());
707 } 702 }
708 703
709 } 704 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698