Remove the SVG elements' attributes macros
[WebKit-https.git] / Source / WebCore / svg / SVGFEConvolveMatrixElement.h
1 /*
2  * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
3  * Copyright (C) 2018 Apple Inc. All rights reserved.
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 #pragma once
22
23 #include "FEConvolveMatrix.h"
24 #include "SVGAnimatedBoolean.h"
25 #include "SVGAnimatedEnumeration.h"
26 #include "SVGAnimatedInteger.h"
27 #include "SVGAnimatedNumber.h"
28 #include "SVGAnimatedNumberList.h"
29 #include "SVGFilterPrimitiveStandardAttributes.h"
30
31 namespace WebCore {
32
33 template<>
34 struct SVGPropertyTraits<EdgeModeType> {
35     static unsigned highestEnumValue() { return EDGEMODE_NONE; }
36     static EdgeModeType initialValue() { return EDGEMODE_NONE; }
37
38     static String toString(EdgeModeType type)
39     {
40         switch (type) {
41         case EDGEMODE_UNKNOWN:
42             return emptyString();
43         case EDGEMODE_DUPLICATE:
44             return "duplicate"_s;
45         case EDGEMODE_WRAP:
46             return "wrap"_s;
47         case EDGEMODE_NONE:
48             return "none"_s;
49         }
50
51         ASSERT_NOT_REACHED();
52         return emptyString();
53     }
54
55     static EdgeModeType fromString(const String& value)
56     {
57         if (value == "duplicate")
58             return EDGEMODE_DUPLICATE;
59         if (value == "wrap")
60             return EDGEMODE_WRAP;
61         if (value == "none")
62             return EDGEMODE_NONE;
63         return EDGEMODE_UNKNOWN;
64     }
65 };
66
67 class SVGFEConvolveMatrixElement final : public SVGFilterPrimitiveStandardAttributes {
68     WTF_MAKE_ISO_ALLOCATED(SVGFEConvolveMatrixElement);
69 public:
70     static Ref<SVGFEConvolveMatrixElement> create(const QualifiedName&, Document&);
71
72     void setOrder(float orderX, float orderY);
73     void setKernelUnitLength(float kernelUnitLengthX, float kernelUnitLengthY);
74
75     String in1() const { return m_in1.currentValue(attributeOwnerProxy()); }
76     int orderX() const { return m_orderX.currentValue(attributeOwnerProxy()); }
77     int orderY() const { return m_orderY.currentValue(attributeOwnerProxy()); }
78     const SVGNumberListValues& kernelMatrix() const { return m_kernelMatrix.currentValue(attributeOwnerProxy()); }
79     float divisor() const { return m_divisor.currentValue(attributeOwnerProxy()); }
80     float bias() const { return m_bias.currentValue(attributeOwnerProxy()); }
81     int targetX() const { return m_targetX.currentValue(attributeOwnerProxy()); }
82     int targetY() const { return m_targetY.currentValue(attributeOwnerProxy()); }
83     EdgeModeType edgeMode() const { return m_edgeMode.currentValue(attributeOwnerProxy()); }
84     float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(attributeOwnerProxy()); }
85     float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(attributeOwnerProxy()); }
86     bool preserveAlpha() const { return m_preserveAlpha.currentValue(attributeOwnerProxy()); }
87
88     RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); }
89     RefPtr<SVGAnimatedInteger> orderXAnimated() { return m_orderX.animatedProperty(attributeOwnerProxy()); }
90     RefPtr<SVGAnimatedInteger> orderYAnimated() { return m_orderY.animatedProperty(attributeOwnerProxy()); }
91     RefPtr<SVGAnimatedNumberList> kernelMatrixAnimated() { return m_kernelMatrix.animatedProperty(attributeOwnerProxy()); }
92     RefPtr<SVGAnimatedNumber> divisorAnimated() { return m_divisor.animatedProperty(attributeOwnerProxy()); }
93     RefPtr<SVGAnimatedNumber> biasAnimated() { return m_bias.animatedProperty(attributeOwnerProxy()); }
94     RefPtr<SVGAnimatedInteger> targetXAnimated() { return m_targetX.animatedProperty(attributeOwnerProxy()); }
95     RefPtr<SVGAnimatedInteger> targetYAnimated() { return m_targetY.animatedProperty(attributeOwnerProxy()); }
96     RefPtr<SVGAnimatedEnumeration> edgeModeAnimated() { return m_edgeMode.animatedProperty(attributeOwnerProxy()); }
97     RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); }
98     RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); }
99     RefPtr<SVGAnimatedBoolean> preserveAlphaAnimated() { return m_preserveAlpha.animatedProperty(attributeOwnerProxy()); }
100
101 private:
102     SVGFEConvolveMatrixElement(const QualifiedName&, Document&);
103
104     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEConvolveMatrixElement, SVGFilterPrimitiveStandardAttributes>;
105     static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
106     static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); }
107     static void registerAttributes();
108
109     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
110     void parseAttribute(const QualifiedName&, const AtomicString&) override;
111     void svgAttributeChanged(const QualifiedName&) override;
112
113     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
114     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override;
115
116     static const AtomicString& orderXIdentifier();
117     static const AtomicString& orderYIdentifier();
118     static const AtomicString& kernelUnitLengthXIdentifier();
119     static const AtomicString& kernelUnitLengthYIdentifier();
120
121     AttributeOwnerProxy m_attributeOwnerProxy { *this };
122     SVGAnimatedStringAttribute m_in1;
123     SVGAnimatedIntegerAttribute m_orderX;
124     SVGAnimatedIntegerAttribute m_orderY;
125     SVGAnimatedNumberListAttribute m_kernelMatrix;
126     SVGAnimatedNumberAttribute m_divisor;
127     SVGAnimatedNumberAttribute m_bias;
128     SVGAnimatedIntegerAttribute m_targetX;
129     SVGAnimatedIntegerAttribute m_targetY;
130     SVGAnimatedEnumerationAttribute<EdgeModeType> m_edgeMode { EDGEMODE_DUPLICATE };
131     SVGAnimatedNumberAttribute m_kernelUnitLengthX;
132     SVGAnimatedNumberAttribute m_kernelUnitLengthY;
133     SVGAnimatedBooleanAttribute m_preserveAlpha;
134 };
135
136 } // namespace WebCore