18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or
5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public
6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either
7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version.
8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful,
10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details.
13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License
15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS)
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontFaceSrcElement.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSFontFaceSrcValue.h"
26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "CSSValueList.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontFaceElement.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontFaceNameElement.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontFaceUriElement.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGNames.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace SVGNames;
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monseninline SVGFontFaceSrcElement::SVGFontFaceSrcElement(const QualifiedName& tagName, Document* document)
375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    : SVGElement(tagName, document)
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenPassRefPtr<SVGFontFaceSrcElement> SVGFontFaceSrcElement::create(const QualifiedName& tagName, Document* document)
425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{
435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    return adoptRef(new SVGFontFaceSrcElement(tagName, document));
445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen}
455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<CSSValueList> SVGFontFaceSrcElement::srcValue() const
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (Node* child = firstChild(); child; child = child->nextSibling()) {
50e14391e94c850b8bd03680c23b38978db68687a8John Reck        RefPtr<CSSFontFaceSrcValue> srcValue;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (child->hasTagName(font_face_uriTag))
52e14391e94c850b8bd03680c23b38978db68687a8John Reck            srcValue = static_cast<SVGFontFaceUriElement*>(child)->srcValue();
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else if (child->hasTagName(font_face_nameTag))
54e14391e94c850b8bd03680c23b38978db68687a8John Reck            srcValue = static_cast<SVGFontFaceNameElement*>(child)->srcValue();
55e14391e94c850b8bd03680c23b38978db68687a8John Reck        if (srcValue && srcValue->resource().length())
56e14391e94c850b8bd03680c23b38978db68687a8John Reck            list->append(srcValue);
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return list;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid SVGFontFaceSrcElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (parentNode() && parentNode()->hasTagName(font_faceTag))
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static_cast<SVGFontFaceElement*>(parentNode())->rebuildFontFace();
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG_FONTS)
71