| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 SVGNumberList newList; | 101 SVGNumberList newList; |
| 102 newList.parse(attr->value()); | 102 newList.parse(attr->value()); |
| 103 detachAnimatedRotateListWrappers(newList.size()); | 103 detachAnimatedRotateListWrappers(newList.size()); |
| 104 setRotateBaseValue(newList); | 104 setRotateBaseValue(newList); |
| 105 return; | 105 return; |
| 106 } | 106 } |
| 107 | 107 |
| 108 ASSERT_NOT_REACHED(); | 108 ASSERT_NOT_REACHED(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 static inline void updatePositioningValuesInRenderer(RenderObject* renderer) | |
| 112 { | |
| 113 RenderSVGText* textRenderer = 0; | |
| 114 | |
| 115 if (renderer->isSVGText()) | |
| 116 textRenderer = toRenderSVGText(renderer); | |
| 117 else { | |
| 118 // Locate RenderSVGText parent renderer. | |
| 119 RenderObject* parent = renderer->parent(); | |
| 120 while (parent && !parent->isSVGText()) | |
| 121 parent = parent->parent(); | |
| 122 | |
| 123 if (parent) { | |
| 124 ASSERT(parent->isSVGText()); | |
| 125 textRenderer = toRenderSVGText(parent); | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 if (!textRenderer) | |
| 130 return; | |
| 131 | |
| 132 textRenderer->setNeedsPositioningValuesUpdate(); | |
| 133 } | |
| 134 | |
| 135 void SVGTextPositioningElement::svgAttributeChanged(const QualifiedName& attrNam
e) | 111 void SVGTextPositioningElement::svgAttributeChanged(const QualifiedName& attrNam
e) |
| 136 { | 112 { |
| 137 if (!isSupportedAttribute(attrName)) { | 113 if (!isSupportedAttribute(attrName)) { |
| 138 SVGTextContentElement::svgAttributeChanged(attrName); | 114 SVGTextContentElement::svgAttributeChanged(attrName); |
| 139 return; | 115 return; |
| 140 } | 116 } |
| 141 | 117 |
| 142 SVGElementInstance::InvalidationGuard invalidationGuard(this); | 118 SVGElementInstance::InvalidationGuard invalidationGuard(this); |
| 143 | 119 |
| 144 bool updateRelativeLengths = attrName == SVGNames::xAttr | 120 bool updateRelativeLengths = attrName == SVGNames::xAttr |
| 145 || attrName == SVGNames::yAttr | 121 || attrName == SVGNames::yAttr |
| 146 || attrName == SVGNames::dxAttr | 122 || attrName == SVGNames::dxAttr |
| 147 || attrName == SVGNames::dyAttr; | 123 || attrName == SVGNames::dyAttr; |
| 148 | 124 |
| 149 if (updateRelativeLengths) | 125 if (updateRelativeLengths) |
| 150 updateRelativeLengthsInformation(); | 126 updateRelativeLengthsInformation(); |
| 151 | 127 |
| 152 RenderObject* renderer = this->renderer(); | 128 RenderObject* renderer = this->renderer(); |
| 153 if (!renderer) | 129 if (!renderer) |
| 154 return; | 130 return; |
| 155 | 131 |
| 156 if (updateRelativeLengths || attrName == SVGNames::rotateAttr) { | 132 if (updateRelativeLengths || attrName == SVGNames::rotateAttr) { |
| 157 updatePositioningValuesInRenderer(renderer); | 133 if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAnce
stor(renderer)) |
| 134 textRenderer->setNeedsPositioningValuesUpdate(); |
| 158 RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer); | 135 RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer); |
| 159 return; | 136 return; |
| 160 } | 137 } |
| 161 | 138 |
| 162 ASSERT_NOT_REACHED(); | 139 ASSERT_NOT_REACHED(); |
| 163 } | 140 } |
| 164 | 141 |
| 165 void SVGTextPositioningElement::childrenChanged(bool changedByParser, Node* befo
reChange, Node* afterChange, int childCountDelta) | |
| 166 { | |
| 167 SVGTextContentElement::childrenChanged(changedByParser, beforeChange, afterC
hange, childCountDelta); | |
| 168 | |
| 169 if (changedByParser) | |
| 170 return; | |
| 171 | |
| 172 if (RenderObject* object = renderer()) | |
| 173 updatePositioningValuesInRenderer(object); | |
| 174 } | |
| 175 | |
| 176 void SVGTextPositioningElement::synchronizeProperty(const QualifiedName& attrNam
e) | 142 void SVGTextPositioningElement::synchronizeProperty(const QualifiedName& attrNam
e) |
| 177 { | 143 { |
| 178 if (attrName == anyQName()) { | 144 if (attrName == anyQName()) { |
| 179 synchronizeX(); | 145 synchronizeX(); |
| 180 synchronizeY(); | 146 synchronizeY(); |
| 181 synchronizeDx(); | 147 synchronizeDx(); |
| 182 synchronizeDy(); | 148 synchronizeDy(); |
| 183 synchronizeRotate(); | 149 synchronizeRotate(); |
| 184 SVGTextContentElement::synchronizeProperty(attrName); | 150 SVGTextContentElement::synchronizeProperty(attrName); |
| 185 return; | 151 return; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 #endif | 214 #endif |
| 249 && !node->hasTagName(SVGNames::trefTag)) | 215 && !node->hasTagName(SVGNames::trefTag)) |
| 250 return 0; | 216 return 0; |
| 251 | 217 |
| 252 return static_cast<SVGTextPositioningElement*>(node); | 218 return static_cast<SVGTextPositioningElement*>(node); |
| 253 } | 219 } |
| 254 | 220 |
| 255 } | 221 } |
| 256 | 222 |
| 257 #endif // ENABLE(SVG) | 223 #endif // ENABLE(SVG) |
| OLD | NEW |