| 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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 // standard events | 665 // standard events |
| 666 const AtomicString& eventName = HTMLElement::eventNameForAttributeName(n
ame); | 666 const AtomicString& eventName = HTMLElement::eventNameForAttributeName(n
ame); |
| 667 if (!eventName.isNull()) | 667 if (!eventName.isNull()) |
| 668 setAttributeEventListener(eventName, createAttributeEventListener(th
is, name, value)); | 668 setAttributeEventListener(eventName, createAttributeEventListener(th
is, name, value)); |
| 669 else | 669 else |
| 670 Element::parseAttribute(name, value); | 670 Element::parseAttribute(name, value); |
| 671 } | 671 } |
| 672 } | 672 } |
| 673 | 673 |
| 674 typedef HashMap<QualifiedName, AnimatedPropertyType> AttributeToPropertyTypeMap; | 674 typedef HashMap<QualifiedName, AnimatedPropertyType> AttributeToPropertyTypeMap; |
| 675 static inline AttributeToPropertyTypeMap& cssPropertyToTypeMap() | 675 AnimatedPropertyType SVGElement::animatedPropertyTypeForCSSAttribute(const Quali
fiedName& attributeName) |
| 676 { | 676 { |
| 677 DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_cssPropertyMap, ()); | 677 DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, cssPropertyMap, ()); |
| 678 | 678 |
| 679 if (!s_cssPropertyMap.isEmpty()) | 679 if (cssPropertyMap.isEmpty()) { |
| 680 return s_cssPropertyMap; | 680 // Fill the map for the first use. |
| 681 | 681 cssPropertyMap.set(alignment_baselineAttr, AnimatedString); |
| 682 // Fill the map for the first use. | 682 cssPropertyMap.set(baseline_shiftAttr, AnimatedString); |
| 683 s_cssPropertyMap.set(alignment_baselineAttr, AnimatedString); | 683 cssPropertyMap.set(buffered_renderingAttr, AnimatedString); |
| 684 s_cssPropertyMap.set(baseline_shiftAttr, AnimatedString); | 684 cssPropertyMap.set(clipAttr, AnimatedRect); |
| 685 s_cssPropertyMap.set(buffered_renderingAttr, AnimatedString); | 685 cssPropertyMap.set(clip_pathAttr, AnimatedString); |
| 686 s_cssPropertyMap.set(clipAttr, AnimatedRect); | 686 cssPropertyMap.set(clip_ruleAttr, AnimatedString); |
| 687 s_cssPropertyMap.set(clip_pathAttr, AnimatedString); | 687 cssPropertyMap.set(SVGNames::colorAttr, AnimatedColor); |
| 688 s_cssPropertyMap.set(clip_ruleAttr, AnimatedString); | 688 cssPropertyMap.set(color_interpolationAttr, AnimatedString); |
| 689 s_cssPropertyMap.set(SVGNames::colorAttr, AnimatedColor); | 689 cssPropertyMap.set(color_interpolation_filtersAttr, AnimatedString); |
| 690 s_cssPropertyMap.set(color_interpolationAttr, AnimatedString); | 690 cssPropertyMap.set(color_profileAttr, AnimatedString); |
| 691 s_cssPropertyMap.set(color_interpolation_filtersAttr, AnimatedString); | 691 cssPropertyMap.set(color_renderingAttr, AnimatedString); |
| 692 s_cssPropertyMap.set(color_profileAttr, AnimatedString); | 692 cssPropertyMap.set(cursorAttr, AnimatedString); |
| 693 s_cssPropertyMap.set(color_renderingAttr, AnimatedString); | 693 cssPropertyMap.set(displayAttr, AnimatedString); |
| 694 s_cssPropertyMap.set(cursorAttr, AnimatedString); | 694 cssPropertyMap.set(dominant_baselineAttr, AnimatedString); |
| 695 s_cssPropertyMap.set(displayAttr, AnimatedString); | 695 cssPropertyMap.set(fillAttr, AnimatedColor); |
| 696 s_cssPropertyMap.set(dominant_baselineAttr, AnimatedString); | 696 cssPropertyMap.set(fill_opacityAttr, AnimatedNumber); |
| 697 s_cssPropertyMap.set(fillAttr, AnimatedColor); | 697 cssPropertyMap.set(fill_ruleAttr, AnimatedString); |
| 698 s_cssPropertyMap.set(fill_opacityAttr, AnimatedNumber); | 698 cssPropertyMap.set(filterAttr, AnimatedString); |
| 699 s_cssPropertyMap.set(fill_ruleAttr, AnimatedString); | 699 cssPropertyMap.set(flood_colorAttr, AnimatedColor); |
| 700 s_cssPropertyMap.set(filterAttr, AnimatedString); | 700 cssPropertyMap.set(flood_opacityAttr, AnimatedNumber); |
| 701 s_cssPropertyMap.set(flood_colorAttr, AnimatedColor); | 701 cssPropertyMap.set(font_familyAttr, AnimatedString); |
| 702 s_cssPropertyMap.set(flood_opacityAttr, AnimatedNumber); | 702 cssPropertyMap.set(font_sizeAttr, AnimatedLength); |
| 703 s_cssPropertyMap.set(font_familyAttr, AnimatedString); | 703 cssPropertyMap.set(font_stretchAttr, AnimatedString); |
| 704 s_cssPropertyMap.set(font_sizeAttr, AnimatedLength); | 704 cssPropertyMap.set(font_styleAttr, AnimatedString); |
| 705 s_cssPropertyMap.set(font_stretchAttr, AnimatedString); | 705 cssPropertyMap.set(font_variantAttr, AnimatedString); |
| 706 s_cssPropertyMap.set(font_styleAttr, AnimatedString); | 706 cssPropertyMap.set(font_weightAttr, AnimatedString); |
| 707 s_cssPropertyMap.set(font_variantAttr, AnimatedString); | 707 cssPropertyMap.set(image_renderingAttr, AnimatedString); |
| 708 s_cssPropertyMap.set(font_weightAttr, AnimatedString); | 708 cssPropertyMap.set(kerningAttr, AnimatedLength); |
| 709 s_cssPropertyMap.set(image_renderingAttr, AnimatedString); | 709 cssPropertyMap.set(letter_spacingAttr, AnimatedLength); |
| 710 s_cssPropertyMap.set(kerningAttr, AnimatedLength); | 710 cssPropertyMap.set(lighting_colorAttr, AnimatedColor); |
| 711 s_cssPropertyMap.set(letter_spacingAttr, AnimatedLength); | 711 cssPropertyMap.set(marker_endAttr, AnimatedString); |
| 712 s_cssPropertyMap.set(lighting_colorAttr, AnimatedColor); | 712 cssPropertyMap.set(marker_midAttr, AnimatedString); |
| 713 s_cssPropertyMap.set(marker_endAttr, AnimatedString); | 713 cssPropertyMap.set(marker_startAttr, AnimatedString); |
| 714 s_cssPropertyMap.set(marker_midAttr, AnimatedString); | 714 cssPropertyMap.set(maskAttr, AnimatedString); |
| 715 s_cssPropertyMap.set(marker_startAttr, AnimatedString); | 715 cssPropertyMap.set(mask_typeAttr, AnimatedString); |
| 716 s_cssPropertyMap.set(maskAttr, AnimatedString); | 716 cssPropertyMap.set(opacityAttr, AnimatedNumber); |
| 717 s_cssPropertyMap.set(mask_typeAttr, AnimatedString); | 717 cssPropertyMap.set(overflowAttr, AnimatedString); |
| 718 s_cssPropertyMap.set(opacityAttr, AnimatedNumber); | 718 cssPropertyMap.set(paint_orderAttr, AnimatedString); |
| 719 s_cssPropertyMap.set(overflowAttr, AnimatedString); | 719 cssPropertyMap.set(pointer_eventsAttr, AnimatedString); |
| 720 s_cssPropertyMap.set(paint_orderAttr, AnimatedString); | 720 cssPropertyMap.set(shape_renderingAttr, AnimatedString); |
| 721 s_cssPropertyMap.set(pointer_eventsAttr, AnimatedString); | 721 cssPropertyMap.set(stop_colorAttr, AnimatedColor); |
| 722 s_cssPropertyMap.set(shape_renderingAttr, AnimatedString); | 722 cssPropertyMap.set(stop_opacityAttr, AnimatedNumber); |
| 723 s_cssPropertyMap.set(stop_colorAttr, AnimatedColor); | 723 cssPropertyMap.set(strokeAttr, AnimatedColor); |
| 724 s_cssPropertyMap.set(stop_opacityAttr, AnimatedNumber); | 724 cssPropertyMap.set(stroke_dasharrayAttr, AnimatedLengthList); |
| 725 s_cssPropertyMap.set(strokeAttr, AnimatedColor); | 725 cssPropertyMap.set(stroke_dashoffsetAttr, AnimatedLength); |
| 726 s_cssPropertyMap.set(stroke_dasharrayAttr, AnimatedLengthList); | 726 cssPropertyMap.set(stroke_linecapAttr, AnimatedString); |
| 727 s_cssPropertyMap.set(stroke_dashoffsetAttr, AnimatedLength); | 727 cssPropertyMap.set(stroke_linejoinAttr, AnimatedString); |
| 728 s_cssPropertyMap.set(stroke_linecapAttr, AnimatedString); | 728 cssPropertyMap.set(stroke_miterlimitAttr, AnimatedNumber); |
| 729 s_cssPropertyMap.set(stroke_linejoinAttr, AnimatedString); | 729 cssPropertyMap.set(stroke_opacityAttr, AnimatedNumber); |
| 730 s_cssPropertyMap.set(stroke_miterlimitAttr, AnimatedNumber); | 730 cssPropertyMap.set(stroke_widthAttr, AnimatedLength); |
| 731 s_cssPropertyMap.set(stroke_opacityAttr, AnimatedNumber); | 731 cssPropertyMap.set(text_anchorAttr, AnimatedString); |
| 732 s_cssPropertyMap.set(stroke_widthAttr, AnimatedLength); | 732 cssPropertyMap.set(text_decorationAttr, AnimatedString); |
| 733 s_cssPropertyMap.set(text_anchorAttr, AnimatedString); | 733 cssPropertyMap.set(text_renderingAttr, AnimatedString); |
| 734 s_cssPropertyMap.set(text_decorationAttr, AnimatedString); | 734 cssPropertyMap.set(vector_effectAttr, AnimatedString); |
| 735 s_cssPropertyMap.set(text_renderingAttr, AnimatedString); | 735 cssPropertyMap.set(visibilityAttr, AnimatedString); |
| 736 s_cssPropertyMap.set(vector_effectAttr, AnimatedString); | 736 cssPropertyMap.set(word_spacingAttr, AnimatedLength); |
| 737 s_cssPropertyMap.set(visibilityAttr, AnimatedString); | |
| 738 s_cssPropertyMap.set(word_spacingAttr, AnimatedLength); | |
| 739 return s_cssPropertyMap; | |
| 740 } | |
| 741 | |
| 742 void SVGElement::animatedPropertyTypeForAttribute(const QualifiedName& attribute
Name, Vector<AnimatedPropertyType>& propertyTypes) | |
| 743 { | |
| 744 localAttributeToPropertyMap().animatedPropertyTypeForAttribute(attributeName
, propertyTypes); | |
| 745 if (!propertyTypes.isEmpty()) | |
| 746 return; | |
| 747 | |
| 748 RefPtr<NewSVGAnimatedPropertyBase> animatedProperty = m_newAttributeToProper
tyMap.get(attributeName); | |
| 749 if (animatedProperty) { | |
| 750 propertyTypes.append(animatedProperty->type()); | |
| 751 return; | |
| 752 } | 737 } |
| 753 | 738 |
| 754 AttributeToPropertyTypeMap& cssPropertyTypeMap = cssPropertyToTypeMap(); | 739 if (cssPropertyMap.contains(attributeName)) |
| 755 if (cssPropertyTypeMap.contains(attributeName)) | 740 return cssPropertyMap.get(attributeName); |
| 756 propertyTypes.append(cssPropertyTypeMap.get(attributeName)); | 741 |
| 742 return AnimatedUnknown; |
| 757 } | 743 } |
| 758 | 744 |
| 759 void SVGElement::addToPropertyMap(PassRefPtr<NewSVGAnimatedPropertyBase> passPro
perty) | 745 void SVGElement::addToPropertyMap(PassRefPtr<NewSVGAnimatedPropertyBase> passPro
perty) |
| 760 { | 746 { |
| 761 RefPtr<NewSVGAnimatedPropertyBase> property(passProperty); | 747 RefPtr<NewSVGAnimatedPropertyBase> property(passProperty); |
| 762 QualifiedName attributeName = property->attributeName(); | 748 QualifiedName attributeName = property->attributeName(); |
| 763 m_newAttributeToPropertyMap.set(attributeName, property.release()); | 749 m_newAttributeToPropertyMap.set(attributeName, property.release()); |
| 764 } | 750 } |
| 765 | 751 |
| 766 PassRefPtr<NewSVGAnimatedPropertyBase> SVGElement::propertyFromAttribute(const Q
ualifiedName& attributeName) | 752 PassRefPtr<NewSVGAnimatedPropertyBase> SVGElement::propertyFromAttribute(const Q
ualifiedName& attributeName) |
| 767 { | 753 { |
| 768 return m_newAttributeToPropertyMap.get(attributeName); | 754 return m_newAttributeToPropertyMap.get(attributeName); |
| 769 } | 755 } |
| 770 | 756 |
| 771 bool SVGElement::isAnimatableCSSProperty(const QualifiedName& attrName) | 757 bool SVGElement::isAnimatableCSSProperty(const QualifiedName& attrName) |
| 772 { | 758 { |
| 773 return cssPropertyToTypeMap().contains(attrName); | 759 return animatedPropertyTypeForCSSAttribute(attrName) != AnimatedUnknown; |
| 774 } | 760 } |
| 775 | 761 |
| 776 bool SVGElement::isPresentationAttribute(const QualifiedName& name) const | 762 bool SVGElement::isPresentationAttribute(const QualifiedName& name) const |
| 777 { | 763 { |
| 778 return cssPropertyIdForSVGAttributeName(name) > 0; | 764 return cssPropertyIdForSVGAttributeName(name) > 0; |
| 779 } | 765 } |
| 780 | 766 |
| 781 void SVGElement::collectStyleForPresentationAttribute(const QualifiedName& name,
const AtomicString& value, MutableStylePropertySet* style) | 767 void SVGElement::collectStyleForPresentationAttribute(const QualifiedName& name,
const AtomicString& value, MutableStylePropertySet* style) |
| 782 { | 768 { |
| 783 CSSPropertyID propertyID = cssPropertyIdForSVGAttributeName(name); | 769 CSSPropertyID propertyID = cssPropertyIdForSVGAttributeName(name); |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1172 animatableAttributes.add(SVGNames::zAttr); | 1158 animatableAttributes.add(SVGNames::zAttr); |
| 1173 } | 1159 } |
| 1174 | 1160 |
| 1175 if (name == classAttr) | 1161 if (name == classAttr) |
| 1176 return true; | 1162 return true; |
| 1177 | 1163 |
| 1178 return animatableAttributes.contains(name); | 1164 return animatableAttributes.contains(name); |
| 1179 } | 1165 } |
| 1180 #endif | 1166 #endif |
| 1181 } | 1167 } |
| OLD | NEW |