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_SVGVIEWELEMENT_H_
8 #define DOM_SVG_SVGVIEWELEMENT_H_
9 
10 #include "SVGAnimatedEnumeration.h"
11 #include "SVGAnimatedPreserveAspectRatio.h"
12 #include "SVGAnimatedViewBox.h"
13 #include "SVGStringList.h"
14 #include "mozilla/dom/SVGElement.h"
15 
16 nsresult NS_NewSVGViewElement(
17     nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
18 
19 namespace mozilla {
20 class SVGFragmentIdentifier;
21 class SVGOuterSVGFrame;
22 
23 namespace dom {
24 class SVGViewportElement;
25 
26 using SVGViewElementBase = SVGElement;
27 
28 class SVGViewElement : public SVGViewElementBase {
29  protected:
30   friend class mozilla::SVGFragmentIdentifier;
31   friend class mozilla::SVGOuterSVGFrame;
32   friend class SVGSVGElement;
33   friend class SVGViewportElement;
34   explicit SVGViewElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
35   friend nsresult(::NS_NewSVGViewElement(
36       nsIContent** aResult,
37       already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
38   virtual JSObject* WrapNode(JSContext* cx,
39                              JS::Handle<JSObject*> aGivenProto) override;
40 
41  public:
42   virtual nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;
43 
44   // WebIDL
ZoomAndPan()45   uint16_t ZoomAndPan() { return mEnumAttributes[ZOOMANDPAN].GetAnimValue(); }
46   void SetZoomAndPan(uint16_t aZoomAndPan, ErrorResult& rv);
47   already_AddRefed<SVGAnimatedRect> ViewBox();
48   already_AddRefed<DOMSVGAnimatedPreserveAspectRatio> PreserveAspectRatio();
49 
50  private:
51   // SVGElement overrides
52 
53   virtual EnumAttributesInfo GetEnumInfo() override;
54 
55   enum { ZOOMANDPAN };
56   SVGAnimatedEnumeration mEnumAttributes[1];
57   static SVGEnumMapping sZoomAndPanMap[];
58   static EnumInfo sEnumInfo[1];
59 
60   virtual SVGAnimatedViewBox* GetAnimatedViewBox() override;
61   virtual SVGAnimatedPreserveAspectRatio* GetAnimatedPreserveAspectRatio()
62       override;
63 
64   SVGAnimatedViewBox mViewBox;
65   SVGAnimatedPreserveAspectRatio mPreserveAspectRatio;
66 };
67 
68 }  // namespace dom
69 }  // namespace mozilla
70 
71 #endif  // DOM_SVG_SVGVIEWELEMENT_H_
72