Remove the SVG elements' attributes macros
[WebKit-https.git] / Source / WebCore / svg / SVGFEDisplacementMapElement.h
1 /*
2  * Copyright (C) 2006 Oliver Hunt <oliver@nerget.com>
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 "FEDisplacementMap.h"
24 #include "SVGAnimatedEnumeration.h"
25 #include "SVGAnimatedNumber.h"
26 #include "SVGFilterPrimitiveStandardAttributes.h"
27
28 namespace WebCore {
29  
30 template<>
31 struct SVGPropertyTraits<ChannelSelectorType> {
32     static unsigned highestEnumValue() { return CHANNEL_A; }
33
34     static String toString(ChannelSelectorType type)
35     {
36         switch (type) {
37         case CHANNEL_UNKNOWN:
38             return emptyString();
39         case CHANNEL_R:
40             return "R"_s;
41         case CHANNEL_G:
42             return "G"_s;
43         case CHANNEL_B:
44             return "B"_s;
45         case CHANNEL_A:
46             return "A"_s;
47         }
48
49         ASSERT_NOT_REACHED();
50         return emptyString();
51     }
52
53     static ChannelSelectorType fromString(const String& value)
54     {
55         if (value == "R")
56             return CHANNEL_R;
57         if (value == "G")
58             return CHANNEL_G;
59         if (value == "B")
60             return CHANNEL_B;
61         if (value == "A")
62             return CHANNEL_A;
63         return CHANNEL_UNKNOWN;
64     }
65 };
66
67 class SVGFEDisplacementMapElement final : public SVGFilterPrimitiveStandardAttributes {
68     WTF_MAKE_ISO_ALLOCATED(SVGFEDisplacementMapElement);
69 public:
70     static Ref<SVGFEDisplacementMapElement> create(const QualifiedName&, Document&);
71
72     static ChannelSelectorType stringToChannel(const String&);
73
74     String in1() const { return m_in1.currentValue(attributeOwnerProxy()); }
75     String in2() const { return m_in2.currentValue(attributeOwnerProxy()); }
76     ChannelSelectorType xChannelSelector() const { return m_xChannelSelector.currentValue(attributeOwnerProxy()); }
77     ChannelSelectorType yChannelSelector() const { return m_yChannelSelector.currentValue(attributeOwnerProxy()); }
78     float scale() const { return m_scale.currentValue(attributeOwnerProxy()); }
79
80     RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); }
81     RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(attributeOwnerProxy()); }
82     RefPtr<SVGAnimatedEnumeration> xChannelSelectorAnimated() { return m_xChannelSelector.animatedProperty(attributeOwnerProxy()); }
83     RefPtr<SVGAnimatedEnumeration> yChannelSelectorAnimated() { return m_yChannelSelector.animatedProperty(attributeOwnerProxy()); }
84     RefPtr<SVGAnimatedNumber> scaleAnimated() { return m_scale.animatedProperty(attributeOwnerProxy()); }
85
86 private:
87     SVGFEDisplacementMapElement(const QualifiedName& tagName, Document&);
88
89     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDisplacementMapElement, SVGFilterPrimitiveStandardAttributes>;
90     static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
91     static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); }
92     static void registerAttributes();
93
94     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
95     void parseAttribute(const QualifiedName&, const AtomicString&) override;
96     void svgAttributeChanged(const QualifiedName&) override;
97
98     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
99     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override;
100
101     AttributeOwnerProxy m_attributeOwnerProxy { *this };
102     SVGAnimatedStringAttribute m_in1;
103     SVGAnimatedStringAttribute m_in2;
104     SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_xChannelSelector { CHANNEL_A };
105     SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_yChannelSelector { CHANNEL_A };
106     SVGAnimatedNumberAttribute m_scale;
107 };
108
109 } // namespace WebCore