1/* 2 * Copyright (C) 2011 Leo Yang <leoyang@webkit.org> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#include "config.h" 21 22#if ENABLE(SVG_FONTS) 23#include "core/svg/SVGGlyphRefElement.h" 24 25#include "XLinkNames.h" 26#include "core/svg/SVGParserUtilities.h" 27#include "wtf/text/AtomicString.h" 28 29namespace WebCore { 30 31// Animated property definitions 32DEFINE_ANIMATED_STRING(SVGGlyphRefElement, XLinkNames::hrefAttr, Href, href) 33 34BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGGlyphRefElement) 35 REGISTER_LOCAL_ANIMATED_PROPERTY(href) 36 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGElement) 37END_REGISTER_ANIMATED_PROPERTIES 38 39inline SVGGlyphRefElement::SVGGlyphRefElement(Document& document) 40 : SVGElement(SVGNames::glyphRefTag, document) 41 , m_x(0) 42 , m_y(0) 43 , m_dx(0) 44 , m_dy(0) 45{ 46 ScriptWrappable::init(this); 47 registerAnimatedPropertiesForSVGGlyphRefElement(); 48} 49 50PassRefPtr<SVGGlyphRefElement> SVGGlyphRefElement::create(Document& document) 51{ 52 return adoptRef(new SVGGlyphRefElement(document)); 53} 54 55bool SVGGlyphRefElement::hasValidGlyphElement(String& glyphName) const 56{ 57 // FIXME: We only support xlink:href so far. 58 // https://bugs.webkit.org/show_bug.cgi?id=64787 59 Element* element = targetElementFromIRIString(getAttribute(XLinkNames::hrefAttr), document(), &glyphName); 60 if (!element || !element->hasTagName(SVGNames::glyphTag)) 61 return false; 62 return true; 63} 64 65template<typename CharType> 66void SVGGlyphRefElement::parseAttributeInternal(const QualifiedName& name, const AtomicString& value) 67{ 68 const CharType* ptr = value.isEmpty() ? 0 : value.string().getCharacters<CharType>(); 69 const CharType* end = ptr + value.length(); 70 71 // FIXME: We need some error handling here. 72 if (name == SVGNames::xAttr) { 73 parseNumber(ptr, end, m_x); 74 } else if (name == SVGNames::yAttr) { 75 parseNumber(ptr, end, m_y); 76 } else if (name == SVGNames::dxAttr) { 77 parseNumber(ptr, end, m_dx); 78 } else if (name == SVGNames::dyAttr) { 79 parseNumber(ptr, end, m_dy); 80 } else { 81 if (SVGURIReference::parseAttribute(name, value)) 82 return; 83 SVGElement::parseAttribute(name, value); 84 } 85} 86 87void SVGGlyphRefElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 88{ 89 if (value.isEmpty() || value.is8Bit()) 90 parseAttributeInternal<LChar>(name, value); 91 else 92 parseAttributeInternal<UChar>(name, value); 93} 94 95const AtomicString& SVGGlyphRefElement::glyphRef() const 96{ 97 return fastGetAttribute(SVGNames::glyphRefAttr); 98} 99 100void SVGGlyphRefElement::setGlyphRef(const AtomicString&) 101{ 102 // FIXME: Set and honor attribute change. 103 // https://bugs.webkit.org/show_bug.cgi?id=64787 104} 105 106void SVGGlyphRefElement::setX(float x) 107{ 108 // FIXME: Honor attribute change. 109 // https://bugs.webkit.org/show_bug.cgi?id=64787 110 m_x = x; 111} 112 113void SVGGlyphRefElement::setY(float y) 114{ 115 // FIXME: Honor attribute change. 116 // https://bugs.webkit.org/show_bug.cgi?id=64787 117 m_y = y; 118} 119 120void SVGGlyphRefElement::setDx(float dx) 121{ 122 // FIXME: Honor attribute change. 123 // https://bugs.webkit.org/show_bug.cgi?id=64787 124 m_dx = dx; 125} 126 127void SVGGlyphRefElement::setDy(float dy) 128{ 129 // FIXME: Honor attribute change. 130 // https://bugs.webkit.org/show_bug.cgi?id=64787 131 m_dy = dy; 132} 133 134} 135 136#endif 137