• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4  * Copyright (C) 2008 Apple Inc. All rights reserved.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21 
22 #include "config.h"
23 
24 #if ENABLE(SVG_FONTS)
25 #include "SVGAltGlyphElement.h"
26 
27 #include "ExceptionCode.h"
28 #include "RenderInline.h"
29 #include "RenderSVGTSpan.h"
30 #include "SVGGlyphElement.h"
31 #include "SVGNames.h"
32 #include "XLinkNames.h"
33 
34 namespace WebCore {
35 
36 // Animated property declarations
DEFINE_ANIMATED_STRING(SVGAltGlyphElement,XLinkNames::hrefAttr,Href,href)37 DEFINE_ANIMATED_STRING(SVGAltGlyphElement, XLinkNames::hrefAttr, Href, href)
38 
39 inline SVGAltGlyphElement::SVGAltGlyphElement(const QualifiedName& tagName, Document* document)
40     : SVGTextPositioningElement(tagName, document)
41 {
42 }
43 
create(const QualifiedName & tagName,Document * document)44 PassRefPtr<SVGAltGlyphElement> SVGAltGlyphElement::create(const QualifiedName& tagName, Document* document)
45 {
46     return adoptRef(new SVGAltGlyphElement(tagName, document));
47 }
48 
synchronizeProperty(const QualifiedName & attrName)49 void SVGAltGlyphElement::synchronizeProperty(const QualifiedName& attrName)
50 {
51     SVGTextPositioningElement::synchronizeProperty(attrName);
52 
53     if (attrName == anyQName() || SVGURIReference::isKnownAttribute(attrName))
54         synchronizeHref();
55 }
56 
attributeToPropertyTypeMap()57 AttributeToPropertyTypeMap& SVGAltGlyphElement::attributeToPropertyTypeMap()
58 {
59     DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
60     return s_attributeToPropertyTypeMap;
61 }
62 
fillAttributeToPropertyTypeMap()63 void SVGAltGlyphElement::fillAttributeToPropertyTypeMap()
64 {
65     AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
66 
67     SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
68     attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
69 }
70 
setGlyphRef(const AtomicString &,ExceptionCode & ec)71 void SVGAltGlyphElement::setGlyphRef(const AtomicString&, ExceptionCode& ec)
72 {
73     ec = NO_MODIFICATION_ALLOWED_ERR;
74 }
75 
glyphRef() const76 const AtomicString& SVGAltGlyphElement::glyphRef() const
77 {
78     return getAttribute(SVGNames::glyphRefAttr);
79 }
80 
setFormat(const AtomicString &,ExceptionCode & ec)81 void SVGAltGlyphElement::setFormat(const AtomicString&, ExceptionCode& ec)
82 {
83     ec = NO_MODIFICATION_ALLOWED_ERR;
84 }
85 
format() const86 const AtomicString& SVGAltGlyphElement::format() const
87 {
88     return getAttribute(SVGNames::formatAttr);
89 }
90 
childShouldCreateRenderer(Node * child) const91 bool SVGAltGlyphElement::childShouldCreateRenderer(Node* child) const
92 {
93     if (child->isTextNode())
94         return true;
95     return false;
96 }
97 
createRenderer(RenderArena * arena,RenderStyle *)98 RenderObject* SVGAltGlyphElement::createRenderer(RenderArena* arena, RenderStyle*)
99 {
100     return new (arena) RenderSVGTSpan(this);
101 }
102 
glyphElement() const103 SVGGlyphElement* SVGAltGlyphElement::glyphElement() const
104 {
105     Element* elt = document()->getElementById(getTarget(getAttribute(XLinkNames::hrefAttr)));
106     if (!elt || !elt->hasTagName(SVGNames::glyphTag))
107         return 0;
108     return static_cast<SVGGlyphElement*>(elt);
109 }
110 
111 }
112 
113 #endif // ENABLE(SVG)
114 
115 // vim:ts=4:noet
116