Remove the SVG elements' attributes macros
[WebKit-https.git] / Source / WebCore / svg / SVGComponentTransferFunctionElement.cpp
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) 2018 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 #include "SVGComponentTransferFunctionElement.h"
24
25 #include "SVGFEComponentTransferElement.h"
26 #include "SVGNames.h"
27 #include "SVGNumberListValues.h"
28 #include <wtf/IsoMallocInlines.h>
29 #include <wtf/NeverDestroyed.h>
30
31 namespace WebCore {
32
33 WTF_MAKE_ISO_ALLOCATED_IMPL(SVGComponentTransferFunctionElement);
34
35 SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement(const QualifiedName& tagName, Document& document)
36     : SVGElement(tagName, document)
37 {
38     registerAttributes();
39 }
40
41 void SVGComponentTransferFunctionElement::registerAttributes()
42 {
43     auto& registry = attributeRegistry();
44     if (!registry.isEmpty())
45         return;
46     registry.registerAttribute<SVGNames::typeAttr, ComponentTransferType, &SVGComponentTransferFunctionElement::m_type>();
47     registry.registerAttribute<SVGNames::tableValuesAttr, &SVGComponentTransferFunctionElement::m_tableValues>();
48     registry.registerAttribute<SVGNames::slopeAttr, &SVGComponentTransferFunctionElement::m_slope>();
49     registry.registerAttribute<SVGNames::interceptAttr, &SVGComponentTransferFunctionElement::m_intercept>();
50     registry.registerAttribute<SVGNames::amplitudeAttr, &SVGComponentTransferFunctionElement::m_amplitude>();
51     registry.registerAttribute<SVGNames::exponentAttr, &SVGComponentTransferFunctionElement::m_exponent>();
52     registry.registerAttribute<SVGNames::offsetAttr, &SVGComponentTransferFunctionElement::m_offset>();
53 }
54
55 void SVGComponentTransferFunctionElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
56 {
57     if (name == SVGNames::typeAttr) {
58         ComponentTransferType propertyValue = SVGPropertyTraits<ComponentTransferType>::fromString(value);
59         if (propertyValue > 0)
60             m_type.setValue(propertyValue);
61         return;
62     }
63
64     if (name == SVGNames::tableValuesAttr) {
65         SVGNumberListValues newList;
66         newList.parse(value);
67         m_tableValues.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size());
68         m_tableValues.setValue(WTFMove(newList));
69         return;
70     }
71
72     if (name == SVGNames::slopeAttr) {
73         m_slope.setValue(value.toFloat());
74         return;
75     }
76
77     if (name == SVGNames::interceptAttr) {
78         m_intercept.setValue(value.toFloat());
79         return;
80     }
81
82     if (name == SVGNames::amplitudeAttr) {
83         m_amplitude.setValue(value.toFloat());
84         return;
85     }
86
87     if (name == SVGNames::exponentAttr) {
88         m_exponent.setValue(value.toFloat());
89         return;
90     }
91
92     if (name == SVGNames::offsetAttr) {
93         m_offset.setValue(value.toFloat());
94         return;
95     }
96
97     SVGElement::parseAttribute(name, value);
98 }
99
100 void SVGComponentTransferFunctionElement::svgAttributeChanged(const QualifiedName& attrName)
101 {
102     if (isKnownAttribute(attrName)) {
103         InstanceInvalidationGuard guard(*this);
104         invalidateFilterPrimitiveParent(this);
105         return;
106     }
107
108     SVGElement::svgAttributeChanged(attrName);
109 }
110
111 ComponentTransferFunction SVGComponentTransferFunctionElement::transferFunction() const
112 {
113     return {
114         type(),
115         slope(),
116         intercept(),
117         amplitude(),
118         exponent(),
119         offset(),
120         tableValues()
121     };
122 }
123
124 }