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 DOM_SVG_SVGFETURBULENCEELEMENT_H_
8 #define DOM_SVG_SVGFETURBULENCEELEMENT_H_
9 
10 #include "SVGAnimatedEnumeration.h"
11 #include "SVGAnimatedInteger.h"
12 #include "SVGAnimatedNumber.h"
13 #include "SVGAnimatedString.h"
14 #include "mozilla/dom/SVGFilters.h"
15 
16 nsresult NS_NewSVGFETurbulenceElement(
17     nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
18 
19 namespace mozilla {
20 namespace dom {
21 
22 using SVGFETurbulenceElementBase = SVGFE;
23 
24 class SVGFETurbulenceElement : public SVGFETurbulenceElementBase {
25   friend nsresult(::NS_NewSVGFETurbulenceElement(
26       nsIContent** aResult,
27       already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
28 
29  protected:
SVGFETurbulenceElement(already_AddRefed<mozilla::dom::NodeInfo> && aNodeInfo)30   explicit SVGFETurbulenceElement(
31       already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
32       : SVGFETurbulenceElementBase(std::move(aNodeInfo)) {}
33   virtual JSObject* WrapNode(JSContext* aCx,
34                              JS::Handle<JSObject*> aGivenProto) override;
35 
36  public:
SubregionIsUnionOfRegions()37   virtual bool SubregionIsUnionOfRegions() override { return false; }
38 
39   virtual FilterPrimitiveDescription GetPrimitiveDescription(
40       SVGFilterInstance* aInstance, const IntRect& aFilterSubregion,
41       const nsTArray<bool>& aInputsAreTainted,
42       nsTArray<RefPtr<SourceSurface>>& aInputImages) override;
43   virtual bool AttributeAffectsRendering(int32_t aNameSpaceID,
44                                          nsAtom* aAttribute) const override;
GetResultImageName()45   virtual SVGAnimatedString& GetResultImageName() override {
46     return mStringAttributes[RESULT];
47   }
48 
49   virtual nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;
50 
51   // WebIDL
52   already_AddRefed<DOMSVGAnimatedNumber> BaseFrequencyX();
53   already_AddRefed<DOMSVGAnimatedNumber> BaseFrequencyY();
54   already_AddRefed<DOMSVGAnimatedInteger> NumOctaves();
55   already_AddRefed<DOMSVGAnimatedNumber> Seed();
56   already_AddRefed<DOMSVGAnimatedEnumeration> StitchTiles();
57   already_AddRefed<DOMSVGAnimatedEnumeration> Type();
58 
59  protected:
60   virtual NumberAttributesInfo GetNumberInfo() override;
61   virtual NumberPairAttributesInfo GetNumberPairInfo() override;
62   virtual IntegerAttributesInfo GetIntegerInfo() override;
63   virtual EnumAttributesInfo GetEnumInfo() override;
64   virtual StringAttributesInfo GetStringInfo() override;
65 
66   enum { SEED };  // floating point seed?!
67   SVGAnimatedNumber mNumberAttributes[1];
68   static NumberInfo sNumberInfo[1];
69 
70   enum { BASE_FREQ };
71   SVGAnimatedNumberPair mNumberPairAttributes[1];
72   static NumberPairInfo sNumberPairInfo[1];
73 
74   enum { OCTAVES };
75   SVGAnimatedInteger mIntegerAttributes[1];
76   static IntegerInfo sIntegerInfo[1];
77 
78   enum { TYPE, STITCHTILES };
79   SVGAnimatedEnumeration mEnumAttributes[2];
80   static SVGEnumMapping sTypeMap[];
81   static SVGEnumMapping sStitchTilesMap[];
82   static EnumInfo sEnumInfo[2];
83 
84   enum { RESULT };
85   SVGAnimatedString mStringAttributes[1];
86   static StringInfo sStringInfo[1];
87 };
88 
89 }  // namespace dom
90 }  // namespace mozilla
91 
92 #endif  // DOM_SVG_SVGFETURBULENCEELEMENT_H_
93