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, 2007 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> |
4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 SVGFitToViewBox::trace(visitor); | 74 SVGFitToViewBox::trace(visitor); |
75 } | 75 } |
76 | 76 |
77 DEFINE_NODE_FACTORY(SVGMarkerElement) | 77 DEFINE_NODE_FACTORY(SVGMarkerElement) |
78 | 78 |
79 AffineTransform SVGMarkerElement::viewBoxToViewTransform(float viewWidth, float
viewHeight) const | 79 AffineTransform SVGMarkerElement::viewBoxToViewTransform(float viewWidth, float
viewHeight) const |
80 { | 80 { |
81 return SVGFitToViewBox::viewBoxToViewTransform(viewBox()->currentValue()->va
lue(), preserveAspectRatio()->currentValue(), viewWidth, viewHeight); | 81 return SVGFitToViewBox::viewBoxToViewTransform(viewBox()->currentValue()->va
lue(), preserveAspectRatio()->currentValue(), viewWidth, viewHeight); |
82 } | 82 } |
83 | 83 |
84 bool SVGMarkerElement::isSupportedAttribute(const QualifiedName& attrName) | |
85 { | |
86 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); | |
87 if (supportedAttributes.isEmpty()) { | |
88 SVGFitToViewBox::addSupportedAttributes(supportedAttributes); | |
89 supportedAttributes.add(SVGNames::markerUnitsAttr); | |
90 supportedAttributes.add(SVGNames::refXAttr); | |
91 supportedAttributes.add(SVGNames::refYAttr); | |
92 supportedAttributes.add(SVGNames::markerWidthAttr); | |
93 supportedAttributes.add(SVGNames::markerHeightAttr); | |
94 supportedAttributes.add(SVGNames::orientAttr); | |
95 } | |
96 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); | |
97 } | |
98 | |
99 void SVGMarkerElement::svgAttributeChanged(const QualifiedName& attrName) | 84 void SVGMarkerElement::svgAttributeChanged(const QualifiedName& attrName) |
100 { | 85 { |
101 if (!isSupportedAttribute(attrName)) { | 86 bool isLengthAttr = attrName == SVGNames::refXAttr |
102 SVGElement::svgAttributeChanged(attrName); | 87 || attrName == SVGNames::refYAttr |
| 88 || attrName == SVGNames::markerWidthAttr |
| 89 || attrName == SVGNames::markerHeightAttr; |
| 90 |
| 91 if (isLengthAttr) |
| 92 updateRelativeLengthsInformation(); |
| 93 |
| 94 if (isLengthAttr || attrName == SVGNames::markerUnitsAttr |
| 95 || attrName == SVGNames::orientAttr |
| 96 || SVGFitToViewBox::isKnownAttribute(attrName)) { |
| 97 SVGElement::InvalidationGuard invalidationGuard(this); |
| 98 LayoutSVGResourceContainer* renderer = toLayoutSVGResourceContainer(this
->layoutObject()); |
| 99 if (renderer) |
| 100 renderer->invalidateCacheAndMarkForLayout(); |
| 101 |
103 return; | 102 return; |
104 } | 103 } |
105 | 104 |
106 SVGElement::InvalidationGuard invalidationGuard(this); | 105 SVGElement::svgAttributeChanged(attrName); |
107 | |
108 if (attrName == SVGNames::refXAttr | |
109 || attrName == SVGNames::refYAttr | |
110 || attrName == SVGNames::markerWidthAttr | |
111 || attrName == SVGNames::markerHeightAttr) | |
112 updateRelativeLengthsInformation(); | |
113 | |
114 LayoutSVGResourceContainer* renderer = toLayoutSVGResourceContainer(this->la
youtObject()); | |
115 if (renderer) | |
116 renderer->invalidateCacheAndMarkForLayout(); | |
117 } | 106 } |
118 | 107 |
119 void SVGMarkerElement::childrenChanged(const ChildrenChange& change) | 108 void SVGMarkerElement::childrenChanged(const ChildrenChange& change) |
120 { | 109 { |
121 SVGElement::childrenChanged(change); | 110 SVGElement::childrenChanged(change); |
122 | 111 |
123 if (change.byParser) | 112 if (change.byParser) |
124 return; | 113 return; |
125 | 114 |
126 if (LayoutObject* object = layoutObject()) | 115 if (LayoutObject* object = layoutObject()) |
(...skipping 23 matching lines...) Expand all Loading... |
150 | 139 |
151 bool SVGMarkerElement::selfHasRelativeLengths() const | 140 bool SVGMarkerElement::selfHasRelativeLengths() const |
152 { | 141 { |
153 return m_refX->currentValue()->isRelative() | 142 return m_refX->currentValue()->isRelative() |
154 || m_refY->currentValue()->isRelative() | 143 || m_refY->currentValue()->isRelative() |
155 || m_markerWidth->currentValue()->isRelative() | 144 || m_markerWidth->currentValue()->isRelative() |
156 || m_markerHeight->currentValue()->isRelative(); | 145 || m_markerHeight->currentValue()->isRelative(); |
157 } | 146 } |
158 | 147 |
159 } // namespace blink | 148 } // namespace blink |
OLD | NEW |