tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SVGGradientElement.h (4918B)


      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_SVGGRADIENTELEMENT_H_
      8 #define DOM_SVG_SVGGRADIENTELEMENT_H_
      9 
     10 #include "SVGAnimatedEnumeration.h"
     11 #include "SVGAnimatedLength.h"
     12 #include "SVGAnimatedString.h"
     13 #include "SVGAnimatedTransformList.h"
     14 #include "mozilla/UniquePtr.h"
     15 #include "mozilla/dom/SVGElement.h"
     16 
     17 nsresult NS_NewSVGLinearGradientElement(
     18    nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     19 nsresult NS_NewSVGRadialGradientElement(
     20    nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     21 
     22 namespace mozilla {
     23 class SVGGradientFrame;
     24 class SVGLinearGradientFrame;
     25 class SVGRadialGradientFrame;
     26 
     27 namespace dom {
     28 
     29 class DOMSVGAnimatedTransformList;
     30 
     31 //--------------------- Gradients------------------------
     32 
     33 using SVGGradientElementBase = SVGElement;
     34 
     35 class SVGGradientElement : public SVGGradientElementBase {
     36  friend class mozilla::SVGGradientFrame;
     37 
     38 protected:
     39  explicit SVGGradientElement(
     40      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     41  JSObject* WrapNode(JSContext* aCx,
     42                     JS::Handle<JSObject*> aGivenProto) override = 0;
     43 
     44 public:
     45  // nsIContent
     46  nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override = 0;
     47 
     48  SVGAnimatedTransformList* GetAnimatedTransformList(
     49      uint32_t aFlags = 0) override;
     50  nsStaticAtom* GetTransformListAttrName() const override {
     51    return nsGkAtoms::gradientTransform;
     52  }
     53  NS_IMETHOD_(bool) IsAttributeMapped(const nsAtom* aAttribute) const override;
     54 
     55  // WebIDL
     56  already_AddRefed<DOMSVGAnimatedEnumeration> GradientUnits();
     57  already_AddRefed<DOMSVGAnimatedTransformList> GradientTransform();
     58  already_AddRefed<DOMSVGAnimatedEnumeration> SpreadMethod();
     59  already_AddRefed<DOMSVGAnimatedString> Href();
     60 
     61 protected:
     62  EnumAttributesInfo GetEnumInfo() override;
     63  StringAttributesInfo GetStringInfo() override;
     64 
     65  enum { GRADIENTUNITS, SPREADMETHOD };
     66  SVGAnimatedEnumeration mEnumAttributes[2];
     67  static SVGEnumMapping sSpreadMethodMap[];
     68  static EnumInfo sEnumInfo[2];
     69 
     70  enum { HREF, XLINK_HREF };
     71  SVGAnimatedString mStringAttributes[2];
     72  static StringInfo sStringInfo[2];
     73 
     74  // SVGGradientElement values
     75  UniquePtr<SVGAnimatedTransformList> mGradientTransform;
     76 };
     77 
     78 //---------------------Linear Gradients------------------------
     79 
     80 using SVGLinearGradientElementBase = SVGGradientElement;
     81 
     82 class SVGLinearGradientElement final : public SVGLinearGradientElementBase {
     83  friend class mozilla::SVGLinearGradientFrame;
     84  friend nsresult(::NS_NewSVGLinearGradientElement(
     85      nsIContent** aResult,
     86      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
     87 
     88 protected:
     89  explicit SVGLinearGradientElement(
     90      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     91  virtual JSObject* WrapNode(JSContext* aCx,
     92                             JS::Handle<JSObject*> aGivenProto) override;
     93 
     94 public:
     95  nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;
     96 
     97  // WebIDL
     98  already_AddRefed<DOMSVGAnimatedLength> X1();
     99  already_AddRefed<DOMSVGAnimatedLength> Y1();
    100  already_AddRefed<DOMSVGAnimatedLength> X2();
    101  already_AddRefed<DOMSVGAnimatedLength> Y2();
    102 
    103 protected:
    104  LengthAttributesInfo GetLengthInfo() override;
    105 
    106  enum { ATTR_X1, ATTR_Y1, ATTR_X2, ATTR_Y2 };
    107  SVGAnimatedLength mLengthAttributes[4];
    108  static LengthInfo sLengthInfo[4];
    109 };
    110 
    111 //-------------------------- Radial Gradients ----------------------------
    112 
    113 using SVGRadialGradientElementBase = SVGGradientElement;
    114 
    115 class SVGRadialGradientElement final : public SVGRadialGradientElementBase {
    116  friend class mozilla::SVGRadialGradientFrame;
    117  friend nsresult(::NS_NewSVGRadialGradientElement(
    118      nsIContent** aResult,
    119      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
    120 
    121 protected:
    122  explicit SVGRadialGradientElement(
    123      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
    124  virtual JSObject* WrapNode(JSContext* aCx,
    125                             JS::Handle<JSObject*> aGivenProto) override;
    126 
    127 public:
    128  nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;
    129 
    130  // WebIDL
    131  already_AddRefed<DOMSVGAnimatedLength> Cx();
    132  already_AddRefed<DOMSVGAnimatedLength> Cy();
    133  already_AddRefed<DOMSVGAnimatedLength> R();
    134  already_AddRefed<DOMSVGAnimatedLength> Fx();
    135  already_AddRefed<DOMSVGAnimatedLength> Fy();
    136  already_AddRefed<DOMSVGAnimatedLength> Fr();
    137 
    138 protected:
    139  LengthAttributesInfo GetLengthInfo() override;
    140 
    141  enum { ATTR_CX, ATTR_CY, ATTR_R, ATTR_FX, ATTR_FY, ATTR_FR };
    142  SVGAnimatedLength mLengthAttributes[6];
    143  static LengthInfo sLengthInfo[6];
    144 };
    145 
    146 }  // namespace dom
    147 }  // namespace mozilla
    148 
    149 #endif  // DOM_SVG_SVGGRADIENTELEMENT_H_