Finish encoding/decoding support for DisplayList::SetState
[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(); }
40     float diffuseConstant() const { return m_diffuseConstant->currentValue(); }
41     float surfaceScale() const { return m_surfaceScale->currentValue(); }
42     float kernelUnitLengthX() const { return m_kernelUnitLengthX->currentValue(); }
43     float kernelUnitLengthY() const { return m_kernelUnitLengthY->currentValue(); }
44
45     SVGAnimatedString& in1Animated() { return m_in1; }
46     SVGAnimatedNumber& diffuseConstantAnimated() { return m_diffuseConstant; }
47     SVGAnimatedNumber& surfaceScaleAnimated() { return m_surfaceScale; }
48     SVGAnimatedNumber& kernelUnitLengthXAnimated() { return m_kernelUnitLengthX; }
49     SVGAnimatedNumber& kernelUnitLengthYAnimated() { return m_kernelUnitLengthY; }
50
51 private:
52     SVGFEDiffuseLightingElement(const QualifiedName&, Document&);
53
54     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
55     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
56     
57     void parseAttribute(const QualifiedName&, const AtomString&) override;
58     void svgAttributeChanged(const QualifiedName&) override;
59
60     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
61     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
62
63     PropertyRegistry m_propertyRegistry { *this };
64     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
65     Ref<SVGAnimatedNumber> m_diffuseConstant { SVGAnimatedNumber::create(this, 1) };
66     Ref<SVGAnimatedNumber> m_surfaceScale { SVGAnimatedNumber::create(this, 1) };
67     Ref<SVGAnimatedNumber> m_kernelUnitLengthX { SVGAnimatedNumber::create(this) };
68     Ref<SVGAnimatedNumber> m_kernelUnitLengthY { SVGAnimatedNumber::create(this) };
69 };
70
71 } // namespace WebCore