Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef __NS_SVGGRADIENTELEMENT_H__
8 : #define __NS_SVGGRADIENTELEMENT_H__
9 :
10 : #include "nsAutoPtr.h"
11 : #include "nsSVGAnimatedTransformList.h"
12 : #include "nsSVGElement.h"
13 : #include "nsSVGLength2.h"
14 : #include "nsSVGEnum.h"
15 : #include "nsSVGString.h"
16 :
17 : static const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
18 : static const unsigned short SVG_SPREADMETHOD_PAD = 1;
19 : static const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
20 : static const unsigned short SVG_SPREADMETHOD_REPEAT = 3;
21 :
22 : class nsSVGGradientFrame;
23 : class nsSVGLinearGradientFrame;
24 : class nsSVGRadialGradientFrame;
25 :
26 : nsresult
27 : NS_NewSVGLinearGradientElement(nsIContent** aResult,
28 : already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
29 : nsresult
30 : NS_NewSVGRadialGradientElement(nsIContent** aResult,
31 : already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
32 :
33 : namespace mozilla {
34 : namespace dom {
35 :
36 : class SVGAnimatedTransformList;
37 :
38 : //--------------------- Gradients------------------------
39 :
40 : typedef nsSVGElement SVGGradientElementBase;
41 :
42 0 : class SVGGradientElement : public SVGGradientElementBase
43 : {
44 : friend class ::nsSVGGradientFrame;
45 :
46 : protected:
47 : explicit SVGGradientElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
48 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override = 0;
49 :
50 : public:
51 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
52 : bool aPreallocateChildren) const override = 0;
53 :
54 : // nsIContent
55 : NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const override;
56 :
57 : virtual nsSVGAnimatedTransformList*
58 : GetAnimatedTransformList(uint32_t aFlags = 0) override;
59 0 : virtual nsIAtom* GetTransformListAttrName() const override {
60 0 : return nsGkAtoms::gradientTransform;
61 : }
62 :
63 : // WebIDL
64 : already_AddRefed<SVGAnimatedEnumeration> GradientUnits();
65 : already_AddRefed<SVGAnimatedTransformList> GradientTransform();
66 : already_AddRefed<SVGAnimatedEnumeration> SpreadMethod();
67 : already_AddRefed<SVGAnimatedString> Href();
68 :
69 : protected:
70 : virtual EnumAttributesInfo GetEnumInfo() override;
71 : virtual StringAttributesInfo GetStringInfo() override;
72 :
73 : enum { GRADIENTUNITS, SPREADMETHOD };
74 : nsSVGEnum mEnumAttributes[2];
75 : static nsSVGEnumMapping sSpreadMethodMap[];
76 : static EnumInfo sEnumInfo[2];
77 :
78 : enum { HREF, XLINK_HREF };
79 : nsSVGString mStringAttributes[2];
80 : static StringInfo sStringInfo[2];
81 :
82 : // SVGGradientElement values
83 : nsAutoPtr<nsSVGAnimatedTransformList> mGradientTransform;
84 : };
85 :
86 : //---------------------Linear Gradients------------------------
87 :
88 : typedef SVGGradientElement SVGLinearGradientElementBase;
89 :
90 0 : class SVGLinearGradientElement : public SVGLinearGradientElementBase
91 : {
92 : friend class ::nsSVGLinearGradientFrame;
93 : friend nsresult
94 : (::NS_NewSVGLinearGradientElement(nsIContent** aResult,
95 : already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
96 :
97 : protected:
98 : explicit SVGLinearGradientElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
99 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
100 :
101 : public:
102 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
103 : bool aPreallocateChildren) const override;
104 :
105 : // WebIDL
106 : already_AddRefed<SVGAnimatedLength> X1();
107 : already_AddRefed<SVGAnimatedLength> Y1();
108 : already_AddRefed<SVGAnimatedLength> X2();
109 : already_AddRefed<SVGAnimatedLength> Y2();
110 :
111 : protected:
112 :
113 : virtual LengthAttributesInfo GetLengthInfo() override;
114 :
115 : enum { ATTR_X1, ATTR_Y1, ATTR_X2, ATTR_Y2 };
116 : nsSVGLength2 mLengthAttributes[4];
117 : static LengthInfo sLengthInfo[4];
118 : };
119 :
120 : //-------------------------- Radial Gradients ----------------------------
121 :
122 : typedef SVGGradientElement SVGRadialGradientElementBase;
123 :
124 0 : class SVGRadialGradientElement : public SVGRadialGradientElementBase
125 : {
126 : friend class ::nsSVGRadialGradientFrame;
127 : friend nsresult
128 : (::NS_NewSVGRadialGradientElement(nsIContent** aResult,
129 : already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
130 :
131 : protected:
132 : explicit SVGRadialGradientElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
133 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
134 :
135 : public:
136 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
137 : bool aPreallocateChildren) const override;
138 :
139 : // WebIDL
140 : already_AddRefed<SVGAnimatedLength> Cx();
141 : already_AddRefed<SVGAnimatedLength> Cy();
142 : already_AddRefed<SVGAnimatedLength> R();
143 : already_AddRefed<SVGAnimatedLength> Fx();
144 : already_AddRefed<SVGAnimatedLength> Fy();
145 : already_AddRefed<SVGAnimatedLength> Fr();
146 : protected:
147 :
148 : virtual LengthAttributesInfo GetLengthInfo() override;
149 :
150 : enum { ATTR_CX, ATTR_CY, ATTR_R, ATTR_FX, ATTR_FY, ATTR_FR };
151 : nsSVGLength2 mLengthAttributes[6];
152 : static LengthInfo sLengthInfo[6];
153 : };
154 :
155 : } // namespace dom
156 : } // namespace mozilla
157 :
158 : #endif
|