f991f3d02d95b6b7e288ed0b63d7ce09eb9266e0
[WebKit-https.git] / Source / WebCore / svg / SVGRadialGradientElement.h
1 /*
2  * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4  * Copyright (C) 2018 Apple Inc. All rights reserved.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21
22 #pragma once
23
24 #include "SVGAnimatedLength.h"
25 #include "SVGGradientElement.h"
26 #include "SVGNames.h"
27
28 namespace WebCore {
29
30 struct RadialGradientAttributes;
31
32 class SVGRadialGradientElement final : public SVGGradientElement {
33     WTF_MAKE_ISO_ALLOCATED(SVGRadialGradientElement);
34 public:
35     static Ref<SVGRadialGradientElement> create(const QualifiedName&, Document&);
36
37     bool collectGradientAttributes(RadialGradientAttributes&);
38
39     const SVGLengthValue& cx() const { return m_cx.currentValue(attributeOwnerProxy()); }
40     const SVGLengthValue& cy() const { return m_cy.currentValue(attributeOwnerProxy()); }
41     const SVGLengthValue& r() const { return m_r.currentValue(attributeOwnerProxy()); }
42     const SVGLengthValue& fx() const { return m_fx.currentValue(attributeOwnerProxy()); }
43     const SVGLengthValue& fy() const { return m_fy.currentValue(attributeOwnerProxy()); }
44     const SVGLengthValue& fr() const { return m_fr.currentValue(attributeOwnerProxy()); }
45
46     RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(attributeOwnerProxy()); }
47     RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(attributeOwnerProxy()); }
48     RefPtr<SVGAnimatedLength> rAnimated() { return m_r.animatedProperty(attributeOwnerProxy()); }
49     RefPtr<SVGAnimatedLength> fxAnimated() { return m_fx.animatedProperty(attributeOwnerProxy()); }
50     RefPtr<SVGAnimatedLength> fyAnimated() { return m_fy.animatedProperty(attributeOwnerProxy()); }
51     RefPtr<SVGAnimatedLength> frAnimated() { return m_fr.animatedProperty(attributeOwnerProxy()); }
52
53 private:
54     SVGRadialGradientElement(const QualifiedName&, Document&);
55
56     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGRadialGradientElement, SVGGradientElement>;
57     static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
58     static void registerAttributes();
59
60     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
61     void parseAttribute(const QualifiedName&, const AtomicString&) override;
62     void svgAttributeChanged(const QualifiedName&) override;
63
64     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
65
66     bool selfHasRelativeLengths() const override;
67
68     AttributeOwnerProxy m_attributeOwnerProxy { *this };
69     SVGAnimatedLengthAttribute m_cx { LengthModeWidth, "50%" };
70     SVGAnimatedLengthAttribute m_cy { LengthModeHeight, "50%" };
71     SVGAnimatedLengthAttribute m_r { LengthModeOther, "50%" };
72     SVGAnimatedLengthAttribute m_fx { LengthModeWidth };
73     SVGAnimatedLengthAttribute m_fy { LengthModeHeight };
74     SVGAnimatedLengthAttribute m_fr { LengthModeOther, "0%" };
75 };
76
77 } // namespace WebCore