diff --git a/accessible/base/nsAccessibilityService.cpp b/accessible/base/nsAccessibilityService.cpp index 90d54e3ab6..77ee03316f 100644 --- a/accessible/base/nsAccessibilityService.cpp +++ b/accessible/base/nsAccessibilityService.cpp @@ -56,7 +56,7 @@ #include "nsIObserverService.h" #include "nsLayoutUtils.h" #include "nsPluginFrame.h" -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryFrame.h" #include "nsTreeBodyFrame.h" #include "nsTreeColumns.h" #include "nsTreeUtils.h" @@ -1161,8 +1161,8 @@ nsAccessibilityService::CreateAccessible(nsINode* aNode, if (!newAcc) { if (content->IsSVGElement()) { - nsSVGPathGeometryFrame* pathGeometryFrame = do_QueryFrame(frame); - if (pathGeometryFrame) { + SVGGeometryFrame* geometryFrame = do_QueryFrame(frame); + if (geometryFrame) { // A graphic elements: rect, circle, ellipse, line, path, polygon, // polyline and image. A 'use' and 'text' graphic elements require // special support. diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h index 617aea60a7..15ff8b0317 100644 --- a/dom/base/nsGkAtomList.h +++ b/dom/base/nsGkAtomList.h @@ -2061,6 +2061,7 @@ GK_ATOM(svgFEUnstyledLeafFrame, "SVGFEUnstyledLeafFrame") GK_ATOM(svgFilterFrame, "SVGFilterFrame") GK_ATOM(svgForeignObjectFrame, "SVGForeignObjectFrame") GK_ATOM(svgGenericContainerFrame, "SVGGenericContainerFrame") +GK_ATOM(svgGeometryFrame, "SVGGeometryFrame") GK_ATOM(svgGFrame, "SVGGFrame") GK_ATOM(svgGradientFrame, "SVGGradientFrame") GK_ATOM(svgImageFrame, "SVGImageFrame") @@ -2071,7 +2072,6 @@ GK_ATOM(svgMarkerAnonChildFrame, "SVGMarkerAnonChildFrame") GK_ATOM(svgMaskFrame, "SVGMaskFrame") GK_ATOM(svgOuterSVGFrame, "SVGOuterSVGFrame") GK_ATOM(svgOuterSVGAnonChildFrame, "SVGOuterSVGAnonChildFrame") -GK_ATOM(svgPathGeometryFrame, "SVGPathGeometryFrame") GK_ATOM(svgPatternFrame, "SVGPatternFrame") GK_ATOM(svgRadialGradientFrame, "SVGRadialGradientFrame") GK_ATOM(svgStopFrame, "SVGStopFrame") diff --git a/dom/svg/SVGCircleElement.cpp b/dom/svg/SVGCircleElement.cpp index 5f0873c49d..7ef3f513cc 100644 --- a/dom/svg/SVGCircleElement.cpp +++ b/dom/svg/SVGCircleElement.cpp @@ -79,7 +79,7 @@ SVGCircleElement::GetLengthInfo() } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods bool SVGCircleElement::GetGeometryBounds(Rect* aBounds, diff --git a/dom/svg/SVGCircleElement.h b/dom/svg/SVGCircleElement.h index 64518b4d95..b946ce7a49 100644 --- a/dom/svg/SVGCircleElement.h +++ b/dom/svg/SVGCircleElement.h @@ -6,17 +6,17 @@ #ifndef mozilla_dom_SVGCircleElement_h #define mozilla_dom_SVGCircleElement_h -#include "nsSVGPathGeometryElement.h" +#include "SVGGeometryElement.h" #include "nsSVGLength2.h" nsresult NS_NewSVGCircleElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPathGeometryElement SVGCircleElementBase; - namespace mozilla { namespace dom { +typedef SVGGeometryElement SVGCircleElementBase; + class SVGCircleElement final : public SVGCircleElementBase { protected: @@ -29,7 +29,7 @@ public: // nsSVGSVGElement methods: virtual bool HasValidDimensions() const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool GetGeometryBounds(Rect* aBounds, const StrokeOptions& aStrokeOptions, const Matrix& aToBoundsSpace, const Matrix* aToNonScalingStrokeSpace = nullptr) override; diff --git a/dom/svg/SVGEllipseElement.cpp b/dom/svg/SVGEllipseElement.cpp index 47528af36c..5c1971be0d 100644 --- a/dom/svg/SVGEllipseElement.cpp +++ b/dom/svg/SVGEllipseElement.cpp @@ -90,7 +90,7 @@ SVGEllipseElement::GetLengthInfo() } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods bool SVGEllipseElement::GetGeometryBounds(Rect* aBounds, diff --git a/dom/svg/SVGEllipseElement.h b/dom/svg/SVGEllipseElement.h index 0b1904a329..ab2a0c95de 100644 --- a/dom/svg/SVGEllipseElement.h +++ b/dom/svg/SVGEllipseElement.h @@ -6,7 +6,7 @@ #ifndef mozilla_dom_SVGEllipseElement_h #define mozilla_dom_SVGEllipseElement_h -#include "nsSVGPathGeometryElement.h" +#include "SVGGeometryElement.h" #include "nsSVGLength2.h" nsresult NS_NewSVGEllipseElement(nsIContent **aResult, @@ -15,7 +15,7 @@ nsresult NS_NewSVGEllipseElement(nsIContent **aResult, namespace mozilla { namespace dom { -typedef nsSVGPathGeometryElement SVGEllipseElementBase; +typedef SVGGeometryElement SVGEllipseElementBase; class SVGEllipseElement final : public SVGEllipseElementBase { @@ -29,7 +29,7 @@ public: // nsSVGSVGElement methods: virtual bool HasValidDimensions() const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool GetGeometryBounds(Rect* aBounds, const StrokeOptions& aStrokeOptions, const Matrix& aToBoundsSpace, const Matrix* aToNonScalingStrokeSpace = nullptr) override; diff --git a/dom/svg/nsSVGPathGeometryElement.cpp b/dom/svg/SVGGeometryElement.cpp similarity index 58% rename from dom/svg/nsSVGPathGeometryElement.cpp rename to dom/svg/SVGGeometryElement.cpp index 726ee95786..e59a16ef5e 100644 --- a/dom/svg/nsSVGPathGeometryElement.cpp +++ b/dom/svg/SVGGeometryElement.cpp @@ -3,8 +3,9 @@ * 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/. */ -#include "nsSVGPathGeometryElement.h" +#include "SVGGeometryElement.h" +#include "DOMSVGPoint.h" #include "gfxPlatform.h" #include "mozilla/gfx/2D.h" #include "nsComputedDOMStyle.h" @@ -15,16 +16,25 @@ using namespace mozilla; using namespace mozilla::gfx; +nsSVGElement::NumberInfo SVGGeometryElement::sNumberInfo = +{ &nsGkAtoms::pathLength, 0, false }; + //---------------------------------------------------------------------- // Implementation -nsSVGPathGeometryElement::nsSVGPathGeometryElement(already_AddRefed& aNodeInfo) - : nsSVGPathGeometryElementBase(aNodeInfo) +SVGGeometryElement::SVGGeometryElement(already_AddRefed& aNodeInfo) + : SVGGeometryElementBase(aNodeInfo) { } +nsSVGElement::NumberAttributesInfo +SVGGeometryElement::GetNumberInfo() +{ + return NumberAttributesInfo(&mPathLength, &sNumberInfo, 1); +} + nsresult -nsSVGPathGeometryElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName, +SVGGeometryElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName, const nsAttrValue* aValue, const nsAttrValue* aOldValue, bool aNotify) { @@ -33,13 +43,17 @@ nsSVGPathGeometryElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName, AttributeDefinesGeometry(aName)) { mCachedPath = nullptr; } - return nsSVGPathGeometryElementBase::AfterSetAttr(aNamespaceID, aName, - aValue, aOldValue, aNotify); + return SVGGeometryElementBase::AfterSetAttr(aNamespaceID, aName, + aValue, aOldValue, aNotify); } bool -nsSVGPathGeometryElement::AttributeDefinesGeometry(const nsIAtom *aName) +SVGGeometryElement::AttributeDefinesGeometry(const nsIAtom *aName) { + if (aName == nsGkAtoms::pathLength) { + return true; + } + // Check for nsSVGLength2 attribute LengthAttributesInfo info = GetLengthInfo(); for (uint32_t i = 0; i < info.mLengthCount; i++) { @@ -52,10 +66,10 @@ nsSVGPathGeometryElement::AttributeDefinesGeometry(const nsIAtom *aName) } bool -nsSVGPathGeometryElement::GeometryDependsOnCoordCtx() +SVGGeometryElement::GeometryDependsOnCoordCtx() { // Check the nsSVGLength2 attribute - LengthAttributesInfo info = const_cast(this)->GetLengthInfo(); + LengthAttributesInfo info = const_cast(this)->GetLengthInfo(); for (uint32_t i = 0; i < info.mLengthCount; i++) { if (info.mLengths[i].GetSpecifiedUnitType() == nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE) { return true; @@ -65,19 +79,19 @@ nsSVGPathGeometryElement::GeometryDependsOnCoordCtx() } bool -nsSVGPathGeometryElement::IsMarkable() +SVGGeometryElement::IsMarkable() { return false; } void -nsSVGPathGeometryElement::GetMarkPoints(nsTArray *aMarks) +SVGGeometryElement::GetMarkPoints(nsTArray *aMarks) { } already_AddRefed -nsSVGPathGeometryElement::GetOrBuildPath(const DrawTarget& aDrawTarget, - FillRule aFillRule) +SVGGeometryElement::GetOrBuildPath(const DrawTarget& aDrawTarget, + FillRule aFillRule) { // We only cache the path if it matches the backend used for screen painting: bool cacheable = aDrawTarget.GetBackendType() == @@ -102,13 +116,13 @@ nsSVGPathGeometryElement::GetOrBuildPath(const DrawTarget& aDrawTarget, } already_AddRefed -nsSVGPathGeometryElement::GetOrBuildPathForMeasuring() +SVGGeometryElement::GetOrBuildPathForMeasuring() { return nullptr; } FillRule -nsSVGPathGeometryElement::GetFillRule() +SVGGeometryElement::GetFillRule() { FillRule fillRule = FillRule::FILL_WINDING; // Equivalent to StyleFillRule::Nonzero @@ -130,3 +144,42 @@ nsSVGPathGeometryElement::GetFillRule() return fillRule; } + +float +SVGGeometryElement::GetTotalLength() +{ + RefPtr flat = GetOrBuildPathForMeasuring(); + return flat ? flat->ComputeLength() : 0.f; +} + +already_AddRefed +SVGGeometryElement::GetPointAtLength(float distance, ErrorResult& rv) +{ + RefPtr path = GetOrBuildPathForMeasuring(); + if (!path) { + rv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + float totalLength = path->ComputeLength(); + if (mPathLength.IsExplicitlySet()) { + float pathLength = mPathLength.GetAnimValue(); + if (pathLength <= 0) { + rv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + distance *= totalLength / pathLength; + } + distance = std::max(0.f, distance); + distance = std::min(totalLength, distance); + + nsCOMPtr point = + new DOMSVGPoint(path->ComputePointAtLength(distance)); + return point.forget(); +} + +already_AddRefed +SVGGeometryElement::PathLength() +{ + return mPathLength.ToDOMAnimatedNumber(this); +} diff --git a/dom/svg/nsSVGPathGeometryElement.h b/dom/svg/SVGGeometryElement.h similarity index 88% rename from dom/svg/nsSVGPathGeometryElement.h rename to dom/svg/SVGGeometryElement.h index 517d74096e..b19c259e2f 100644 --- a/dom/svg/nsSVGPathGeometryElement.h +++ b/dom/svg/SVGGeometryElement.h @@ -3,11 +3,13 @@ * 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 __NS_SVGPATHGEOMETRYELEMENT_H__ -#define __NS_SVGPATHGEOMETRYELEMENT_H__ +#ifndef mozilla_dom_SVGGeometryElement_h +#define mozilla_dom_SVGGeometryElement_h #include "mozilla/gfx/2D.h" #include "SVGGraphicsElement.h" +#include "nsISVGPoint.h" +#include "nsSVGNumber2.h" struct nsSVGMark { enum Type { @@ -24,9 +26,14 @@ struct nsSVGMark { x(aX), y(aY), angle(aAngle), type(aType) {} }; -typedef mozilla::dom::SVGGraphicsElement nsSVGPathGeometryElementBase; +namespace mozilla { +namespace dom { -class nsSVGPathGeometryElement : public nsSVGPathGeometryElementBase +class SVGAnimatedNumber; + +typedef mozilla::dom::SVGGraphicsElement SVGGeometryElementBase; + +class SVGGeometryElement : public SVGGeometryElementBase { protected: typedef mozilla::gfx::CapStyle CapStyle; @@ -41,7 +48,7 @@ protected: typedef mozilla::gfx::StrokeOptions StrokeOptions; public: - explicit nsSVGPathGeometryElement(already_AddRefed& aNodeInfo); + explicit SVGGeometryElement(already_AddRefed& aNodeInfo); virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName, const nsAttrValue* aValue, @@ -160,7 +167,7 @@ public: * that is created may be cached and returned on subsequent calls. */ virtual already_AddRefed GetOrBuildPath(const DrawTarget& aDrawTarget, - FillRule fillRule); + FillRule fillRule); /** * The same as GetOrBuildPath, but bypasses the cache (neither returns any @@ -192,8 +199,22 @@ public: */ FillRule GetFillRule(); + // WebIDL + already_AddRefed PathLength(); + float GetTotalLength(); + already_AddRefed + GetPointAtLength(float distance, ErrorResult& rv); + protected: + // nsSVGElement method + virtual NumberAttributesInfo GetNumberInfo() override; + + nsSVGNumber2 mPathLength; + static NumberInfo sNumberInfo; mutable RefPtr mCachedPath; }; -#endif +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_SVGGeometryElement_h diff --git a/dom/svg/SVGImageElement.cpp b/dom/svg/SVGImageElement.cpp index e6d8cc44c0..1b8a8f140f 100644 --- a/dom/svg/SVGImageElement.cpp +++ b/dom/svg/SVGImageElement.cpp @@ -235,7 +235,7 @@ SVGImageElement::IsAttributeMapped(const nsIAtom* name) const } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods /* For the purposes of the update/invalidation logic pretend to be a rectangle. */ diff --git a/dom/svg/SVGImageElement.h b/dom/svg/SVGImageElement.h index 62e826f963..6663166ad5 100644 --- a/dom/svg/SVGImageElement.h +++ b/dom/svg/SVGImageElement.h @@ -8,21 +8,21 @@ #include "nsImageLoadingContent.h" #include "nsSVGLength2.h" -#include "nsSVGPathGeometryElement.h" #include "nsSVGString.h" +#include "SVGGeometryElement.h" #include "SVGAnimatedPreserveAspectRatio.h" nsresult NS_NewSVGImageElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPathGeometryElement SVGImageElementBase; - class nsSVGImageFrame; namespace mozilla { namespace dom { class DOMSVGAnimatedPreserveAspectRatio; +typedef SVGGeometryElement SVGImageElementBase; + class SVGImageElement : public SVGImageElementBase, public nsImageLoadingContent { @@ -57,7 +57,7 @@ public: NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* name) const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool GetGeometryBounds(Rect* aBounds, const StrokeOptions& aStrokeOptions, const Matrix& aToBoundsSpace, const Matrix* aToNonScalingStrokeSpace = nullptr) override; diff --git a/dom/svg/SVGLineElement.cpp b/dom/svg/SVGLineElement.cpp index 776c6b04a3..8f43a4317d 100644 --- a/dom/svg/SVGLineElement.cpp +++ b/dom/svg/SVGLineElement.cpp @@ -109,7 +109,7 @@ SVGLineElement::GetLengthInfo() } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods void SVGLineElement::GetMarkPoints(nsTArray *aMarks) { diff --git a/dom/svg/SVGLineElement.h b/dom/svg/SVGLineElement.h index 7ff652424d..5a6a94447e 100644 --- a/dom/svg/SVGLineElement.h +++ b/dom/svg/SVGLineElement.h @@ -6,7 +6,7 @@ #ifndef mozilla_dom_SVGLineElement_h #define mozilla_dom_SVGLineElement_h -#include "nsSVGPathGeometryElement.h" +#include "SVGGeometryElement.h" #include "nsSVGLength2.h" nsresult NS_NewSVGLineElement(nsIContent **aResult, @@ -15,7 +15,7 @@ nsresult NS_NewSVGLineElement(nsIContent **aResult, namespace mozilla { namespace dom { -typedef nsSVGPathGeometryElement SVGLineElementBase; +typedef SVGGeometryElement SVGLineElementBase; class SVGLineElement final : public SVGLineElementBase { @@ -33,7 +33,7 @@ public: // nsIContent interface NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* name) const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool IsMarkable() override { return true; } virtual void GetMarkPoints(nsTArray *aMarks) override; virtual void GetAsSimplePath(SimplePath* aSimplePath) override; diff --git a/dom/svg/SVGPathData.cpp b/dom/svg/SVGPathData.cpp index 493f4d821a..be3912af2a 100644 --- a/dom/svg/SVGPathData.cpp +++ b/dom/svg/SVGPathData.cpp @@ -14,10 +14,10 @@ #include "nsError.h" #include "nsString.h" #include "nsSVGPathDataParser.h" -#include "nsSVGPathGeometryElement.h" // for nsSVGMark #include #include "nsStyleConsts.h" #include "SVGContentUtils.h" +#include "SVGGeometryElement.h" // for nsSVGMark #include "SVGPathSegUtils.h" #include diff --git a/dom/svg/SVGPathElement.cpp b/dom/svg/SVGPathElement.cpp index 204eb04bde..8f9815dbaa 100644 --- a/dom/svg/SVGPathElement.cpp +++ b/dom/svg/SVGPathElement.cpp @@ -9,7 +9,6 @@ #include "DOMSVGPathSeg.h" #include "DOMSVGPathSegList.h" -#include "DOMSVGPoint.h" #include "gfx2DGlue.h" #include "gfxPlatform.h" #include "mozilla/dom/SVGPathElementBinding.h" @@ -35,9 +34,6 @@ SVGPathElement::WrapNode(JSContext *aCx, JS::Handle aGivenProto) return SVGPathElementBinding::Wrap(aCx, this, aGivenProto); } -nsSVGElement::NumberInfo SVGPathElement::sNumberInfo = -{ &nsGkAtoms::pathLength, 0, false }; - //---------------------------------------------------------------------- // Implementation @@ -61,45 +57,6 @@ SVGPathElement::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGPathElement) -already_AddRefed -SVGPathElement::PathLength() -{ - return mPathLength.ToDOMAnimatedNumber(this); -} - -float -SVGPathElement::GetTotalLength() -{ - RefPtr flat = GetOrBuildPathForMeasuring(); - return flat ? flat->ComputeLength() : 0.f; -} - -already_AddRefed -SVGPathElement::GetPointAtLength(float distance, ErrorResult& rv) -{ - RefPtr path = GetOrBuildPathForMeasuring(); - if (!path) { - rv.Throw(NS_ERROR_FAILURE); - return nullptr; - } - - float totalLength = path->ComputeLength(); - if (mPathLength.IsExplicitlySet()) { - float pathLength = mPathLength.GetAnimValue(); - if (pathLength <= 0) { - rv.Throw(NS_ERROR_FAILURE); - return nullptr; - } - distance *= totalLength / pathLength; - } - distance = std::max(0.f, distance); - distance = std::min(totalLength, distance); - - nsCOMPtr point = - new DOMSVGPoint(path->ComputePointAtLength(distance)); - return point.forget(); -} - uint32_t SVGPathElement::GetPathSegAtLength(float distance) { @@ -284,12 +241,6 @@ SVGPathElement::HasValidDimensions() const return !mD.GetAnimValue().IsEmpty(); } -nsSVGElement::NumberAttributesInfo -SVGPathElement::GetNumberInfo() -{ - return NumberAttributesInfo(&mPathLength, &sNumberInfo, 1); -} - //---------------------------------------------------------------------- // nsIContent methods @@ -311,7 +262,7 @@ SVGPathElement::GetOrBuildPathForMeasuring() } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods bool SVGPathElement::AttributeDefinesGeometry(const nsIAtom *aName) diff --git a/dom/svg/SVGPathElement.h b/dom/svg/SVGPathElement.h index c7fc238ce0..af35e46985 100644 --- a/dom/svg/SVGPathElement.h +++ b/dom/svg/SVGPathElement.h @@ -8,22 +8,21 @@ #include "mozilla/gfx/2D.h" #include "mozilla/RefPtr.h" -#include "nsSVGNumber2.h" -#include "nsSVGPathGeometryElement.h" #include "SVGAnimatedPathSegList.h" +#include "SVGGeometryElement.h" #include "DOMSVGPathSeg.h" nsresult NS_NewSVGPathElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPathGeometryElement SVGPathElementBase; - namespace mozilla { class nsISVGPoint; namespace dom { +typedef SVGGeometryElement SVGPathElementBase; + class SVGPathElement final : public SVGPathElementBase { friend class nsSVGPathFrame; @@ -46,7 +45,7 @@ public: // nsSVGSVGElement methods: virtual bool HasValidDimensions() const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool AttributeDefinesGeometry(const nsIAtom *aName) override; virtual bool IsMarkable() override; virtual void GetMarkPoints(nsTArray *aMarks) override; @@ -83,9 +82,6 @@ public: float GetPathLengthScale(PathLengthScaleForType aFor); // WebIDL - already_AddRefed PathLength(); - float GetTotalLength(); - already_AddRefed GetPointAtLength(float distance, ErrorResult& rv); uint32_t GetPathSegAtLength(float distance); already_AddRefed CreateSVGPathSegClosePath(); already_AddRefed CreateSVGPathSegMovetoAbs(float x, float y); @@ -121,12 +117,7 @@ public: protected: - // nsSVGElement method - virtual NumberAttributesInfo GetNumberInfo() override; - SVGAnimatedPathSegList mD; - nsSVGNumber2 mPathLength; - static NumberInfo sNumberInfo; }; } // namespace dom diff --git a/dom/svg/nsSVGPolyElement.cpp b/dom/svg/SVGPolyElement.cpp similarity index 75% rename from dom/svg/nsSVGPolyElement.cpp rename to dom/svg/SVGPolyElement.cpp index ec45dcb03c..72e3b0be8a 100644 --- a/dom/svg/nsSVGPolyElement.cpp +++ b/dom/svg/SVGPolyElement.cpp @@ -3,7 +3,7 @@ * 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/. */ -#include "nsSVGPolyElement.h" +#include "SVGPolyElement.h" #include "DOMSVGPointList.h" #include "mozilla/gfx/2D.h" #include "SVGContentUtils.h" @@ -14,26 +14,26 @@ using namespace mozilla::gfx; //---------------------------------------------------------------------- // nsISupports methods -NS_IMPL_ADDREF_INHERITED(nsSVGPolyElement,nsSVGPolyElementBase) -NS_IMPL_RELEASE_INHERITED(nsSVGPolyElement,nsSVGPolyElementBase) +NS_IMPL_ADDREF_INHERITED(SVGPolyElement,SVGPolyElementBase) +NS_IMPL_RELEASE_INHERITED(SVGPolyElement,SVGPolyElementBase) -NS_INTERFACE_MAP_BEGIN(nsSVGPolyElement) -NS_INTERFACE_MAP_END_INHERITING(nsSVGPolyElementBase) +NS_INTERFACE_MAP_BEGIN(SVGPolyElement) +NS_INTERFACE_MAP_END_INHERITING(SVGPolyElementBase) //---------------------------------------------------------------------- // Implementation -nsSVGPolyElement::nsSVGPolyElement(already_AddRefed& aNodeInfo) - : nsSVGPolyElementBase(aNodeInfo) +SVGPolyElement::SVGPolyElement(already_AddRefed& aNodeInfo) + : SVGPolyElementBase(aNodeInfo) { } -nsSVGPolyElement::~nsSVGPolyElement() +SVGPolyElement::~SVGPolyElement() { } already_AddRefed -nsSVGPolyElement::Points() +SVGPolyElement::Points() { void *key = mPoints.GetBaseValKey(); RefPtr points = DOMSVGPointList::GetDOMWrapper(key, this, false); @@ -41,7 +41,7 @@ nsSVGPolyElement::Points() } already_AddRefed -nsSVGPolyElement::AnimatedPoints() +SVGPolyElement::AnimatedPoints() { void *key = mPoints.GetAnimValKey(); RefPtr points = DOMSVGPointList::GetDOMWrapper(key, this, true); @@ -53,30 +53,30 @@ nsSVGPolyElement::AnimatedPoints() // nsIContent methods NS_IMETHODIMP_(bool) -nsSVGPolyElement::IsAttributeMapped(const nsIAtom* name) const +SVGPolyElement::IsAttributeMapped(const nsIAtom* name) const { static const MappedAttributeEntry* const map[] = { sMarkersMap }; return FindAttributeDependence(name, map) || - nsSVGPolyElementBase::IsAttributeMapped(name); + SVGPolyElementBase::IsAttributeMapped(name); } //---------------------------------------------------------------------- // nsSVGElement methods /* virtual */ bool -nsSVGPolyElement::HasValidDimensions() const +SVGPolyElement::HasValidDimensions() const { return !mPoints.GetAnimValue().IsEmpty(); } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods bool -nsSVGPolyElement::AttributeDefinesGeometry(const nsIAtom *aName) +SVGPolyElement::AttributeDefinesGeometry(const nsIAtom *aName) { if (aName == nsGkAtoms::points) return true; @@ -85,7 +85,7 @@ nsSVGPolyElement::AttributeDefinesGeometry(const nsIAtom *aName) } void -nsSVGPolyElement::GetMarkPoints(nsTArray *aMarks) +SVGPolyElement::GetMarkPoints(nsTArray *aMarks) { const SVGPointList &points = mPoints.GetAnimValue(); @@ -121,10 +121,10 @@ nsSVGPolyElement::GetMarkPoints(nsTArray *aMarks) } bool -nsSVGPolyElement::GetGeometryBounds(Rect* aBounds, - const StrokeOptions& aStrokeOptions, - const Matrix& aToBoundsSpace, - const Matrix* aToNonScalingStrokeSpace) +SVGPolyElement::GetGeometryBounds(Rect* aBounds, + const StrokeOptions& aStrokeOptions, + const Matrix& aToBoundsSpace, + const Matrix* aToNonScalingStrokeSpace) { const SVGPointList &points = mPoints.GetAnimValue(); diff --git a/dom/svg/nsSVGPolyElement.h b/dom/svg/SVGPolyElement.h similarity index 78% rename from dom/svg/nsSVGPolyElement.h rename to dom/svg/SVGPolyElement.h index 69c3fac5f8..5097340ed7 100644 --- a/dom/svg/nsSVGPolyElement.h +++ b/dom/svg/SVGPolyElement.h @@ -3,25 +3,26 @@ * 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 NS_SVGPOLYELEMENT_H_ -#define NS_SVGPOLYELEMENT_H_ +#ifndef __SVGPOLYELEMENT_H_ +#define __SVGPOLYELEMENT_H_ #include "mozilla/Attributes.h" -#include "nsSVGPathGeometryElement.h" #include "SVGAnimatedPointList.h" - -typedef nsSVGPathGeometryElement nsSVGPolyElementBase; +#include "SVGGeometryElement.h" namespace mozilla { class DOMSVGPointList; -} // namespace mozilla -class nsSVGPolyElement : public nsSVGPolyElementBase +namespace dom { + +typedef SVGGeometryElement SVGPolyElementBase; + +class SVGPolyElement : public SVGPolyElementBase { protected: - explicit nsSVGPolyElement(already_AddRefed& aNodeInfo); + explicit SVGPolyElement(already_AddRefed& aNodeInfo); - virtual ~nsSVGPolyElement(); + virtual ~SVGPolyElement(); public: //interfaces @@ -41,7 +42,7 @@ public: // nsSVGElement methods: virtual bool HasValidDimensions() const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool AttributeDefinesGeometry(const nsIAtom *aName) override; virtual bool IsMarkable() override { return true; } virtual void GetMarkPoints(nsTArray *aMarks) override; @@ -57,4 +58,7 @@ protected: SVGAnimatedPointList mPoints; }; -#endif //NS_SVGPOLYELEMENT_H_ +} // namespace dom +} // namespace mozilla + +#endif //__SVGPOLYELEMENT_H_ diff --git a/dom/svg/SVGPolygonElement.cpp b/dom/svg/SVGPolygonElement.cpp index 62c769edc7..e4259e0e7e 100644 --- a/dom/svg/SVGPolygonElement.cpp +++ b/dom/svg/SVGPolygonElement.cpp @@ -36,12 +36,12 @@ SVGPolygonElement::SVGPolygonElement(already_AddRefed& a NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGPolygonElement) //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods void SVGPolygonElement::GetMarkPoints(nsTArray *aMarks) { - nsSVGPolyElement::GetMarkPoints(aMarks); + SVGPolyElement::GetMarkPoints(aMarks); if (aMarks->IsEmpty() || aMarks->LastElement().type != nsSVGMark::eEnd) { return; @@ -55,7 +55,7 @@ SVGPolygonElement::GetMarkPoints(nsTArray *aMarks) endMark->angle = SVGContentUtils::AngleBisect(angle, endMark->angle); startMark->angle = SVGContentUtils::AngleBisect(angle, startMark->angle); // for a polygon (as opposed to a polyline) there's an implicit extra point - // co-located with the start point that nsSVGPolyElement::GetMarkPoints + // co-located with the start point that SVGPolyElement::GetMarkPoints // doesn't return aMarks->AppendElement(nsSVGMark(startMark->x, startMark->y, startMark->angle, nsSVGMark::eEnd)); diff --git a/dom/svg/SVGPolygonElement.h b/dom/svg/SVGPolygonElement.h index f2d68f1d95..e0bff964e6 100644 --- a/dom/svg/SVGPolygonElement.h +++ b/dom/svg/SVGPolygonElement.h @@ -7,16 +7,16 @@ #define mozilla_dom_SVGPolygonElement_h #include "mozilla/Attributes.h" -#include "nsSVGPolyElement.h" +#include "SVGPolyElement.h" nsresult NS_NewSVGPolygonElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPolyElement SVGPolygonElementBase; - namespace mozilla { namespace dom { +typedef SVGPolyElement SVGPolygonElementBase; + class SVGPolygonElement final : public SVGPolygonElementBase { protected: @@ -26,7 +26,7 @@ protected: already_AddRefed&& aNodeInfo)); public: - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual void GetMarkPoints(nsTArray *aMarks) override; virtual already_AddRefed BuildPath(PathBuilder* aBuilder) override; diff --git a/dom/svg/SVGPolylineElement.cpp b/dom/svg/SVGPolylineElement.cpp index 4c339216df..6de551306e 100644 --- a/dom/svg/SVGPolylineElement.cpp +++ b/dom/svg/SVGPolylineElement.cpp @@ -35,7 +35,7 @@ SVGPolylineElement::SVGPolylineElement(already_AddRefed& NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGPolylineElement) //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods already_AddRefed SVGPolylineElement::BuildPath(PathBuilder* aBuilder) diff --git a/dom/svg/SVGPolylineElement.h b/dom/svg/SVGPolylineElement.h index cf223fd74f..e0b2dcd279 100644 --- a/dom/svg/SVGPolylineElement.h +++ b/dom/svg/SVGPolylineElement.h @@ -6,16 +6,16 @@ #ifndef mozilla_dom_SVGPolylineElement_h #define mozilla_dom_SVGPolylineElement_h -#include "nsSVGPolyElement.h" +#include "SVGPolyElement.h" nsresult NS_NewSVGPolylineElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPolyElement SVGPolylineElementBase; - namespace mozilla { namespace dom { +typedef SVGPolyElement SVGPolylineElementBase; + class SVGPolylineElement final : public SVGPolylineElementBase { protected: @@ -24,7 +24,7 @@ protected: friend nsresult (::NS_NewSVGPolylineElement(nsIContent **aResult, already_AddRefed&& aNodeInfo)); - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual already_AddRefed BuildPath(PathBuilder* aBuilder) override; public: diff --git a/dom/svg/SVGRectElement.cpp b/dom/svg/SVGRectElement.cpp index d201311a5b..2f706a3237 100644 --- a/dom/svg/SVGRectElement.cpp +++ b/dom/svg/SVGRectElement.cpp @@ -108,7 +108,7 @@ SVGRectElement::GetLengthInfo() } //---------------------------------------------------------------------- -// nsSVGPathGeometryElement methods +// SVGGeometryElement methods bool SVGRectElement::GetGeometryBounds(Rect* aBounds, diff --git a/dom/svg/SVGRectElement.h b/dom/svg/SVGRectElement.h index 847a1504a8..9cbe8e6180 100644 --- a/dom/svg/SVGRectElement.h +++ b/dom/svg/SVGRectElement.h @@ -6,17 +6,17 @@ #ifndef mozilla_dom_SVGRectElement_h #define mozilla_dom_SVGRectElement_h -#include "nsSVGPathGeometryElement.h" #include "nsSVGLength2.h" +#include "SVGGeometryElement.h" nsresult NS_NewSVGRectElement(nsIContent **aResult, already_AddRefed&& aNodeInfo); -typedef nsSVGPathGeometryElement SVGRectElementBase; - namespace mozilla { namespace dom { +typedef SVGGeometryElement SVGRectElementBase; + class SVGRectElement final : public SVGRectElementBase { protected: @@ -29,7 +29,7 @@ public: // nsSVGSVGElement methods: virtual bool HasValidDimensions() const override; - // nsSVGPathGeometryElement methods: + // SVGGeometryElement methods: virtual bool GetGeometryBounds(Rect* aBounds, const StrokeOptions& aStrokeOptions, const Matrix& aToBoundsSpace, const Matrix* aToNonScalingStrokeSpace = nullptr) override; diff --git a/dom/svg/moz.build b/dom/svg/moz.build index 3af1b8094c..90b7156315 100644 --- a/dom/svg/moz.build +++ b/dom/svg/moz.build @@ -65,6 +65,7 @@ EXPORTS.mozilla.dom += [ 'SVGFilterElement.h', 'SVGForeignObjectElement.h', 'SVGGElement.h', + 'SVGGeometryElement.h', 'SVGGradientElement.h', 'SVGGraphicsElement.h', 'SVGImageElement.h', @@ -131,8 +132,6 @@ UNIFIED_SOURCES += [ 'nsSVGNumber2.cpp', 'nsSVGNumberPair.cpp', 'nsSVGPathDataParser.cpp', - 'nsSVGPathGeometryElement.cpp', - 'nsSVGPolyElement.cpp', 'nsSVGString.cpp', 'nsSVGTransform.cpp', 'nsSVGViewBox.cpp', @@ -190,6 +189,7 @@ UNIFIED_SOURCES += [ 'SVGForeignObjectElement.cpp', 'SVGFragmentIdentifier.cpp', 'SVGGElement.cpp', + 'SVGGeometryElement.cpp', 'SVGGradientElement.cpp', 'SVGGraphicsElement.cpp', 'SVGImageElement.cpp', @@ -218,6 +218,7 @@ UNIFIED_SOURCES += [ 'SVGPatternElement.cpp', 'SVGPointList.cpp', 'SVGPointListSMILType.cpp', + 'SVGPolyElement.cpp', 'SVGPolygonElement.cpp', 'SVGPolylineElement.cpp', 'SVGPreserveAspectRatio.cpp', diff --git a/dom/svg/nsSVGElement.cpp b/dom/svg/nsSVGElement.cpp index 77dbcb939d..94cce45bd3 100644 --- a/dom/svg/nsSVGElement.cpp +++ b/dom/svg/nsSVGElement.cpp @@ -15,7 +15,6 @@ #include "nsICSSDeclaration.h" #include "nsIDocument.h" #include "nsIDOMMutationEvent.h" -#include "nsSVGPathGeometryElement.h" #include "mozilla/InternalMutationEvent.h" #include "mozAutoDocUpdate.h" #include "nsError.h" @@ -45,6 +44,7 @@ #include "SVGAnimatedPointList.h" #include "SVGAnimatedPathSegList.h" #include "SVGContentUtils.h" +#include "SVGGeometryElement.h" #include "nsIFrame.h" #include "nsQueryObject.h" #include diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 77993a1aff..03101b888c 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -992,6 +992,8 @@ var interfaceNamesInGlobalScope = "SVGForeignObjectElement", // IMPORTANT: Do not change this list without review from a DOM peer! "SVGGElement", +// IMPORTANT: Do not change this list without review from a DOM peer! + "SVGGeometryElement", // IMPORTANT: Do not change this list without review from a DOM peer! "SVGGradientElement", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/SVGGeometryElement.webidl b/dom/webidl/SVGGeometryElement.webidl new file mode 100644 index 0000000000..28029794c6 --- /dev/null +++ b/dom/webidl/SVGGeometryElement.webidl @@ -0,0 +1,20 @@ +/* -*- Mode: IDL; tab-width: 2; 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/. + * + * The origin of this IDL file is + * http://www.w3.org/TR/SVG2/ + * + * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C + * liability, trademark and document use rules apply. + */ + +interface SVGGeometryElement : SVGGraphicsElement { + [SameObject] + readonly attribute SVGAnimatedNumber pathLength; + + float getTotalLength(); + [NewObject, Throws] + SVGPoint getPointAtLength(float distance); +}; diff --git a/dom/webidl/SVGPathElement.webidl b/dom/webidl/SVGPathElement.webidl index 08a9904ec2..9732d3cfe8 100644 --- a/dom/webidl/SVGPathElement.webidl +++ b/dom/webidl/SVGPathElement.webidl @@ -9,14 +9,8 @@ * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C * liability, trademark and document use rules apply. */ -interface SVGPathElement : SVGGraphicsElement { +interface SVGPathElement : SVGGeometryElement { - [Constant] - readonly attribute SVGAnimatedNumber pathLength; - - float getTotalLength(); - [NewObject, Throws] - SVGPoint getPointAtLength(float distance); unsigned long getPathSegAtLength(float distance); [NewObject] SVGPathSegClosePath createSVGPathSegClosePath(); diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 428d242151..5e3c8f8c1e 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -470,6 +470,7 @@ WEBIDL_FILES = [ 'SVGFitToViewBox.webidl', 'SVGForeignObjectElement.webidl', 'SVGGElement.webidl', + 'SVGGeometryElement.webidl', 'SVGGradientElement.webidl', 'SVGGraphicsElement.webidl', 'SVGImageElement.webidl', diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp index fdeb9f35b9..978727e09c 100644 --- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -134,7 +134,7 @@ NS_NewSVGOuterSVGAnonChildFrame(nsIPresShell* aPresShell, nsStyleContext* aConte nsIFrame* NS_NewSVGInnerSVGFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); nsIFrame* -NS_NewSVGPathGeometryFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); +NS_NewSVGGeometryFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); nsIFrame* NS_NewSVGGFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); nsIFrame* @@ -5482,13 +5482,13 @@ nsCSSFrameConstructor::FindSVGData(Element* aElement, SIMPLE_SVG_CREATE(svg, NS_NewSVGInnerSVGFrame), SIMPLE_SVG_CREATE(g, NS_NewSVGGFrame), SIMPLE_SVG_CREATE(svgSwitch, NS_NewSVGSwitchFrame), - SIMPLE_SVG_CREATE(polygon, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(polyline, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(circle, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(ellipse, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(line, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(rect, NS_NewSVGPathGeometryFrame), - SIMPLE_SVG_CREATE(path, NS_NewSVGPathGeometryFrame), + SIMPLE_SVG_CREATE(polygon, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(polyline, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(circle, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(ellipse, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(line, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(rect, NS_NewSVGGeometryFrame), + SIMPLE_SVG_CREATE(path, NS_NewSVGGeometryFrame), SIMPLE_SVG_CREATE(defs, NS_NewSVGContainerFrame), SIMPLE_SVG_CREATE(generic_, NS_NewSVGGenericContainerFrame), { &nsGkAtoms::foreignObject, diff --git a/layout/base/nsDisplayItemTypesList.h b/layout/base/nsDisplayItemTypesList.h index cf809817ff..71036dd05c 100644 --- a/layout/base/nsDisplayItemTypesList.h +++ b/layout/base/nsDisplayItemTypesList.h @@ -52,7 +52,7 @@ DECLARE_DISPLAY_ITEM_TYPE(SUBDOCUMENT) DECLARE_DISPLAY_ITEM_TYPE(MASK) DECLARE_DISPLAY_ITEM_TYPE(FILTER) DECLARE_DISPLAY_ITEM_TYPE(SVG_OUTER_SVG) -DECLARE_DISPLAY_ITEM_TYPE(SVG_PATH_GEOMETRY) +DECLARE_DISPLAY_ITEM_TYPE(SVG_GEOMETRY) DECLARE_DISPLAY_ITEM_TYPE(SVG_TEXT) DECLARE_DISPLAY_ITEM_TYPE(TABLE_CELL_BACKGROUND) DECLARE_DISPLAY_ITEM_TYPE(TABLE_CELL_SELECTION) diff --git a/layout/generic/nsFrameIdList.h b/layout/generic/nsFrameIdList.h index 6be4309b81..1c22d7ea7f 100644 --- a/layout/generic/nsFrameIdList.h +++ b/layout/generic/nsFrameIdList.h @@ -153,7 +153,7 @@ FRAME_ID(nsSVGMaskFrame) FRAME_ID(nsSVGOuterSVGFrame) FRAME_ID(nsSVGOuterSVGAnonChildFrame) FRAME_ID(nsSVGPaintServerFrame) -FRAME_ID(nsSVGPathGeometryFrame) +FRAME_ID(SVGGeometryFrame) FRAME_ID(nsSVGPatternFrame) FRAME_ID(nsSVGRadialGradientFrame) FRAME_ID(nsSVGStopFrame) diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index 9de0f13c00..334a6e99a8 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -929,7 +929,7 @@ nsStyleSVG::CalcDifference(const nsStyleSVG& aNewData) const if (!DefinitelyEqualURIs(mMarkerEnd, aNewData.mMarkerEnd) || !DefinitelyEqualURIs(mMarkerMid, aNewData.mMarkerMid) || !DefinitelyEqualURIs(mMarkerStart, aNewData.mMarkerStart)) { - // Markers currently contribute to nsSVGPathGeometryFrame::mRect, + // Markers currently contribute to SVGGeometryFrame::mRect, // so we need a reflow as well as a repaint. No intrinsic sizes need // to change, so nsChangeHint_NeedReflow is sufficient. return nsChangeHint_UpdateEffects | @@ -950,7 +950,7 @@ nsStyleSVG::CalcDifference(const nsStyleSVG& aNewData) const // stroke (in which case whether we have fill or not is significant to frame // bounds) and whether we have fill or not just changed. In either case we // need to reflow so the frame rect is updated. - // XXXperf this is a waste on non nsSVGPathGeometryFrames. + // XXXperf this is a waste on non SVGGeometryFrames. hint |= nsChangeHint_NeedReflow | nsChangeHint_NeedDirtyReflow; // XXX remove me: bug 876085 } @@ -960,10 +960,10 @@ nsStyleSVG::CalcDifference(const nsStyleSVG& aNewData) const } } - // Stroke currently contributes to nsSVGPathGeometryFrame::mRect, so + // Stroke currently contributes to SVGGeometryFrame::mRect, so // we need a reflow here. No intrinsic sizes need to change, so // nsChangeHint_NeedReflow is sufficient. - // Note that stroke-dashoffset does not affect nsSVGPathGeometryFrame::mRect. + // Note that stroke-dashoffset does not affect SVGGeometryFrame::mRect. // text-anchor changes also require a reflow since it changes frames' rects. if (mStrokeWidth != aNewData.mStrokeWidth || mStrokeMiterlimit != aNewData.mStrokeMiterlimit || @@ -1189,9 +1189,9 @@ nsStyleSVGReset::CalcDifference(const nsStyleSVGReset& aNewData) const // XXXjwatt: why NS_STYLE_HINT_REFLOW? Isn't that excessive? hint |= NS_STYLE_HINT_REFLOW; } else if (mVectorEffect != aNewData.mVectorEffect) { - // Stroke currently affects nsSVGPathGeometryFrame::mRect, and + // Stroke currently affects SVGGeometryFrame::mRect, and // vector-effect affect stroke. As a result we need to reflow if - // vector-effect changes in order to have nsSVGPathGeometryFrame:: + // vector-effect changes in order to have SVGGeometryFrame:: // ReflowSVG called to update its mRect. No intrinsic sizes need // to change so nsChangeHint_NeedReflow is sufficient. hint |= nsChangeHint_NeedReflow | @@ -3962,8 +3962,8 @@ nsStyleUserInterface::CalcDifference(const nsStyleUserInterface& aNewData) const } if (mPointerEvents != aNewData.mPointerEvents) { - // nsSVGPathGeometryFrame's mRect depends on stroke _and_ on the value - // of pointer-events. See nsSVGPathGeometryFrame::ReflowSVG's use of + // SVGGeometryFrame's mRect depends on stroke _and_ on the value + // of pointer-events. See SVGGeometryFrame::ReflowSVG's use of // GetHitTestFlags. (Only a reflow, no visual change.) hint |= nsChangeHint_NeedReflow | nsChangeHint_NeedDirtyReflow; // XXX remove me: bug 876085 diff --git a/layout/svg/nsSVGPathGeometryFrame.cpp b/layout/svg/SVGGeometryFrame.cpp similarity index 87% rename from layout/svg/nsSVGPathGeometryFrame.cpp rename to layout/svg/SVGGeometryFrame.cpp index 50eec2b922..ad1d0e2fc4 100644 --- a/layout/svg/nsSVGPathGeometryFrame.cpp +++ b/layout/svg/SVGGeometryFrame.cpp @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // Main header first: -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryFrame.h" // Keep others in (case-insensitive) order: #include "gfx2DGlue.h" @@ -22,7 +22,7 @@ #include "nsSVGEffects.h" #include "nsSVGIntegrationUtils.h" #include "nsSVGMarkerFrame.h" -#include "nsSVGPathGeometryElement.h" +#include "SVGGeometryElement.h" #include "nsSVGUtils.h" #include "mozilla/ArrayUtils.h" #include "SVGAnimatedTransformList.h" @@ -37,41 +37,41 @@ using namespace mozilla::image; // Implementation nsIFrame* -NS_NewSVGPathGeometryFrame(nsIPresShell* aPresShell, - nsStyleContext* aContext) +NS_NewSVGGeometryFrame(nsIPresShell* aPresShell, + nsStyleContext* aContext) { - return new (aPresShell) nsSVGPathGeometryFrame(aContext); + return new (aPresShell) SVGGeometryFrame(aContext); } -NS_IMPL_FRAMEARENA_HELPERS(nsSVGPathGeometryFrame) +NS_IMPL_FRAMEARENA_HELPERS(SVGGeometryFrame) //---------------------------------------------------------------------- // nsQueryFrame methods -NS_QUERYFRAME_HEAD(nsSVGPathGeometryFrame) +NS_QUERYFRAME_HEAD(SVGGeometryFrame) NS_QUERYFRAME_ENTRY(nsISVGChildFrame) - NS_QUERYFRAME_ENTRY(nsSVGPathGeometryFrame) + NS_QUERYFRAME_ENTRY(SVGGeometryFrame) NS_QUERYFRAME_TAIL_INHERITING(nsFrame) //---------------------------------------------------------------------- // Display list item: -class nsDisplaySVGPathGeometry : public nsDisplayItem { +class nsDisplaySVGGeometry : public nsDisplayItem { public: - nsDisplaySVGPathGeometry(nsDisplayListBuilder* aBuilder, - nsSVGPathGeometryFrame* aFrame) + nsDisplaySVGGeometry(nsDisplayListBuilder* aBuilder, + SVGGeometryFrame* aFrame) : nsDisplayItem(aBuilder, aFrame) { - MOZ_COUNT_CTOR(nsDisplaySVGPathGeometry); + MOZ_COUNT_CTOR(nsDisplaySVGGeometry); MOZ_ASSERT(aFrame, "Must have a frame!"); } #ifdef NS_BUILD_REFCNT_LOGGING - virtual ~nsDisplaySVGPathGeometry() { - MOZ_COUNT_DTOR(nsDisplaySVGPathGeometry); + virtual ~nsDisplaySVGGeometry() { + MOZ_COUNT_DTOR(nsDisplaySVGGeometry); } #endif - NS_DISPLAY_DECL_NAME("nsDisplaySVGPathGeometry", TYPE_SVG_PATH_GEOMETRY) + NS_DISPLAY_DECL_NAME("nsDisplaySVGGeometry", TYPE_SVG_GEOMETRY) virtual void HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect, HitTestState* aState, nsTArray *aOutFrames) override; @@ -89,10 +89,10 @@ public: }; void -nsDisplaySVGPathGeometry::HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect, - HitTestState* aState, nsTArray *aOutFrames) +nsDisplaySVGGeometry::HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect, + HitTestState* aState, nsTArray *aOutFrames) { - nsSVGPathGeometryFrame *frame = static_cast(mFrame); + SVGGeometryFrame *frame = static_cast(mFrame); nsPoint pointRelativeToReferenceFrame = aRect.Center(); // ToReferenceFrame() includes frame->GetPosition(), our user space position. nsPoint userSpacePtInAppUnits = pointRelativeToReferenceFrame - @@ -106,8 +106,8 @@ nsDisplaySVGPathGeometry::HitTest(nsDisplayListBuilder* aBuilder, const nsRect& } void -nsDisplaySVGPathGeometry::Paint(nsDisplayListBuilder* aBuilder, - nsRenderingContext* aCtx) +nsDisplaySVGGeometry::Paint(nsDisplayListBuilder* aBuilder, + nsRenderingContext* aCtx) { uint32_t appUnitsPerDevPixel = mFrame->PresContext()->AppUnitsPerDevPixel(); @@ -122,13 +122,13 @@ nsDisplaySVGPathGeometry::Paint(nsDisplayListBuilder* aBuilder, gfxMatrix tm = nsSVGIntegrationUtils::GetCSSPxToDevPxMatrix(mFrame) * gfxMatrix::Translation(devPixelOffset); DrawResult result = - static_cast(mFrame)->PaintSVG(*aCtx->ThebesContext(), tm); + static_cast(mFrame)->PaintSVG(*aCtx->ThebesContext(), tm); nsDisplayItemGenericImageGeometry::UpdateDrawResult(this, result); } void -nsDisplaySVGPathGeometry::ComputeInvalidationRegion( +nsDisplaySVGGeometry::ComputeInvalidationRegion( nsDisplayListBuilder* aBuilder, const nsDisplayItemGeometry* aGeometry, nsRegion* aInvalidRegion) @@ -145,22 +145,24 @@ nsDisplaySVGPathGeometry::ComputeInvalidationRegion( nsDisplayItem::ComputeInvalidationRegion(aBuilder, aGeometry, aInvalidRegion); } +namespace mozilla { + //---------------------------------------------------------------------- // nsIFrame methods void -nsSVGPathGeometryFrame::Init(nsIContent* aContent, - nsContainerFrame* aParent, - nsIFrame* aPrevInFlow) +SVGGeometryFrame::Init(nsIContent* aContent, + nsContainerFrame* aParent, + nsIFrame* aPrevInFlow) { AddStateBits(aParent->GetStateBits() & NS_STATE_SVG_CLIPPATH_CHILD); nsFrame::Init(aContent, aParent, aPrevInFlow); } nsresult -nsSVGPathGeometryFrame::AttributeChanged(int32_t aNameSpaceID, - nsIAtom* aAttribute, - int32_t aModType) +SVGGeometryFrame::AttributeChanged(int32_t aNameSpaceID, + nsIAtom* aAttribute, + int32_t aModType) { // We don't invalidate for transform changes (the layers code does that). // Also note that SVGTransformableElement::GetAttributeChangeHint will @@ -168,7 +170,7 @@ nsSVGPathGeometryFrame::AttributeChanged(int32_t aNameSpaceID, // and cause DoApplyRenderingChangeToTree to make the SchedulePaint call. if (aNameSpaceID == kNameSpaceID_None && - (static_cast + (static_cast (mContent)->AttributeDefinesGeometry(aAttribute))) { nsLayoutUtils::PostRestyleEvent( mContent->AsElement(), nsRestyleHint(0), @@ -179,7 +181,7 @@ nsSVGPathGeometryFrame::AttributeChanged(int32_t aNameSpaceID, } /* virtual */ void -nsSVGPathGeometryFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext) +SVGGeometryFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext) { nsFrame::DidSetStyleContext(aOldStyleContext); @@ -193,8 +195,8 @@ nsSVGPathGeometryFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext) InvalidateFrame(); } - nsSVGPathGeometryElement* element = - static_cast(mContent); + SVGGeometryElement* element = + static_cast(mContent); auto oldStyleSVG = aOldStyleContext->PeekStyleSVG(); if (oldStyleSVG && !SVGContentUtils::ShapeTypeHasNoCorners(mContent)) { @@ -222,14 +224,14 @@ nsSVGPathGeometryFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext) } nsIAtom * -nsSVGPathGeometryFrame::GetType() const +SVGGeometryFrame::GetType() const { - return nsGkAtoms::svgPathGeometryFrame; + return nsGkAtoms::svgGeometryFrame; } bool -nsSVGPathGeometryFrame::IsSVGTransformed(gfx::Matrix *aOwnTransform, - gfx::Matrix *aFromParentTransform) const +SVGGeometryFrame::IsSVGTransformed(gfx::Matrix *aOwnTransform, + gfx::Matrix *aFromParentTransform) const { bool foundTransform = false; @@ -258,8 +260,8 @@ nsSVGPathGeometryFrame::IsSVGTransformed(gfx::Matrix *aOwnTransform, } void -nsSVGPathGeometryFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, - const nsDisplayListSet& aLists) +SVGGeometryFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, + const nsDisplayListSet& aLists) { if (!static_cast(mContent)->HasValidDimensions() || (!IsVisibleForPainting(aBuilder) && aBuilder->IsForPainting())) { @@ -267,16 +269,16 @@ nsSVGPathGeometryFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, } DisplayOutline(aBuilder, aLists); aLists.Content()->AppendNewToTop( - new (aBuilder) nsDisplaySVGPathGeometry(aBuilder, this)); + new (aBuilder) nsDisplaySVGGeometry(aBuilder, this)); } //---------------------------------------------------------------------- // nsISVGChildFrame methods DrawResult -nsSVGPathGeometryFrame::PaintSVG(gfxContext& aContext, - const gfxMatrix& aTransform, - const nsIntRect* aDirtyRect) +SVGGeometryFrame::PaintSVG(gfxContext& aContext, + const gfxMatrix& aTransform, + const nsIntRect* aDirtyRect) { if (!StyleVisibility()->IsVisible()) return DrawResult::SUCCESS; @@ -322,7 +324,7 @@ nsSVGPathGeometryFrame::PaintSVG(gfxContext& aContext, } nsIFrame* -nsSVGPathGeometryFrame::GetFrameForPoint(const gfxPoint& aPoint) +SVGGeometryFrame::GetFrameForPoint(const gfxPoint& aPoint) { FillRule fillRule; uint16_t hitTestFlags; @@ -346,8 +348,8 @@ nsSVGPathGeometryFrame::GetFrameForPoint(const gfxPoint& aPoint) bool isHit = false; - nsSVGPathGeometryElement* content = - static_cast(mContent); + SVGGeometryElement* content = + static_cast(mContent); // Using ScreenReferenceDrawTarget() opens us to Moz2D backend specific hit- // testing bugs. Maybe we should use a BackendType::CAIRO DT for hit-testing @@ -387,7 +389,7 @@ nsSVGPathGeometryFrame::GetFrameForPoint(const gfxPoint& aPoint) } nsRect -nsSVGPathGeometryFrame::GetCoveredRegion() +SVGGeometryFrame::GetCoveredRegion() { gfxMatrix canvasTM = GetCanvasTM(); if (canvasTM.PreservesAxisAlignedRectangles()) { @@ -409,7 +411,7 @@ nsSVGPathGeometryFrame::GetCoveredRegion() } void -nsSVGPathGeometryFrame::ReflowSVG() +SVGGeometryFrame::ReflowSVG() { NS_ASSERTION(nsSVGUtils::OuterSVGIsCallingReflowSVG(this), "This call is probably a wasteful mistake"); @@ -463,7 +465,7 @@ nsSVGPathGeometryFrame::ReflowSVG() } void -nsSVGPathGeometryFrame::NotifySVGChanged(uint32_t aFlags) +SVGGeometryFrame::NotifySVGChanged(uint32_t aFlags) { MOZ_ASSERT(aFlags & (TRANSFORM_CHANGED | COORD_CONTEXT_CHANGED), "Invalidation logic may need adjusting"); @@ -487,9 +489,9 @@ nsSVGPathGeometryFrame::NotifySVGChanged(uint32_t aFlags) // of stroke-dashoffset since, although that can have a percentage value // that is resolved against our coordinate context, it does not affect our // mRect. - if (static_cast(mContent)->GeometryDependsOnCoordCtx() || + if (static_cast(mContent)->GeometryDependsOnCoordCtx() || StyleSVG()->mStrokeWidth.HasPercent()) { - static_cast(mContent)->ClearAnyCachedPath(); + static_cast(mContent)->ClearAnyCachedPath(); nsSVGUtils::ScheduleReflowSVG(this); } } @@ -502,8 +504,8 @@ nsSVGPathGeometryFrame::NotifySVGChanged(uint32_t aFlags) } SVGBBox -nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, - uint32_t aFlags) +SVGGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, + uint32_t aFlags) { SVGBBox bbox; @@ -512,8 +514,8 @@ nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, return bbox; } - nsSVGPathGeometryElement* element = - static_cast(mContent); + SVGGeometryElement* element = + static_cast(mContent); bool getFill = (aFlags & nsSVGUtils::eBBoxIncludeFillGeometry) || ((aFlags & nsSVGUtils::eBBoxIncludeFill) && @@ -629,7 +631,7 @@ nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, // // Second, the way we account for non-scaling-stroke by transforming the // path using the transform to the outer- element is not compatible - // with the way that nsSVGPathGeometryFrame::Reflow() inserts a scale + // with the way that SVGGeometryFrame::Reflow() inserts a scale // into aToBBoxUserspace and then scales the bounds that we return. SVGContentUtils::AutoStrokeOptions strokeOptions; SVGContentUtils::GetStrokeOptions(&strokeOptions, element, @@ -666,14 +668,14 @@ nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, // Account for markers: if ((aFlags & nsSVGUtils::eBBoxIncludeMarkers) != 0 && - static_cast(mContent)->IsMarkable()) { + static_cast(mContent)->IsMarkable()) { float strokeWidth = nsSVGUtils::GetStrokeWidth(this); MarkerProperties properties = GetMarkerProperties(this); if (properties.MarkersExist()) { nsTArray marks; - static_cast(mContent)->GetMarkPoints(&marks); + static_cast(mContent)->GetMarkPoints(&marks); uint32_t num = marks.Length(); // These are in the same order as the nsSVGMark::Type constants. @@ -703,10 +705,10 @@ nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, } //---------------------------------------------------------------------- -// nsSVGPathGeometryFrame methods: +// SVGGeometryFrame methods: gfxMatrix -nsSVGPathGeometryFrame::GetCanvasTM() +SVGGeometryFrame::GetCanvasTM() { NS_ASSERTION(GetParent(), "null parent"); @@ -716,8 +718,8 @@ nsSVGPathGeometryFrame::GetCanvasTM() return content->PrependLocalTransformsTo(parent->GetCanvasTM()); } -nsSVGPathGeometryFrame::MarkerProperties -nsSVGPathGeometryFrame::GetMarkerProperties(nsSVGPathGeometryFrame *aFrame) +SVGGeometryFrame::MarkerProperties +SVGGeometryFrame::GetMarkerProperties(SVGGeometryFrame *aFrame) { NS_ASSERTION(!aFrame->GetPrevContinuation(), "aFrame should be first continuation"); @@ -741,7 +743,7 @@ nsSVGPathGeometryFrame::GetMarkerProperties(nsSVGPathGeometryFrame *aFrame) } nsSVGMarkerFrame * -nsSVGPathGeometryFrame::MarkerProperties::GetMarkerStartFrame() +SVGGeometryFrame::MarkerProperties::GetMarkerStartFrame() { if (!mMarkerStart) return nullptr; @@ -750,7 +752,7 @@ nsSVGPathGeometryFrame::MarkerProperties::GetMarkerStartFrame() } nsSVGMarkerFrame * -nsSVGPathGeometryFrame::MarkerProperties::GetMarkerMidFrame() +SVGGeometryFrame::MarkerProperties::GetMarkerMidFrame() { if (!mMarkerMid) return nullptr; @@ -759,7 +761,7 @@ nsSVGPathGeometryFrame::MarkerProperties::GetMarkerMidFrame() } nsSVGMarkerFrame * -nsSVGPathGeometryFrame::MarkerProperties::GetMarkerEndFrame() +SVGGeometryFrame::MarkerProperties::GetMarkerEndFrame() { if (!mMarkerEnd) return nullptr; @@ -768,9 +770,9 @@ nsSVGPathGeometryFrame::MarkerProperties::GetMarkerEndFrame() } void -nsSVGPathGeometryFrame::Render(gfxContext* aContext, - uint32_t aRenderComponents, - const gfxMatrix& aNewTransform) +SVGGeometryFrame::Render(gfxContext* aContext, + uint32_t aRenderComponents, + const gfxMatrix& aNewTransform) { MOZ_ASSERT(!aNewTransform.IsSingular()); @@ -780,8 +782,8 @@ nsSVGPathGeometryFrame::Render(gfxContext* aContext, nsSVGUtils::ToFillRule((GetStateBits() & NS_STATE_SVG_CLIPPATH_CHILD) ? StyleSVG()->mClipRule : StyleSVG()->mFillRule); - nsSVGPathGeometryElement* element = - static_cast(mContent); + SVGGeometryElement* element = + static_cast(mContent); AntialiasMode aaMode = (StyleSVG()->mShapeRendering == NS_STYLE_SHAPE_RENDERING_OPTIMIZESPEED || @@ -806,7 +808,7 @@ nsSVGPathGeometryFrame::Render(gfxContext* aContext, return; } - nsSVGPathGeometryElement::SimplePath simplePath; + SVGGeometryElement::SimplePath simplePath; RefPtr path; element->GetAsSimplePath(&simplePath); @@ -882,19 +884,19 @@ nsSVGPathGeometryFrame::Render(gfxContext* aContext, } void -nsSVGPathGeometryFrame::PaintMarkers(gfxContext& aContext, - const gfxMatrix& aTransform) +SVGGeometryFrame::PaintMarkers(gfxContext& aContext, + const gfxMatrix& aTransform) { SVGContextPaint* contextPaint = SVGContextPaint::GetContextPaint(mContent); - if (static_cast(mContent)->IsMarkable()) { + if (static_cast(mContent)->IsMarkable()) { MarkerProperties properties = GetMarkerProperties(this); if (properties.MarkersExist()) { float strokeWidth = nsSVGUtils::GetStrokeWidth(this, contextPaint); nsTArray marks; - static_cast + static_cast (mContent)->GetMarkPoints(&marks); uint32_t num = marks.Length(); @@ -921,7 +923,8 @@ nsSVGPathGeometryFrame::PaintMarkers(gfxContext& aContext, } uint16_t -nsSVGPathGeometryFrame::GetHitTestFlags() +SVGGeometryFrame::GetHitTestFlags() { return nsSVGUtils::GetGeometryHitTestFlags(this); } +} // namespace mozilla diff --git a/layout/svg/nsSVGPathGeometryFrame.h b/layout/svg/SVGGeometryFrame.h similarity index 83% rename from layout/svg/nsSVGPathGeometryFrame.h rename to layout/svg/SVGGeometryFrame.h index d2d63f0439..f0731379f2 100644 --- a/layout/svg/nsSVGPathGeometryFrame.h +++ b/layout/svg/SVGGeometryFrame.h @@ -3,8 +3,8 @@ * 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 __NS_SVGPATHGEOMETRYFRAME_H__ -#define __NS_SVGPATHGEOMETRYFRAME_H__ +#ifndef __SVGGEOMETRYFRAME_H__ +#define __SVGGEOMETRYFRAME_H__ #include "mozilla/Attributes.h" #include "gfxMatrix.h" @@ -16,13 +16,14 @@ #include "nsSVGUtils.h" namespace mozilla { +class SVGGeometryFrame; namespace gfx { class DrawTarget; } // namespace gfx } // namespace mozilla class gfxContext; -class nsDisplaySVGPathGeometry; +class nsDisplaySVGGeometry; class nsIAtom; class nsIFrame; class nsIPresShell; @@ -32,25 +33,30 @@ class nsSVGMarkerProperty; struct nsRect; -class nsSVGPathGeometryFrame : public nsFrame - , public nsISVGChildFrame +nsIFrame* +NS_NewSVGGeometryFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); + +namespace mozilla { + +class SVGGeometryFrame : public nsFrame + , public nsISVGChildFrame { typedef mozilla::gfx::DrawTarget DrawTarget; friend nsIFrame* - NS_NewSVGPathGeometryFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); + ::NS_NewSVGGeometryFrame(nsIPresShell* aPresShell, nsStyleContext* aContext); - friend class nsDisplaySVGPathGeometry; + friend class ::nsDisplaySVGGeometry; protected: - explicit nsSVGPathGeometryFrame(nsStyleContext* aContext) + explicit SVGGeometryFrame(nsStyleContext* aContext) : nsFrame(aContext) { AddStateBits(NS_FRAME_SVG_LAYOUT | NS_FRAME_MAY_BE_TRANSFORMED); } public: - NS_DECL_QUERYFRAME_TARGET(nsSVGPathGeometryFrame) + NS_DECL_QUERYFRAME_TARGET(SVGGeometryFrame) NS_DECL_QUERYFRAME NS_DECL_FRAMEARENA_HELPERS @@ -73,7 +79,7 @@ public: /** * Get the "type" of the frame * - * @see nsGkAtoms::svgPathGeometryFrame + * @see nsGkAtoms::svgGeometryFrame */ virtual nsIAtom* GetType() const override; @@ -83,14 +89,14 @@ public: #ifdef DEBUG_FRAME_DUMP virtual nsresult GetFrameName(nsAString& aResult) const override { - return MakeFrameName(NS_LITERAL_STRING("SVGPathGeometry"), aResult); + return MakeFrameName(NS_LITERAL_STRING("SVGGeometry"), aResult); } #endif virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) override; - // nsSVGPathGeometryFrame methods + // SVGGeometryFrame methods gfxMatrix GetCanvasTM(); protected: // nsISVGChildFrame interface: @@ -140,7 +146,8 @@ private: /** * @param aFrame should be the first continuation */ - static MarkerProperties GetMarkerProperties(nsSVGPathGeometryFrame *aFrame); + static MarkerProperties GetMarkerProperties(SVGGeometryFrame *aFrame); }; +} // namespace mozilla -#endif // __NS_SVGPATHGEOMETRYFRAME_H__ +#endif // __SVGGEOMETRYFRAME_H__ diff --git a/layout/svg/moz.build b/layout/svg/moz.build index b6575862fa..63e15407bd 100644 --- a/layout/svg/moz.build +++ b/layout/svg/moz.build @@ -40,7 +40,6 @@ UNIFIED_SOURCES += [ 'nsSVGMarkerFrame.cpp', 'nsSVGMaskFrame.cpp', 'nsSVGOuterSVGFrame.cpp', - 'nsSVGPathGeometryFrame.cpp', 'nsSVGPatternFrame.cpp', 'nsSVGStopFrame.cpp', 'nsSVGSwitchFrame.cpp', @@ -51,6 +50,7 @@ UNIFIED_SOURCES += [ 'SVGFEImageFrame.cpp', 'SVGFELeafFrame.cpp', 'SVGFEUnstyledLeafFrame.cpp', + 'SVGGeometryFrame.cpp', 'SVGTextFrame.cpp', 'SVGViewFrame.cpp', ] diff --git a/layout/svg/nsSVGClipPathFrame.cpp b/layout/svg/nsSVGClipPathFrame.cpp index a619ac9a4e..68a091fa40 100644 --- a/layout/svg/nsSVGClipPathFrame.cpp +++ b/layout/svg/nsSVGClipPathFrame.cpp @@ -11,8 +11,8 @@ #include "mozilla/dom/SVGClipPathElement.h" #include "nsGkAtoms.h" #include "nsSVGEffects.h" -#include "nsSVGPathGeometryElement.h" -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryElement.h" +#include "SVGGeometryFrame.h" #include "nsSVGUtils.h" using namespace mozilla; @@ -54,10 +54,10 @@ nsSVGClipPathFrame::ApplyClipPath(gfxContext& aContext, IsTrivial(&singleClipPathChild); if (singleClipPathChild) { - nsSVGPathGeometryFrame* pathFrame = do_QueryFrame(singleClipPathChild); + SVGGeometryFrame* pathFrame = do_QueryFrame(singleClipPathChild); if (pathFrame) { - nsSVGPathGeometryElement* pathElement = - static_cast(pathFrame->GetContent()); + SVGGeometryElement* pathElement = + static_cast(pathFrame->GetContent()); gfxMatrix toChildsUserSpace = pathElement-> PrependLocalTransformsTo(GetClipPathTransform(aClippedFrame) * aMatrix, eUserSpaceToParent); @@ -214,7 +214,7 @@ nsSVGClipPathFrame::GetClipMask(gfxContext& aReferenceContext, } // Our children have NS_STATE_SVG_CLIPPATH_CHILD set on them, and - // nsSVGPathGeometryFrame::Render checks for that state bit and paints + // SVGGeometryFrame::Render checks for that state bit and paints // only the geometry (opaque black) if set. DrawResult result = SVGFrame->PaintSVG(*ctx, toChildsUserSpace); if (aResult) { @@ -394,7 +394,7 @@ nsSVGClipPathFrame::IsValid() nsIAtom* grandKidType = grandKid->GetType(); - if (grandKidType != nsGkAtoms::svgPathGeometryFrame && + if (grandKidType != nsGkAtoms::svgGeometryFrame && grandKidType != nsGkAtoms::svgTextFrame) { return false; } @@ -402,7 +402,7 @@ nsSVGClipPathFrame::IsValid() continue; } - if (kidType != nsGkAtoms::svgPathGeometryFrame && + if (kidType != nsGkAtoms::svgGeometryFrame && kidType != nsGkAtoms::svgTextFrame) { return false; } diff --git a/layout/svg/nsSVGEffects.cpp b/layout/svg/nsSVGEffects.cpp index 63fd215190..0fb68ddd1b 100644 --- a/layout/svg/nsSVGEffects.cpp +++ b/layout/svg/nsSVGEffects.cpp @@ -12,11 +12,11 @@ #include "nsISupportsImpl.h" #include "nsSVGClipPathFrame.h" #include "nsSVGPaintServerFrame.h" -#include "nsSVGPathGeometryElement.h" #include "nsSVGFilterFrame.h" #include "nsSVGMaskFrame.h" #include "nsIReflowCallback.h" #include "nsCycleCollectionParticipant.h" +#include "SVGGeometryElement.h" #include "SVGUseElement.h" using namespace mozilla; @@ -523,8 +523,8 @@ nsSVGMarkerProperty* nsSVGEffects::GetMarkerProperty(nsIURI* aURI, nsIFrame* aFrame, const mozilla::FramePropertyDescriptor* aProperty) { - MOZ_ASSERT(aFrame->GetType() == nsGkAtoms::svgPathGeometryFrame && - static_cast(aFrame->GetContent())->IsMarkable(), + MOZ_ASSERT(aFrame->GetType() == nsGkAtoms::svgGeometryFrame && + static_cast(aFrame->GetContent())->IsMarkable(), "Bad frame"); return GetEffectProperty(aURI, aFrame, aProperty); } @@ -700,8 +700,8 @@ nsSVGEffects::UpdateEffects(nsIFrame* aFrame) // We can't do that in DoUpdate as the referenced frame may not be valid GetOrCreateFilterProperty(aFrame); - if (aFrame->GetType() == nsGkAtoms::svgPathGeometryFrame && - static_cast(aFrame->GetContent())->IsMarkable()) { + if (aFrame->GetType() == nsGkAtoms::svgGeometryFrame && + static_cast(aFrame->GetContent())->IsMarkable()) { // Set marker properties here to avoid reference loops nsCOMPtr markerURL = GetMarkerURI(aFrame, &nsStyleSVG::mMarkerStart); diff --git a/layout/svg/nsSVGImageFrame.cpp b/layout/svg/nsSVGImageFrame.cpp index 2d6f75d267..1d05b023db 100644 --- a/layout/svg/nsSVGImageFrame.cpp +++ b/layout/svg/nsSVGImageFrame.cpp @@ -13,10 +13,10 @@ #include "nsLayoutUtils.h" #include "imgINotificationObserver.h" #include "nsSVGEffects.h" -#include "nsSVGPathGeometryFrame.h" #include "mozilla/dom/SVGSVGElement.h" #include "nsSVGUtils.h" #include "SVGContentUtils.h" +#include "SVGGeometryFrame.h" #include "SVGImageContext.h" #include "mozilla/dom/SVGImageElement.h" #include "nsContentUtils.h" @@ -46,7 +46,7 @@ private: nsSVGImageFrame *mFrame; }; -class nsSVGImageFrame : public nsSVGPathGeometryFrame +class nsSVGImageFrame : public SVGGeometryFrame , public nsIReflowCallback { friend nsIFrame* @@ -54,7 +54,7 @@ class nsSVGImageFrame : public nsSVGPathGeometryFrame protected: explicit nsSVGImageFrame(nsStyleContext* aContext) - : nsSVGPathGeometryFrame(aContext) + : SVGGeometryFrame(aContext) , mReflowCallbackPosted(false) { EnableVisibilityTracking(); @@ -72,7 +72,7 @@ public: virtual nsIFrame* GetFrameForPoint(const gfxPoint& aPoint) override; virtual void ReflowSVG() override; - // nsSVGPathGeometryFrame methods: + // SVGGeometryFrame methods: virtual uint16_t GetHitTestFlags() override; // nsIFrame interface: @@ -154,7 +154,7 @@ nsSVGImageFrame::Init(nsIContent* aContent, NS_ASSERTION(aContent->IsSVGElement(nsGkAtoms::image), "Content is not an SVG image!"); - nsSVGPathGeometryFrame::Init(aContent, aParent, aPrevInFlow); + SVGGeometryFrame::Init(aContent, aParent, aPrevInFlow); if (GetStateBits() & NS_FRAME_IS_NONDISPLAY) { // Non-display frames are likely to be patterns, masks or the like. @@ -246,8 +246,8 @@ nsSVGImageFrame::AttributeChanged(int32_t aNameSpaceID, } } - return nsSVGPathGeometryFrame::AttributeChanged(aNameSpaceID, - aAttribute, aModType); + return SVGGeometryFrame::AttributeChanged(aNameSpaceID, + aAttribute, aModType); } void @@ -256,13 +256,13 @@ nsSVGImageFrame::OnVisibilityChange(Visibility aNewVisibility, { nsCOMPtr imageLoader = do_QueryInterface(mContent); if (!imageLoader) { - nsSVGPathGeometryFrame::OnVisibilityChange(aNewVisibility, aNonvisibleAction); + SVGGeometryFrame::OnVisibilityChange(aNewVisibility, aNonvisibleAction); return; } imageLoader->OnVisibilityChange(aNewVisibility, aNonvisibleAction); - nsSVGPathGeometryFrame::OnVisibilityChange(aNewVisibility, aNonvisibleAction); + SVGGeometryFrame::OnVisibilityChange(aNewVisibility, aNonvisibleAction); } gfx::Matrix @@ -505,7 +505,7 @@ nsSVGImageFrame::GetType() const } //---------------------------------------------------------------------- -// nsSVGPathGeometryFrame methods: +// SVGGeometryFrame methods: // Lie about our fill/stroke so that covered region and hit detection work properly diff --git a/layout/svg/nsSVGMarkerFrame.cpp b/layout/svg/nsSVGMarkerFrame.cpp index af19cc0251..195b2304f3 100644 --- a/layout/svg/nsSVGMarkerFrame.cpp +++ b/layout/svg/nsSVGMarkerFrame.cpp @@ -10,8 +10,8 @@ #include "gfxContext.h" #include "nsSVGEffects.h" #include "mozilla/dom/SVGMarkerElement.h" -#include "nsSVGPathGeometryElement.h" -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryElement.h" +#include "SVGGeometryFrame.h" using namespace mozilla::dom; using namespace mozilla::gfx; @@ -73,7 +73,7 @@ nsSVGMarkerFrame::GetType() const gfxMatrix nsSVGMarkerFrame::GetCanvasTM() { - NS_ASSERTION(mMarkedFrame, "null nsSVGPathGeometry frame"); + NS_ASSERTION(mMarkedFrame, "null SVGGeometry frame"); if (mInUse2) { // We're going to be bailing drawing the marker, so return an identity. @@ -105,7 +105,7 @@ GetAnonymousChildFrame(nsIFrame* aFrame) nsresult nsSVGMarkerFrame::PaintMark(gfxContext& aContext, const gfxMatrix& aToMarkedFrameUserSpace, - nsSVGPathGeometryFrame *aMarkedFrame, + SVGGeometryFrame *aMarkedFrame, nsSVGMark *aMark, float aStrokeWidth) { // If the flag is set when we get here, it means this marker frame @@ -166,7 +166,7 @@ nsSVGMarkerFrame::PaintMark(gfxContext& aContext, SVGBBox nsSVGMarkerFrame::GetMarkBBoxContribution(const Matrix &aToBBoxUserspace, uint32_t aFlags, - nsSVGPathGeometryFrame *aMarkedFrame, + SVGGeometryFrame *aMarkedFrame, const nsSVGMark *aMark, float aStrokeWidth) { @@ -227,7 +227,7 @@ nsSVGMarkerFrame::SetParentCoordCtxProvider(SVGSVGElement *aContext) nsSVGMarkerFrame::AutoMarkerReferencer::AutoMarkerReferencer( nsSVGMarkerFrame *aFrame, - nsSVGPathGeometryFrame *aMarkedFrame + SVGGeometryFrame *aMarkedFrame MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL) : mFrame(aFrame) { diff --git a/layout/svg/nsSVGMarkerFrame.h b/layout/svg/nsSVGMarkerFrame.h index 187aed1403..9205064475 100644 --- a/layout/svg/nsSVGMarkerFrame.h +++ b/layout/svg/nsSVGMarkerFrame.h @@ -16,9 +16,9 @@ #include "nsSVGUtils.h" class gfxContext; -class nsSVGPathGeometryFrame; namespace mozilla { +class SVGGeometryFrame; namespace dom { class SVGSVGElement; } // namespace dom @@ -83,19 +83,19 @@ public: // nsSVGMarkerFrame methods: nsresult PaintMark(gfxContext& aContext, const gfxMatrix& aToMarkedFrameUserSpace, - nsSVGPathGeometryFrame *aMarkedFrame, + SVGGeometryFrame *aMarkedFrame, nsSVGMark *aMark, float aStrokeWidth); SVGBBox GetMarkBBoxContribution(const Matrix &aToBBoxUserspace, uint32_t aFlags, - nsSVGPathGeometryFrame *aMarkedFrame, + SVGGeometryFrame *aMarkedFrame, const nsSVGMark *aMark, float aStrokeWidth); private: // stuff needed for callback - nsSVGPathGeometryFrame *mMarkedFrame; + SVGGeometryFrame *mMarkedFrame; float mStrokeWidth, mX, mY, mAutoAngle; bool mIsStart; // whether the callback is for a marker-start marker @@ -111,7 +111,7 @@ private: { public: AutoMarkerReferencer(nsSVGMarkerFrame *aFrame, - nsSVGPathGeometryFrame *aMarkedFrame + SVGGeometryFrame *aMarkedFrame MOZ_GUARD_OBJECT_NOTIFIER_PARAM); ~AutoMarkerReferencer(); private: diff --git a/layout/svg/nsSVGPatternFrame.cpp b/layout/svg/nsSVGPatternFrame.cpp index 2cd7eeaadf..43162274b9 100644 --- a/layout/svg/nsSVGPatternFrame.cpp +++ b/layout/svg/nsSVGPatternFrame.cpp @@ -18,7 +18,7 @@ #include "nsISVGChildFrame.h" #include "nsStyleContext.h" #include "nsSVGEffects.h" -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryFrame.h" #include "mozilla/dom/SVGPatternElement.h" #include "nsSVGUtils.h" #include "nsSVGAnimatedTransformList.h" @@ -392,7 +392,7 @@ nsSVGPatternFrame::PaintPattern(const DrawTarget* aDrawTarget, if (aSource->IsFrameOfType(nsIFrame::eSVGGeometry)) { // Set the geometrical parent of the pattern we are rendering - patternWithChildren->mSource = static_cast(aSource); + patternWithChildren->mSource = static_cast(aSource); } // Delay checking NS_FRAME_DRAWING_AS_PAINTSERVER bit until here so we can diff --git a/layout/svg/nsSVGPatternFrame.h b/layout/svg/nsSVGPatternFrame.h index 7c3cd1ad18..0b90bc0f04 100644 --- a/layout/svg/nsSVGPatternFrame.h +++ b/layout/svg/nsSVGPatternFrame.h @@ -15,11 +15,11 @@ class nsIFrame; class nsSVGLength2; -class nsSVGPathGeometryFrame; class nsSVGViewBox; namespace mozilla { class SVGAnimatedPreserveAspectRatio; +class SVGGeometryFrame; class nsSVGAnimatedTransformList; } // namespace mozilla @@ -142,7 +142,7 @@ private: // this is a *temporary* reference to the frame of the element currently // referencing our pattern. This must be temporary because different // referencing frames will all reference this one frame - nsSVGPathGeometryFrame *mSource; + SVGGeometryFrame *mSource; nsAutoPtr mCTM; protected: diff --git a/layout/svg/nsSVGUtils.cpp b/layout/svg/nsSVGUtils.cpp index 103a4ce1ad..fb1a8f3b9f 100644 --- a/layout/svg/nsSVGUtils.cpp +++ b/layout/svg/nsSVGUtils.cpp @@ -46,8 +46,8 @@ #include "nsSVGOuterSVGFrame.h" #include "mozilla/dom/SVGClipPathElement.h" #include "mozilla/dom/SVGPathElement.h" -#include "nsSVGPathGeometryElement.h" -#include "nsSVGPathGeometryFrame.h" +#include "SVGGeometryElement.h" +#include "SVGGeometryFrame.h" #include "nsSVGPaintServerFrame.h" #include "mozilla/dom/SVGSVGElement.h" #include "nsTextFrame.h" @@ -415,7 +415,7 @@ nsSVGUtils::GetCanvasTM(nsIFrame *aFrame) return containerFrame->GetCanvasTM(); } - return static_cast(aFrame)->GetCanvasTM(); + return static_cast(aFrame)->GetCanvasTM(); } gfxMatrix @@ -1223,7 +1223,7 @@ nsSVGUtils::CanOptimizeOpacity(nsIFrame *aFrame) } nsIAtom *type = aFrame->GetType(); if (type != nsGkAtoms::svgImageFrame && - type != nsGkAtoms::svgPathGeometryFrame) { + type != nsGkAtoms::svgGeometryFrame) { return false; } if (aFrame->StyleEffects()->HasFilters()) { @@ -1329,7 +1329,7 @@ nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents, /*static*/ gfxRect nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents, - nsSVGPathGeometryFrame* aFrame, + SVGGeometryFrame* aFrame, const gfxMatrix& aMatrix) { bool strokeMayHaveCorners = diff --git a/layout/svg/nsSVGUtils.h b/layout/svg/nsSVGUtils.h index edfc43bee7..efcde8326a 100644 --- a/layout/svg/nsSVGUtils.h +++ b/layout/svg/nsSVGUtils.h @@ -39,7 +39,6 @@ class nsSVGElement; class nsSVGEnum; class nsSVGLength2; class nsSVGOuterSVGFrame; -class nsSVGPathGeometryFrame; class nsTextFrame; struct nsStyleSVG; @@ -48,6 +47,7 @@ struct nsRect; namespace mozilla { class SVGContextPaint; struct SVGContextPaintImpl; +class SVGGeometryFrame; namespace dom { class Element; class UserSpaceMetrics; @@ -186,6 +186,7 @@ public: typedef mozilla::gfx::Size Size; typedef mozilla::SVGContextPaint SVGContextPaint; typedef mozilla::SVGContextPaintImpl SVGContextPaintImpl; + typedef mozilla::SVGGeometryFrame SVGGeometryFrame; typedef mozilla::image::DrawResult DrawResult; static void Init(); @@ -482,7 +483,7 @@ public: nsTextFrame* aFrame, const gfxMatrix& aMatrix); static gfxRect PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents, - nsSVGPathGeometryFrame* aFrame, + SVGGeometryFrame* aFrame, const gfxMatrix& aMatrix); /**