File indexing completed on 2024-04-28 15:24:33

0001 /*
0002    Copyright (C) 2007 Eric Seidel <eric@webkit.org>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018  */
0019 
0020 #if ENABLE(SVG_FONTS)
0021 #include "SVGFontFaceUriElement.h"
0022 
0023 #include "CSSFontFaceSrcValue.h"
0024 #include "SVGFontFaceElement.h"
0025 #include "SVGNames.h"
0026 #include "XLinkNames.h"
0027 
0028 namespace WebCore
0029 {
0030 
0031 using namespace SVGNames;
0032 
0033 SVGFontFaceUriElement::SVGFontFaceUriElement(const QualifiedName &tagName, Document *doc)
0034     : SVGElement(tagName, doc)
0035 {
0036 }
0037 
0038 PassRefPtr<CSSFontFaceSrcValue> SVGFontFaceUriElement::srcValue() const
0039 {
0040     RefPtr<CSSFontFaceSrcValue> src = new CSSFontFaceSrcValue(getAttribute(XLinkNames::hrefAttr), false);
0041     AtomicString value(getAttribute(formatAttr));
0042     src->setFormat(value.isEmpty() ? "svg" : value); // Default format
0043     return src.release();
0044 }
0045 
0046 void SVGFontFaceUriElement::childrenChanged(bool changedByParser, Node *beforeChange, Node *afterChange, int childCountDelta)
0047 {
0048     SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
0049 
0050     if (!parentNode() || !parentNode()->hasTagName(font_face_srcTag)) {
0051         return;
0052     }
0053 
0054     Node *grandParent = parentNode()->parentNode();
0055     if (grandParent && grandParent->hasTagName(font_faceTag)) {
0056         static_cast<SVGFontFaceElement *>(grandParent)->rebuildFontFace();
0057     }
0058 }
0059 
0060 }
0061 
0062 #endif // ENABLE(SVG_FONTS)