Define the type of SVGPropertyOwnerRegistry for all SVG elements
[WebKit-https.git] / Source / WebCore / svg / SVGFESpecularLightingElement.h
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) 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 "FESpecularLighting.h"
26 #include "SVGAnimatedNumber.h"
27 #include "SVGFELightElement.h"
28 #include "SVGFilterPrimitiveStandardAttributes.h"
29
30 namespace WebCore {
31
32 class SVGFESpecularLightingElement final : public SVGFilterPrimitiveStandardAttributes {
33     WTF_MAKE_ISO_ALLOCATED(SVGFESpecularLightingElement);
34 public:
35     static Ref<SVGFESpecularLightingElement> create(const QualifiedName&, Document&);
36     void lightElementAttributeChanged(const SVGFELightElement*, const QualifiedName&);
37
38     String in1() const { return m_in1.currentValue(attributeOwnerProxy()); }
39     float specularConstant() const  { return m_specularConstant.currentValue(attributeOwnerProxy()); }
40     float specularExponent() const { return m_specularExponent.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> specularConstantAnimated() { return m_specularConstant.animatedProperty(attributeOwnerProxy()); }
47     RefPtr<SVGAnimatedNumber> specularExponentAnimated() { return m_specularExponent.animatedProperty(attributeOwnerProxy()); }
48     RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(attributeOwnerProxy()); }
49     RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); }
50     RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); }
51
52 private:
53     SVGFESpecularLightingElement(const QualifiedName&, Document&);
54
55     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
56     static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
57     static void registerAttributes();
58     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
59
60     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
61     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
62
63     static bool isKnownAttribute(const QualifiedName& attributeName)
64     {
65         return AttributeOwnerProxy::isKnownAttribute(attributeName) || PropertyRegistry::isKnownAttribute(attributeName);
66     }
67
68     void parseAttribute(const QualifiedName&, const AtomicString&) override;
69     void svgAttributeChanged(const QualifiedName&) override;
70
71     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
72     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override;
73
74     static const AtomicString& kernelUnitLengthXIdentifier();
75     static const AtomicString& kernelUnitLengthYIdentifier();
76
77     AttributeOwnerProxy m_attributeOwnerProxy { *this };
78     PropertyRegistry m_propertyRegistry { *this };
79     SVGAnimatedStringAttribute m_in1;
80     SVGAnimatedNumberAttribute m_specularConstant { 1 };
81     SVGAnimatedNumberAttribute m_specularExponent { 1 };
82     SVGAnimatedNumberAttribute m_surfaceScale { 1 };
83     SVGAnimatedNumberAttribute m_kernelUnitLengthX;
84     SVGAnimatedNumberAttribute m_kernelUnitLengthY;
85 };
86
87 } // namespace WebCore