| 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, 2008, 2009 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Rob Buis <buis@kde.org> |
| 4 * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> | 4 * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> |
| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 DEFINE_ANIMATED_BOOLEAN(SVGImageElement, SVGNames::externalResourcesRequiredAttr
, ExternalResourcesRequired, externalResourcesRequired) | 43 DEFINE_ANIMATED_BOOLEAN(SVGImageElement, SVGNames::externalResourcesRequiredAttr
, ExternalResourcesRequired, externalResourcesRequired) |
| 44 | 44 |
| 45 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGImageElement) | 45 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGImageElement) |
| 46 REGISTER_LOCAL_ANIMATED_PROPERTY(x) | 46 REGISTER_LOCAL_ANIMATED_PROPERTY(x) |
| 47 REGISTER_LOCAL_ANIMATED_PROPERTY(y) | 47 REGISTER_LOCAL_ANIMATED_PROPERTY(y) |
| 48 REGISTER_LOCAL_ANIMATED_PROPERTY(width) | 48 REGISTER_LOCAL_ANIMATED_PROPERTY(width) |
| 49 REGISTER_LOCAL_ANIMATED_PROPERTY(height) | 49 REGISTER_LOCAL_ANIMATED_PROPERTY(height) |
| 50 REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAspectRatio) | 50 REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAspectRatio) |
| 51 REGISTER_LOCAL_ANIMATED_PROPERTY(href) | 51 REGISTER_LOCAL_ANIMATED_PROPERTY(href) |
| 52 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired) | 52 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired) |
| 53 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGStyledTransformableElement) | 53 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGGraphicsElement) |
| 54 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests) | |
| 55 END_REGISTER_ANIMATED_PROPERTIES | 54 END_REGISTER_ANIMATED_PROPERTIES |
| 56 | 55 |
| 57 inline SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document*
document) | 56 inline SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document*
document) |
| 58 : SVGStyledTransformableElement(tagName, document) | 57 : SVGGraphicsElement(tagName, document) |
| 59 , m_x(LengthModeWidth) | 58 , m_x(LengthModeWidth) |
| 60 , m_y(LengthModeHeight) | 59 , m_y(LengthModeHeight) |
| 61 , m_width(LengthModeWidth) | 60 , m_width(LengthModeWidth) |
| 62 , m_height(LengthModeHeight) | 61 , m_height(LengthModeHeight) |
| 63 , m_imageLoader(this) | 62 , m_imageLoader(this) |
| 64 { | 63 { |
| 65 ASSERT(hasTagName(SVGNames::imageTag)); | 64 ASSERT(hasTagName(SVGNames::imageTag)); |
| 66 ScriptWrappable::init(this); | 65 ScriptWrappable::init(this); |
| 67 registerAnimatedPropertiesForSVGImageElement(); | 66 registerAnimatedPropertiesForSVGImageElement(); |
| 68 } | 67 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 86 supportedAttributes.add(SVGNames::heightAttr); | 85 supportedAttributes.add(SVGNames::heightAttr); |
| 87 supportedAttributes.add(SVGNames::preserveAspectRatioAttr); | 86 supportedAttributes.add(SVGNames::preserveAspectRatioAttr); |
| 88 } | 87 } |
| 89 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); | 88 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); |
| 90 } | 89 } |
| 91 | 90 |
| 92 bool SVGImageElement::isPresentationAttribute(const QualifiedName& name) const | 91 bool SVGImageElement::isPresentationAttribute(const QualifiedName& name) const |
| 93 { | 92 { |
| 94 if (name == SVGNames::widthAttr || name == SVGNames::heightAttr) | 93 if (name == SVGNames::widthAttr || name == SVGNames::heightAttr) |
| 95 return true; | 94 return true; |
| 96 return SVGStyledTransformableElement::isPresentationAttribute(name); | 95 return SVGGraphicsElement::isPresentationAttribute(name); |
| 97 } | 96 } |
| 98 | 97 |
| 99 void SVGImageElement::collectStyleForPresentationAttribute(const QualifiedName&
name, const AtomicString& value, MutableStylePropertySet* style) | 98 void SVGImageElement::collectStyleForPresentationAttribute(const QualifiedName&
name, const AtomicString& value, MutableStylePropertySet* style) |
| 100 { | 99 { |
| 101 if (!isSupportedAttribute(name)) | 100 if (!isSupportedAttribute(name)) |
| 102 SVGStyledTransformableElement::collectStyleForPresentationAttribute(name
, value, style); | 101 SVGGraphicsElement::collectStyleForPresentationAttribute(name, value, st
yle); |
| 103 else if (name == SVGNames::widthAttr) | 102 else if (name == SVGNames::widthAttr) |
| 104 addPropertyToPresentationAttributeStyle(style, CSSPropertyWidth, value); | 103 addPropertyToPresentationAttributeStyle(style, CSSPropertyWidth, value); |
| 105 else if (name == SVGNames::heightAttr) | 104 else if (name == SVGNames::heightAttr) |
| 106 addPropertyToPresentationAttributeStyle(style, CSSPropertyHeight, value)
; | 105 addPropertyToPresentationAttributeStyle(style, CSSPropertyHeight, value)
; |
| 107 } | 106 } |
| 108 | 107 |
| 109 void SVGImageElement::parseAttribute(const QualifiedName& name, const AtomicStri
ng& value) | 108 void SVGImageElement::parseAttribute(const QualifiedName& name, const AtomicStri
ng& value) |
| 110 { | 109 { |
| 111 SVGParsingError parseError = NoError; | 110 SVGParsingError parseError = NoError; |
| 112 | 111 |
| 113 if (!isSupportedAttribute(name)) | 112 if (!isSupportedAttribute(name)) |
| 114 SVGStyledTransformableElement::parseAttribute(name, value); | 113 SVGGraphicsElement::parseAttribute(name, value); |
| 115 else if (name == SVGNames::xAttr) | 114 else if (name == SVGNames::xAttr) |
| 116 setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError)); | 115 setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError)); |
| 117 else if (name == SVGNames::yAttr) | 116 else if (name == SVGNames::yAttr) |
| 118 setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError))
; | 117 setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError))
; |
| 119 else if (name == SVGNames::preserveAspectRatioAttr) { | 118 else if (name == SVGNames::preserveAspectRatioAttr) { |
| 120 SVGPreserveAspectRatio preserveAspectRatio; | 119 SVGPreserveAspectRatio preserveAspectRatio; |
| 121 preserveAspectRatio.parse(value); | 120 preserveAspectRatio.parse(value); |
| 122 setPreserveAspectRatioBaseValue(preserveAspectRatio); | 121 setPreserveAspectRatioBaseValue(preserveAspectRatio); |
| 123 } else if (name == SVGNames::widthAttr) | 122 } else if (name == SVGNames::widthAttr) |
| 124 setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseErro
r, ForbidNegativeLengths)); | 123 setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseErro
r, ForbidNegativeLengths)); |
| 125 else if (name == SVGNames::heightAttr) | 124 else if (name == SVGNames::heightAttr) |
| 126 setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseEr
ror, ForbidNegativeLengths)); | 125 setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseEr
ror, ForbidNegativeLengths)); |
| 127 else if (SVGTests::parseAttribute(name, value) | 126 else if (SVGTests::parseAttribute(name, value) |
| 128 || SVGLangSpace::parseAttribute(name, value) | 127 || SVGLangSpace::parseAttribute(name, value) |
| 129 || SVGExternalResourcesRequired::parseAttribute(name, value) | 128 || SVGExternalResourcesRequired::parseAttribute(name, value) |
| 130 || SVGURIReference::parseAttribute(name, value)) { | 129 || SVGURIReference::parseAttribute(name, value)) { |
| 131 } else | 130 } else |
| 132 ASSERT_NOT_REACHED(); | 131 ASSERT_NOT_REACHED(); |
| 133 | 132 |
| 134 reportAttributeParsingError(parseError, name, value); | 133 reportAttributeParsingError(parseError, name, value); |
| 135 } | 134 } |
| 136 | 135 |
| 137 void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName) | 136 void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName) |
| 138 { | 137 { |
| 139 if (!isSupportedAttribute(attrName)) { | 138 if (!isSupportedAttribute(attrName)) { |
| 140 SVGStyledTransformableElement::svgAttributeChanged(attrName); | 139 SVGGraphicsElement::svgAttributeChanged(attrName); |
| 141 return; | 140 return; |
| 142 } | 141 } |
| 143 | 142 |
| 144 SVGElementInstance::InvalidationGuard invalidationGuard(this); | 143 SVGElementInstance::InvalidationGuard invalidationGuard(this); |
| 145 | 144 |
| 146 bool isLengthAttribute = attrName == SVGNames::xAttr | 145 bool isLengthAttribute = attrName == SVGNames::xAttr |
| 147 || attrName == SVGNames::yAttr | 146 || attrName == SVGNames::yAttr |
| 148 || attrName == SVGNames::widthAttr | 147 || attrName == SVGNames::widthAttr |
| 149 || attrName == SVGNames::heightAttr; | 148 || attrName == SVGNames::heightAttr; |
| 150 | 149 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 return new (document()->renderArena()) RenderSVGImage(this); | 191 return new (document()->renderArena()) RenderSVGImage(this); |
| 193 } | 192 } |
| 194 | 193 |
| 195 bool SVGImageElement::haveLoadedRequiredResources() | 194 bool SVGImageElement::haveLoadedRequiredResources() |
| 196 { | 195 { |
| 197 return !externalResourcesRequiredBaseValue() || !m_imageLoader.hasPendingAct
ivity(); | 196 return !externalResourcesRequiredBaseValue() || !m_imageLoader.hasPendingAct
ivity(); |
| 198 } | 197 } |
| 199 | 198 |
| 200 void SVGImageElement::attach(const AttachContext& context) | 199 void SVGImageElement::attach(const AttachContext& context) |
| 201 { | 200 { |
| 202 SVGStyledTransformableElement::attach(context); | 201 SVGGraphicsElement::attach(context); |
| 203 | 202 |
| 204 if (RenderSVGImage* imageObj = toRenderSVGImage(renderer())) { | 203 if (RenderSVGImage* imageObj = toRenderSVGImage(renderer())) { |
| 205 if (imageObj->imageResource()->hasImage()) | 204 if (imageObj->imageResource()->hasImage()) |
| 206 return; | 205 return; |
| 207 | 206 |
| 208 imageObj->imageResource()->setCachedImage(m_imageLoader.image()); | 207 imageObj->imageResource()->setCachedImage(m_imageLoader.image()); |
| 209 } | 208 } |
| 210 } | 209 } |
| 211 | 210 |
| 212 Node::InsertionNotificationRequest SVGImageElement::insertedInto(ContainerNode*
rootParent) | 211 Node::InsertionNotificationRequest SVGImageElement::insertedInto(ContainerNode*
rootParent) |
| 213 { | 212 { |
| 214 SVGStyledTransformableElement::insertedInto(rootParent); | 213 SVGGraphicsElement::insertedInto(rootParent); |
| 215 if (!rootParent->inDocument()) | 214 if (!rootParent->inDocument()) |
| 216 return InsertionDone; | 215 return InsertionDone; |
| 217 // Update image loader, as soon as we're living in the tree. | 216 // Update image loader, as soon as we're living in the tree. |
| 218 // We can only resolve base URIs properly, after that! | 217 // We can only resolve base URIs properly, after that! |
| 219 m_imageLoader.updateFromElement(); | 218 m_imageLoader.updateFromElement(); |
| 220 return InsertionDone; | 219 return InsertionDone; |
| 221 } | 220 } |
| 222 | 221 |
| 223 const AtomicString& SVGImageElement::imageSourceURL() const | 222 const AtomicString& SVGImageElement::imageSourceURL() const |
| 224 { | 223 { |
| 225 return getAttribute(XLinkNames::hrefAttr); | 224 return getAttribute(XLinkNames::hrefAttr); |
| 226 } | 225 } |
| 227 | 226 |
| 228 void SVGImageElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const | 227 void SVGImageElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const |
| 229 { | 228 { |
| 230 SVGStyledTransformableElement::addSubresourceAttributeURLs(urls); | 229 SVGGraphicsElement::addSubresourceAttributeURLs(urls); |
| 231 | 230 |
| 232 addSubresourceURL(urls, document()->completeURL(href())); | 231 addSubresourceURL(urls, document()->completeURL(href())); |
| 233 } | 232 } |
| 234 | 233 |
| 235 void SVGImageElement::didMoveToNewDocument(Document* oldDocument) | 234 void SVGImageElement::didMoveToNewDocument(Document* oldDocument) |
| 236 { | 235 { |
| 237 m_imageLoader.elementDidMoveToNewDocument(); | 236 m_imageLoader.elementDidMoveToNewDocument(); |
| 238 SVGStyledTransformableElement::didMoveToNewDocument(oldDocument); | 237 SVGGraphicsElement::didMoveToNewDocument(oldDocument); |
| 239 } | 238 } |
| 240 | 239 |
| 241 } | 240 } |
| OLD | NEW |