| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> |
| 3 * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2008 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) 2008 Alp Toker <alp@atoker.com> | 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> |
| 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> | 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 // standard events | 655 // standard events |
| 656 const AtomicString& eventName = HTMLElement::eventNameForAttributeName(n
ame); | 656 const AtomicString& eventName = HTMLElement::eventNameForAttributeName(n
ame); |
| 657 if (!eventName.isNull()) | 657 if (!eventName.isNull()) |
| 658 setAttributeEventListener(eventName, createAttributeEventListener(th
is, name, value)); | 658 setAttributeEventListener(eventName, createAttributeEventListener(th
is, name, value)); |
| 659 else | 659 else |
| 660 Element::parseAttribute(name, value); | 660 Element::parseAttribute(name, value); |
| 661 } | 661 } |
| 662 } | 662 } |
| 663 | 663 |
| 664 typedef HashMap<QualifiedName, AnimatedPropertyType> AttributeToPropertyTypeMap; | 664 typedef HashMap<QualifiedName, AnimatedPropertyType> AttributeToPropertyTypeMap; |
| 665 static inline AttributeToPropertyTypeMap& cssPropertyToTypeMap() | 665 AnimatedPropertyType SVGElement::animatedPropertyTypeForCSSAttribute(const Quali
fiedName& attributeName) |
| 666 { | 666 { |
| 667 DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_cssPropertyMap, ()); | 667 DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, cssPropertyMap, ()); |
| 668 | 668 |
| 669 if (!s_cssPropertyMap.isEmpty()) | 669 if (cssPropertyMap.isEmpty()) { |
| 670 return s_cssPropertyMap; | 670 // Fill the map for the first use. |
| 671 | 671 cssPropertyMap.set(alignment_baselineAttr, AnimatedString); |
| 672 // Fill the map for the first use. | 672 cssPropertyMap.set(baseline_shiftAttr, AnimatedString); |
| 673 s_cssPropertyMap.set(alignment_baselineAttr, AnimatedString); | 673 cssPropertyMap.set(buffered_renderingAttr, AnimatedString); |
| 674 s_cssPropertyMap.set(baseline_shiftAttr, AnimatedString); | 674 cssPropertyMap.set(clipAttr, AnimatedRect); |
| 675 s_cssPropertyMap.set(buffered_renderingAttr, AnimatedString); | 675 cssPropertyMap.set(clip_pathAttr, AnimatedString); |
| 676 s_cssPropertyMap.set(clipAttr, AnimatedRect); | 676 cssPropertyMap.set(clip_ruleAttr, AnimatedString); |
| 677 s_cssPropertyMap.set(clip_pathAttr, AnimatedString); | 677 cssPropertyMap.set(SVGNames::colorAttr, AnimatedColor); |
| 678 s_cssPropertyMap.set(clip_ruleAttr, AnimatedString); | 678 cssPropertyMap.set(color_interpolationAttr, AnimatedString); |
| 679 s_cssPropertyMap.set(SVGNames::colorAttr, AnimatedColor); | 679 cssPropertyMap.set(color_interpolation_filtersAttr, AnimatedString); |
| 680 s_cssPropertyMap.set(color_interpolationAttr, AnimatedString); | 680 cssPropertyMap.set(color_profileAttr, AnimatedString); |
| 681 s_cssPropertyMap.set(color_interpolation_filtersAttr, AnimatedString); | 681 cssPropertyMap.set(color_renderingAttr, AnimatedString); |
| 682 s_cssPropertyMap.set(color_profileAttr, AnimatedString); | 682 cssPropertyMap.set(cursorAttr, AnimatedString); |
| 683 s_cssPropertyMap.set(color_renderingAttr, AnimatedString); | 683 cssPropertyMap.set(displayAttr, AnimatedString); |
| 684 s_cssPropertyMap.set(cursorAttr, AnimatedString); | 684 cssPropertyMap.set(dominant_baselineAttr, AnimatedString); |
| 685 s_cssPropertyMap.set(displayAttr, AnimatedString); | 685 cssPropertyMap.set(fillAttr, AnimatedColor); |
| 686 s_cssPropertyMap.set(dominant_baselineAttr, AnimatedString); | 686 cssPropertyMap.set(fill_opacityAttr, AnimatedNumber); |
| 687 s_cssPropertyMap.set(fillAttr, AnimatedColor); | 687 cssPropertyMap.set(fill_ruleAttr, AnimatedString); |
| 688 s_cssPropertyMap.set(fill_opacityAttr, AnimatedNumber); | 688 cssPropertyMap.set(filterAttr, AnimatedString); |
| 689 s_cssPropertyMap.set(fill_ruleAttr, AnimatedString); | 689 cssPropertyMap.set(flood_colorAttr, AnimatedColor); |
| 690 s_cssPropertyMap.set(filterAttr, AnimatedString); | 690 cssPropertyMap.set(flood_opacityAttr, AnimatedNumber); |
| 691 s_cssPropertyMap.set(flood_colorAttr, AnimatedColor); | 691 cssPropertyMap.set(font_familyAttr, AnimatedString); |
| 692 s_cssPropertyMap.set(flood_opacityAttr, AnimatedNumber); | 692 cssPropertyMap.set(font_sizeAttr, AnimatedLength); |
| 693 s_cssPropertyMap.set(font_familyAttr, AnimatedString); | 693 cssPropertyMap.set(font_stretchAttr, AnimatedString); |
| 694 s_cssPropertyMap.set(font_sizeAttr, AnimatedLength); | 694 cssPropertyMap.set(font_styleAttr, AnimatedString); |
| 695 s_cssPropertyMap.set(font_stretchAttr, AnimatedString); | 695 cssPropertyMap.set(font_variantAttr, AnimatedString); |
| 696 s_cssPropertyMap.set(font_styleAttr, AnimatedString); | 696 cssPropertyMap.set(font_weightAttr, AnimatedString); |
| 697 s_cssPropertyMap.set(font_variantAttr, AnimatedString); | 697 cssPropertyMap.set(image_renderingAttr, AnimatedString); |
| 698 s_cssPropertyMap.set(font_weightAttr, AnimatedString); | 698 cssPropertyMap.set(kerningAttr, AnimatedLength); |
| 699 s_cssPropertyMap.set(image_renderingAttr, AnimatedString); | 699 cssPropertyMap.set(letter_spacingAttr, AnimatedLength); |
| 700 s_cssPropertyMap.set(kerningAttr, AnimatedLength); | 700 cssPropertyMap.set(lighting_colorAttr, AnimatedColor); |
| 701 s_cssPropertyMap.set(letter_spacingAttr, AnimatedLength); | 701 cssPropertyMap.set(marker_endAttr, AnimatedString); |
| 702 s_cssPropertyMap.set(lighting_colorAttr, AnimatedColor); | 702 cssPropertyMap.set(marker_midAttr, AnimatedString); |
| 703 s_cssPropertyMap.set(marker_endAttr, AnimatedString); | 703 cssPropertyMap.set(marker_startAttr, AnimatedString); |
| 704 s_cssPropertyMap.set(marker_midAttr, AnimatedString); | 704 cssPropertyMap.set(maskAttr, AnimatedString); |
| 705 s_cssPropertyMap.set(marker_startAttr, AnimatedString); | 705 cssPropertyMap.set(mask_typeAttr, AnimatedString); |
| 706 s_cssPropertyMap.set(maskAttr, AnimatedString); | 706 cssPropertyMap.set(opacityAttr, AnimatedNumber); |
| 707 s_cssPropertyMap.set(mask_typeAttr, AnimatedString); | 707 cssPropertyMap.set(overflowAttr, AnimatedString); |
| 708 s_cssPropertyMap.set(opacityAttr, AnimatedNumber); | 708 cssPropertyMap.set(paint_orderAttr, AnimatedString); |
| 709 s_cssPropertyMap.set(overflowAttr, AnimatedString); | 709 cssPropertyMap.set(pointer_eventsAttr, AnimatedString); |
| 710 s_cssPropertyMap.set(paint_orderAttr, AnimatedString); | 710 cssPropertyMap.set(shape_renderingAttr, AnimatedString); |
| 711 s_cssPropertyMap.set(pointer_eventsAttr, AnimatedString); | 711 cssPropertyMap.set(stop_colorAttr, AnimatedColor); |
| 712 s_cssPropertyMap.set(shape_renderingAttr, AnimatedString); | 712 cssPropertyMap.set(stop_opacityAttr, AnimatedNumber); |
| 713 s_cssPropertyMap.set(stop_colorAttr, AnimatedColor); | 713 cssPropertyMap.set(strokeAttr, AnimatedColor); |
| 714 s_cssPropertyMap.set(stop_opacityAttr, AnimatedNumber); | 714 cssPropertyMap.set(stroke_dasharrayAttr, AnimatedLengthList); |
| 715 s_cssPropertyMap.set(strokeAttr, AnimatedColor); | 715 cssPropertyMap.set(stroke_dashoffsetAttr, AnimatedLength); |
| 716 s_cssPropertyMap.set(stroke_dasharrayAttr, AnimatedLengthList); | 716 cssPropertyMap.set(stroke_linecapAttr, AnimatedString); |
| 717 s_cssPropertyMap.set(stroke_dashoffsetAttr, AnimatedLength); | 717 cssPropertyMap.set(stroke_linejoinAttr, AnimatedString); |
| 718 s_cssPropertyMap.set(stroke_linecapAttr, AnimatedString); | 718 cssPropertyMap.set(stroke_miterlimitAttr, AnimatedNumber); |
| 719 s_cssPropertyMap.set(stroke_linejoinAttr, AnimatedString); | 719 cssPropertyMap.set(stroke_opacityAttr, AnimatedNumber); |
| 720 s_cssPropertyMap.set(stroke_miterlimitAttr, AnimatedNumber); | 720 cssPropertyMap.set(stroke_widthAttr, AnimatedLength); |
| 721 s_cssPropertyMap.set(stroke_opacityAttr, AnimatedNumber); | 721 cssPropertyMap.set(text_anchorAttr, AnimatedString); |
| 722 s_cssPropertyMap.set(stroke_widthAttr, AnimatedLength); | 722 cssPropertyMap.set(text_decorationAttr, AnimatedString); |
| 723 s_cssPropertyMap.set(text_anchorAttr, AnimatedString); | 723 cssPropertyMap.set(text_renderingAttr, AnimatedString); |
| 724 s_cssPropertyMap.set(text_decorationAttr, AnimatedString); | 724 cssPropertyMap.set(vector_effectAttr, AnimatedString); |
| 725 s_cssPropertyMap.set(text_renderingAttr, AnimatedString); | 725 cssPropertyMap.set(visibilityAttr, AnimatedString); |
| 726 s_cssPropertyMap.set(vector_effectAttr, AnimatedString); | 726 cssPropertyMap.set(word_spacingAttr, AnimatedLength); |
| 727 s_cssPropertyMap.set(visibilityAttr, AnimatedString); | |
| 728 s_cssPropertyMap.set(word_spacingAttr, AnimatedLength); | |
| 729 return s_cssPropertyMap; | |
| 730 } | |
| 731 | |
| 732 void SVGElement::animatedPropertyTypeForAttribute(const QualifiedName& attribute
Name, Vector<AnimatedPropertyType>& propertyTypes) | |
| 733 { | |
| 734 RefPtr<NewSVGAnimatedPropertyBase> animatedProperty = m_newAttributeToProper
tyMap.get(attributeName); | |
| 735 if (animatedProperty) { | |
| 736 propertyTypes.append(animatedProperty->type()); | |
| 737 return; | |
| 738 } | 727 } |
| 739 | 728 |
| 740 AttributeToPropertyTypeMap& cssPropertyTypeMap = cssPropertyToTypeMap(); | 729 if (cssPropertyMap.contains(attributeName)) |
| 741 if (cssPropertyTypeMap.contains(attributeName)) | 730 return cssPropertyMap.get(attributeName); |
| 742 propertyTypes.append(cssPropertyTypeMap.get(attributeName)); | 731 |
| 732 return AnimatedUnknown; |
| 743 } | 733 } |
| 744 | 734 |
| 745 void SVGElement::addToPropertyMap(PassRefPtr<NewSVGAnimatedPropertyBase> passPro
perty) | 735 void SVGElement::addToPropertyMap(PassRefPtr<NewSVGAnimatedPropertyBase> passPro
perty) |
| 746 { | 736 { |
| 747 RefPtr<NewSVGAnimatedPropertyBase> property(passProperty); | 737 RefPtr<NewSVGAnimatedPropertyBase> property(passProperty); |
| 748 QualifiedName attributeName = property->attributeName(); | 738 QualifiedName attributeName = property->attributeName(); |
| 749 m_newAttributeToPropertyMap.set(attributeName, property.release()); | 739 m_newAttributeToPropertyMap.set(attributeName, property.release()); |
| 750 } | 740 } |
| 751 | 741 |
| 752 PassRefPtr<NewSVGAnimatedPropertyBase> SVGElement::propertyFromAttribute(const Q
ualifiedName& attributeName) | 742 PassRefPtr<NewSVGAnimatedPropertyBase> SVGElement::propertyFromAttribute(const Q
ualifiedName& attributeName) |
| 753 { | 743 { |
| 754 return m_newAttributeToPropertyMap.get(attributeName); | 744 return m_newAttributeToPropertyMap.get(attributeName); |
| 755 } | 745 } |
| 756 | 746 |
| 757 bool SVGElement::isAnimatableCSSProperty(const QualifiedName& attrName) | 747 bool SVGElement::isAnimatableCSSProperty(const QualifiedName& attrName) |
| 758 { | 748 { |
| 759 return cssPropertyToTypeMap().contains(attrName); | 749 return animatedPropertyTypeForCSSAttribute(attrName) != AnimatedUnknown; |
| 760 } | 750 } |
| 761 | 751 |
| 762 bool SVGElement::isPresentationAttribute(const QualifiedName& name) const | 752 bool SVGElement::isPresentationAttribute(const QualifiedName& name) const |
| 763 { | 753 { |
| 764 return cssPropertyIdForSVGAttributeName(name) > 0; | 754 return cssPropertyIdForSVGAttributeName(name) > 0; |
| 765 } | 755 } |
| 766 | 756 |
| 767 void SVGElement::collectStyleForPresentationAttribute(const QualifiedName& name,
const AtomicString& value, MutableStylePropertySet* style) | 757 void SVGElement::collectStyleForPresentationAttribute(const QualifiedName& name,
const AtomicString& value, MutableStylePropertySet* style) |
| 768 { | 758 { |
| 769 CSSPropertyID propertyID = cssPropertyIdForSVGAttributeName(name); | 759 CSSPropertyID propertyID = cssPropertyIdForSVGAttributeName(name); |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 animatableAttributes.add(SVGNames::zAttr); | 1143 animatableAttributes.add(SVGNames::zAttr); |
| 1154 } | 1144 } |
| 1155 | 1145 |
| 1156 if (name == classAttr) | 1146 if (name == classAttr) |
| 1157 return true; | 1147 return true; |
| 1158 | 1148 |
| 1159 return animatableAttributes.contains(name); | 1149 return animatableAttributes.contains(name); |
| 1160 } | 1150 } |
| 1161 #endif | 1151 #endif |
| 1162 } | 1152 } |
| OLD | NEW |