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 mozilla_dom_SVGComponentTransferFunctionElement_h
8 : #define mozilla_dom_SVGComponentTransferFunctionElement_h
9 :
10 : #include "nsSVGEnum.h"
11 : #include "nsSVGFilters.h"
12 : #include "nsSVGNumber2.h"
13 : #include "SVGAnimatedNumberList.h"
14 :
15 :
16 : #define NS_SVG_FE_COMPONENT_TRANSFER_FUNCTION_ELEMENT_CID \
17 : { 0xafab106d, 0xbc18, 0x4f7f, \
18 : { 0x9e, 0x29, 0xfe, 0xb4, 0xb0, 0x16, 0x5f, 0xf4 } }
19 :
20 : namespace mozilla {
21 :
22 : class DOMSVGAnimatedNumberList;
23 :
24 : namespace dom {
25 :
26 : typedef SVGFEUnstyledElement SVGComponentTransferFunctionElementBase;
27 :
28 : class SVGComponentTransferFunctionElement : public SVGComponentTransferFunctionElementBase
29 : {
30 : protected:
31 0 : explicit SVGComponentTransferFunctionElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
32 0 : : SVGComponentTransferFunctionElementBase(aNodeInfo)
33 : {
34 0 : }
35 :
36 0 : virtual ~SVGComponentTransferFunctionElement() {}
37 :
38 : public:
39 : typedef gfx::AttributeMap AttributeMap;
40 :
41 : // interfaces:
42 : NS_DECLARE_STATIC_IID_ACCESSOR(NS_SVG_FE_COMPONENT_TRANSFER_FUNCTION_ELEMENT_CID)
43 :
44 : NS_DECL_ISUPPORTS_INHERITED
45 :
46 : virtual bool AttributeAffectsRendering(
47 : int32_t aNameSpaceID, nsIAtom* aAttribute) const override;
48 :
49 : virtual int32_t GetChannel() = 0;
50 :
51 : AttributeMap ComputeAttributes();
52 :
53 : // WebIDL
54 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override = 0;
55 : already_AddRefed<SVGAnimatedEnumeration> Type();
56 : already_AddRefed<DOMSVGAnimatedNumberList> TableValues();
57 : already_AddRefed<SVGAnimatedNumber> Slope();
58 : already_AddRefed<SVGAnimatedNumber> Intercept();
59 : already_AddRefed<SVGAnimatedNumber> Amplitude();
60 : already_AddRefed<SVGAnimatedNumber> Exponent();
61 : already_AddRefed<SVGAnimatedNumber> Offset();
62 :
63 : protected:
64 : virtual NumberAttributesInfo GetNumberInfo() override;
65 : virtual EnumAttributesInfo GetEnumInfo() override;
66 : virtual NumberListAttributesInfo GetNumberListInfo() override;
67 :
68 : enum { TABLEVALUES };
69 : SVGAnimatedNumberList mNumberListAttributes[1];
70 : static NumberListInfo sNumberListInfo[1];
71 :
72 : enum { SLOPE, INTERCEPT, AMPLITUDE, EXPONENT, OFFSET };
73 : nsSVGNumber2 mNumberAttributes[5];
74 : static NumberInfo sNumberInfo[5];
75 :
76 : enum { TYPE };
77 : nsSVGEnum mEnumAttributes[1];
78 : static nsSVGEnumMapping sTypeMap[];
79 : static EnumInfo sEnumInfo[1];
80 : };
81 :
82 : NS_DEFINE_STATIC_IID_ACCESSOR(SVGComponentTransferFunctionElement, NS_SVG_FE_COMPONENT_TRANSFER_FUNCTION_ELEMENT_CID)
83 :
84 : } // namespace dom
85 : } // namespace mozilla
86 :
87 : nsresult NS_NewSVGFEFuncRElement(
88 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
89 :
90 : namespace mozilla {
91 : namespace dom {
92 :
93 0 : class SVGFEFuncRElement : public SVGComponentTransferFunctionElement
94 : {
95 : friend nsresult (::NS_NewSVGFEFuncRElement(
96 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
97 : protected:
98 0 : explicit SVGFEFuncRElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
99 0 : : SVGComponentTransferFunctionElement(aNodeInfo) {}
100 :
101 : public:
102 0 : virtual int32_t GetChannel() override { return 0; }
103 :
104 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
105 : bool aPreallocateChildren) const override;
106 :
107 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
108 : };
109 :
110 : } // namespace dom
111 : } // namespace mozilla
112 :
113 : nsresult NS_NewSVGFEFuncGElement(
114 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
115 :
116 : namespace mozilla {
117 : namespace dom {
118 :
119 0 : class SVGFEFuncGElement : public SVGComponentTransferFunctionElement
120 : {
121 : friend nsresult (::NS_NewSVGFEFuncGElement(
122 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
123 : protected:
124 0 : explicit SVGFEFuncGElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
125 0 : : SVGComponentTransferFunctionElement(aNodeInfo) {}
126 :
127 : public:
128 0 : virtual int32_t GetChannel() override { return 1; }
129 :
130 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
131 : bool aPreallocateChildren) const override;
132 :
133 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
134 : };
135 :
136 : } // namespace dom
137 : } // namespace mozilla
138 :
139 : nsresult NS_NewSVGFEFuncBElement(
140 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
141 :
142 : namespace mozilla {
143 : namespace dom {
144 :
145 0 : class SVGFEFuncBElement : public SVGComponentTransferFunctionElement
146 : {
147 : friend nsresult (::NS_NewSVGFEFuncBElement(
148 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
149 : protected:
150 0 : explicit SVGFEFuncBElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
151 0 : : SVGComponentTransferFunctionElement(aNodeInfo) {}
152 :
153 : public:
154 0 : virtual int32_t GetChannel() override { return 2; }
155 :
156 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
157 : bool aPreallocateChildren) const override;
158 :
159 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
160 : };
161 :
162 : } // namespace dom
163 : } // namespace mozilla
164 :
165 : nsresult NS_NewSVGFEFuncAElement(
166 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
167 :
168 : namespace mozilla {
169 : namespace dom {
170 :
171 0 : class SVGFEFuncAElement : public SVGComponentTransferFunctionElement
172 : {
173 : friend nsresult (::NS_NewSVGFEFuncAElement(
174 : nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
175 : protected:
176 0 : explicit SVGFEFuncAElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
177 0 : : SVGComponentTransferFunctionElement(aNodeInfo) {}
178 :
179 : public:
180 0 : virtual int32_t GetChannel() override { return 3; }
181 :
182 : virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
183 : bool aPreallocateChildren) const override;
184 :
185 : virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
186 : };
187 :
188 : } // namespace dom
189 : } // namespace mozilla
190 :
191 : #endif // mozilla_dom_SVGComponentTransferFunctionElement_h
|