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 * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 5 * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
6 * Copyright (C) 2012 University of Szeged | 6 * Copyright (C) 2012 University of Szeged |
7 * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> | 7 * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 // Gracefully handle error condition. | 144 // Gracefully handle error condition. |
145 if (!resourceIsValid()) | 145 if (!resourceIsValid()) |
146 return nullptr; | 146 return nullptr; |
147 ASSERT(m_resource->document()); | 147 ASSERT(m_resource->document()); |
148 return m_resource->document(); | 148 return m_resource->document(); |
149 } | 149 } |
150 | 150 |
151 static void transferUseWidthAndHeightIfNeeded(const SVGUseElement& use, SVGEleme
nt& shadowElement, const SVGElement& originalElement) | 151 static void transferUseWidthAndHeightIfNeeded(const SVGUseElement& use, SVGEleme
nt& shadowElement, const SVGElement& originalElement) |
152 { | 152 { |
153 DEFINE_STATIC_LOCAL(const AtomicString, hundredPercentString, ("100%", Atomi
cString::ConstructFromLiteral)); | 153 DEFINE_STATIC_LOCAL(const AtomicString, hundredPercentString, ("100%", Atomi
cString::ConstructFromLiteral)); |
154 if (isSVGSymbolElement(shadowElement)) { | 154 // Use |originalElement| for checking the element type, because we will |
155 // Spec (<use> on <symbol>): This generated 'svg' will always have expli
cit values for attributes width and height. | 155 // have replaced a <symbol> with an <svg> in the instance tree. |
156 // If attributes width and/or height are provided on the 'use' element,
then these attributes | 156 if (isSVGSymbolElement(originalElement)) { |
157 // will be transferred to the generated 'svg'. If attributes width and/o
r height are not specified, | 157 // Spec (<use> on <symbol>): This generated 'svg' will always have |
158 // the generated 'svg' element will use values of 100% for these attribu
tes. | 158 // explicit values for attributes width and height. If attributes |
159 shadowElement.setAttribute(SVGNames::widthAttr, use.width()->isSpecified
() ? AtomicString(use.width()->currentValue()->valueAsString()) : hundredPercent
String); | 159 // width and/or height are provided on the 'use' element, then these |
160 shadowElement.setAttribute(SVGNames::heightAttr, use.height()->isSpecifi
ed() ? AtomicString(use.height()->currentValue()->valueAsString()) : hundredPerc
entString); | 160 // attributes will be transferred to the generated 'svg'. If attributes |
161 } else if (isSVGSVGElement(shadowElement)) { | 161 // width and/or height are not specified, the generated 'svg' element |
162 // Spec (<use> on <svg>): If attributes width and/or height are provided
on the 'use' element, then these | 162 // will use values of 100% for these attributes. |
163 // values will override the corresponding attributes on the 'svg' in the
generated tree. | 163 shadowElement.setAttribute(SVGNames::widthAttr, |
164 if (use.width()->isSpecified()) | 164 use.width()->isSpecified() ? AtomicString(use.width()->currentValue(
)->valueAsString()) : hundredPercentString); |
165 shadowElement.setAttribute(SVGNames::widthAttr, AtomicString(use.wid
th()->currentValue()->valueAsString())); | 165 shadowElement.setAttribute(SVGNames::heightAttr, |
166 else | 166 use.height()->isSpecified() ? AtomicString(use.height()->currentValu
e()->valueAsString()) : hundredPercentString); |
167 shadowElement.setAttribute(SVGNames::widthAttr, originalElement.getA
ttribute(SVGNames::widthAttr)); | 167 } else if (isSVGSVGElement(originalElement)) { |
168 if (use.height()->isSpecified()) | 168 // Spec (<use> on <svg>): If attributes width and/or height are |
169 shadowElement.setAttribute(SVGNames::heightAttr, AtomicString(use.he
ight()->currentValue()->valueAsString())); | 169 // provided on the 'use' element, then these values will override the |
170 else | 170 // corresponding attributes on the 'svg' in the generated tree. |
171 shadowElement.setAttribute(SVGNames::heightAttr, originalElement.get
Attribute(SVGNames::heightAttr)); | 171 shadowElement.setAttribute(SVGNames::widthAttr, |
| 172 use.width()->isSpecified() ? AtomicString(use.width()->currentValue(
)->valueAsString()) : originalElement.getAttribute(SVGNames::widthAttr)); |
| 173 shadowElement.setAttribute(SVGNames::heightAttr, |
| 174 use.height()->isSpecified() ? AtomicString(use.height()->currentValu
e()->valueAsString()) : originalElement.getAttribute(SVGNames::heightAttr)); |
172 } | 175 } |
173 } | 176 } |
174 | 177 |
175 bool SVGUseElement::isPresentationAttribute(const QualifiedName& attrName) const | 178 bool SVGUseElement::isPresentationAttribute(const QualifiedName& attrName) const |
176 { | 179 { |
177 if (attrName == SVGNames::xAttr || attrName == SVGNames::yAttr) | 180 if (attrName == SVGNames::xAttr || attrName == SVGNames::yAttr) |
178 return true; | 181 return true; |
179 return SVGGraphicsElement::isPresentationAttribute(attrName); | 182 return SVGGraphicsElement::isPresentationAttribute(attrName); |
180 } | 183 } |
181 | 184 |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 | 767 |
765 if (m_resource) | 768 if (m_resource) |
766 m_resource->removeClient(this); | 769 m_resource->removeClient(this); |
767 | 770 |
768 m_resource = resource; | 771 m_resource = resource; |
769 if (m_resource) | 772 if (m_resource) |
770 m_resource->addClient(this); | 773 m_resource->addClient(this); |
771 } | 774 } |
772 | 775 |
773 } // namespace blink | 776 } // namespace blink |
OLD | NEW |