Define the type of SVGPropertyOwnerRegistry for all SVG elements
[WebKit-https.git] / Source / WebCore / svg / SVGFEDiffuseLightingElement.h
1 /*
2  * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
4  * Copyright (C) 2005 Oliver Hunt <oliver@nerget.com>
5  * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #pragma once
24
25 #include "SVGFELightElement.h"
26 #include "SVGFilterPrimitiveStandardAttributes.h"
27
28 namespace WebCore {
29
30 class FEDiffuseLighting;
31 class SVGColor;
32
33 class SVGFEDiffuseLightingElement final : public SVGFilterPrimitiveStandardAttributes {
34     WTF_MAKE_ISO_ALLOCATED(SVGFEDiffuseLightingElement);
35 public:
36     static Ref<SVGFEDiffuseLightingElement> create(const QualifiedName&, Document&);
37     void lightElementAttributeChanged(const SVGFELightElement*, const QualifiedName&);
38
39     String in1() const { return m_in1.currentValue(attributeOwnerProxy()); }
40     float diffuseConstant() const { return m_diffuseConstant.currentValue(attributeOwnerProxy()); }
41     float surfaceScale() const { return m_surfaceScale.currentValue(attributeOwnerProxy()); }
42     float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(attributeOwnerProxy()); }
43     float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(attributeOwnerProxy()); }
44
45     RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); }
46     RefPtr<SVGAnimatedNumber> diffuseConstantAnimated() { return m_diffuseConstant.animatedProperty(attributeOwnerProxy()); }
47     RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(attributeOwnerProxy()); }
48     RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); }
49     RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); }
50
51 private:
52     SVGFEDiffuseLightingElement(const QualifiedName&, Document&);
53
54     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
55     static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
56     static void registerAttributes();
57     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
58
59     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
60     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
61     
62     static bool isKnownAttribute(const QualifiedName& attributeName)
63     {
64         return AttributeOwnerProxy::isKnownAttribute(attributeName) || PropertyRegistry::isKnownAttribute(attributeName);
65     }
66
67     void parseAttribute(const QualifiedName&, const AtomicString&) override;
68     void svgAttributeChanged(const QualifiedName&) override;
69
70     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
71     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override;
72
73     static const AtomicString& kernelUnitLengthXIdentifier();
74     static const AtomicString& kernelUnitLengthYIdentifier();
75
76     AttributeOwnerProxy m_attributeOwnerProxy { *this };
77     PropertyRegistry m_propertyRegistry { *this };
78     SVGAnimatedStringAttribute m_in1;
79     SVGAnimatedNumberAttribute m_diffuseConstant { 1 };
80     SVGAnimatedNumberAttribute m_surfaceScale { 1 };
81     SVGAnimatedNumberAttribute m_kernelUnitLengthX;
82     SVGAnimatedNumberAttribute m_kernelUnitLengthY;
83 };
84
85 } // namespace WebCore