/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_SVGRectElement_h #define mozilla_dom_SVGRectElement_h #include "nsSVGPathGeometryElement.h" #include "nsSVGLength2.h" nsresult NS_NewSVGRectElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); typedef nsSVGPathGeometryElement SVGRectElementBase; namespace mozilla { namespace dom { class SVGRectElement final : public SVGRectElementBase { protected: explicit SVGRectElement(already_AddRefed& aNodeInfo); virtual JSObject* WrapNode(JSContext *cx, JS::Handle aGivenProto) override; friend nsresult (::NS_NewSVGRectElement(nsIContent **aResult, already_AddRefed&& aNodeInfo)); public: // nsSVGSVGElement methods: virtual bool HasValidDimensions() const override; // nsSVGPathGeometryElement methods: virtual bool GetGeometryBounds(Rect* aBounds, const StrokeOptions& aStrokeOptions, const Matrix& aToBoundsSpace, const Matrix* aToNonScalingStrokeSpace = nullptr) override; virtual void GetAsSimplePath(SimplePath* aSimplePath) override; virtual already_AddRefed BuildPath(PathBuilder* aBuilder = nullptr) override; virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override; // WebIDL already_AddRefed X(); already_AddRefed Y(); already_AddRefed Height(); already_AddRefed Width(); already_AddRefed Rx(); already_AddRefed Ry(); protected: virtual LengthAttributesInfo GetLengthInfo() override; enum { ATTR_X, ATTR_Y, ATTR_WIDTH, ATTR_HEIGHT, ATTR_RX, ATTR_RY }; nsSVGLength2 mLengthAttributes[6]; static LengthInfo sLengthInfo[6]; }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_SVGRectElement_h