OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006, 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 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 PassRefPtrWillBeRawPtr<SVGPathSegCurvetoQuadraticSmoothAbs> SVGPathElement::crea
teSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y) | 193 PassRefPtrWillBeRawPtr<SVGPathSegCurvetoQuadraticSmoothAbs> SVGPathElement::crea
teSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y) |
194 { | 194 { |
195 return SVGPathSegCurvetoQuadraticSmoothAbs::create(0, x, y); | 195 return SVGPathSegCurvetoQuadraticSmoothAbs::create(0, x, y); |
196 } | 196 } |
197 | 197 |
198 PassRefPtrWillBeRawPtr<SVGPathSegCurvetoQuadraticSmoothRel> SVGPathElement::crea
teSVGPathSegCurvetoQuadraticSmoothRel(float x, float y) | 198 PassRefPtrWillBeRawPtr<SVGPathSegCurvetoQuadraticSmoothRel> SVGPathElement::crea
teSVGPathSegCurvetoQuadraticSmoothRel(float x, float y) |
199 { | 199 { |
200 return SVGPathSegCurvetoQuadraticSmoothRel::create(0, x, y); | 200 return SVGPathSegCurvetoQuadraticSmoothRel::create(0, x, y); |
201 } | 201 } |
202 | 202 |
203 bool SVGPathElement::isSupportedAttribute(const QualifiedName& attrName) | |
204 { | |
205 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); | |
206 if (supportedAttributes.isEmpty()) { | |
207 supportedAttributes.add(SVGNames::dAttr); | |
208 supportedAttributes.add(SVGNames::pathLengthAttr); | |
209 } | |
210 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); | |
211 } | |
212 | |
213 void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName) | 203 void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName) |
214 { | 204 { |
215 if (!isSupportedAttribute(attrName)) { | 205 if (attrName == SVGNames::dAttr || attrName == SVGNames::pathLengthAttr) { |
216 SVGGeometryElement::svgAttributeChanged(attrName); | 206 SVGElement::InvalidationGuard invalidationGuard(this); |
| 207 |
| 208 LayoutSVGShape* renderer = toLayoutSVGShape(this->layoutObject()); |
| 209 |
| 210 if (attrName == SVGNames::dAttr) { |
| 211 if (renderer) |
| 212 renderer->setNeedsShapeUpdate(); |
| 213 |
| 214 invalidateMPathDependencies(); |
| 215 } |
| 216 |
| 217 if (renderer) |
| 218 markForLayoutAndParentResourceInvalidation(renderer); |
| 219 |
217 return; | 220 return; |
218 } | 221 } |
219 | 222 |
220 SVGElement::InvalidationGuard invalidationGuard(this); | 223 SVGGeometryElement::svgAttributeChanged(attrName); |
221 | |
222 LayoutSVGShape* renderer = toLayoutSVGShape(this->layoutObject()); | |
223 | |
224 if (attrName == SVGNames::dAttr) { | |
225 if (renderer) | |
226 renderer->setNeedsShapeUpdate(); | |
227 | |
228 invalidateMPathDependencies(); | |
229 } | |
230 | |
231 if (renderer) | |
232 markForLayoutAndParentResourceInvalidation(renderer); | |
233 } | 224 } |
234 | 225 |
235 void SVGPathElement::invalidateMPathDependencies() | 226 void SVGPathElement::invalidateMPathDependencies() |
236 { | 227 { |
237 // <mpath> can only reference <path> but this dependency is not handled in | 228 // <mpath> can only reference <path> but this dependency is not handled in |
238 // markForLayoutAndParentResourceInvalidation so we update any mpath depende
ncies manually. | 229 // markForLayoutAndParentResourceInvalidation so we update any mpath depende
ncies manually. |
239 if (SVGElementSet* dependencies = setOfIncomingReferences()) { | 230 if (SVGElementSet* dependencies = setOfIncomingReferences()) { |
240 for (SVGElement* element : *dependencies) { | 231 for (SVGElement* element : *dependencies) { |
241 if (isSVGMPathElement(*element)) | 232 if (isSVGMPathElement(*element)) |
242 toSVGMPathElement(element)->targetPathChanged(); | 233 toSVGMPathElement(element)->targetPathChanged(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 | 271 |
281 // FIXME: Eventually we should support getBBox for detached elements. | 272 // FIXME: Eventually we should support getBBox for detached elements. |
282 if (!layoutObject()) | 273 if (!layoutObject()) |
283 return FloatRect(); | 274 return FloatRect(); |
284 | 275 |
285 LayoutSVGShape* renderer = toLayoutSVGShape(this->layoutObject()); | 276 LayoutSVGShape* renderer = toLayoutSVGShape(this->layoutObject()); |
286 return renderer->path().boundingRect(); | 277 return renderer->path().boundingRect(); |
287 } | 278 } |
288 | 279 |
289 } // namespace blink | 280 } // namespace blink |
OLD | NEW |