blob: 45e5b9b75df50dc58bdcb96c725d51e03f721059 [file] [log] [blame]
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +01001/*
2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21#include "config.h"
22
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010023#include "core/svg/SVGFEMergeNodeElement.h"
24
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010025#include "core/svg/SVGElementInstance.h"
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010026#include "core/svg/SVGFilterPrimitiveStandardAttributes.h"
27
28namespace WebCore {
29
30// Animated property definitions
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010031
32BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEMergeNodeElement)
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010033END_REGISTER_ANIMATED_PROPERTIES
34
Torne (Richard Coles)51b29062013-11-28 11:56:03 +000035inline SVGFEMergeNodeElement::SVGFEMergeNodeElement(Document& document)
36 : SVGElement(SVGNames::feMergeNodeTag, document)
Torne (Richard Coles)09380292014-02-21 12:17:33 +000037 , m_in1(SVGAnimatedString::create(this, SVGNames::inAttr, SVGString::create()))
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010038{
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010039 ScriptWrappable::init(this);
Torne (Richard Coles)09380292014-02-21 12:17:33 +000040 addToPropertyMap(m_in1);
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010041 registerAnimatedPropertiesForSVGFEMergeNodeElement();
42}
43
Torne (Richard Coles)51b29062013-11-28 11:56:03 +000044PassRefPtr<SVGFEMergeNodeElement> SVGFEMergeNodeElement::create(Document& document)
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010045{
Torne (Richard Coles)51b29062013-11-28 11:56:03 +000046 return adoptRef(new SVGFEMergeNodeElement(document));
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010047}
48
49bool SVGFEMergeNodeElement::isSupportedAttribute(const QualifiedName& attrName)
50{
51 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ());
52 if (supportedAttributes.isEmpty())
53 supportedAttributes.add(SVGNames::inAttr);
Ben Murdoch591b9582013-07-10 11:41:44 +010054 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName);
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010055}
56
57void SVGFEMergeNodeElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
58{
59 if (!isSupportedAttribute(name)) {
60 SVGElement::parseAttribute(name, value);
61 return;
62 }
63
Torne (Richard Coles)09380292014-02-21 12:17:33 +000064 SVGParsingError parseError = NoError;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010065
Torne (Richard Coles)09380292014-02-21 12:17:33 +000066 if (name == SVGNames::inAttr)
67 m_in1->setBaseValueAsString(value, parseError);
68 else
69 ASSERT_NOT_REACHED();
70
71 reportAttributeParsingError(parseError, name, value);
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010072}
73
74void SVGFEMergeNodeElement::svgAttributeChanged(const QualifiedName& attrName)
75{
76 if (!isSupportedAttribute(attrName)) {
77 SVGElement::svgAttributeChanged(attrName);
78 return;
79 }
80
81 SVGElementInstance::InvalidationGuard invalidationGuard(this);
82
83 if (attrName == SVGNames::inAttr) {
84 invalidateFilterPrimitiveParent(this);
85 return;
86 }
87
88 ASSERT_NOT_REACHED();
89}
90
91}