forked from mirrors/gecko-dev
		
	 e3ebda1914
			
		
	
	
		e3ebda1914
		
	
	
	
	
		
			
			CLOSED TREE
We don't need these macros anymore, for two reasons:
1. We have static analysis to provide the same sort of checks via `MOZ_RAII`
   and friends.
2. clang now warns for the "temporary that should have been a declaration" case.
The extra requirements on class construction also show up during debug tests
as performance problems.
This change was automated by using the following sed script:
```
# Remove declarations in classes.
/MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER/d
/MOZ_GUARD_OBJECT_NOTIFIER_INIT/d
# Remove individual macros, carefully.
{
  # We don't have to worry about substrings here because the closing
  # parenthesis "anchors" the match.
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL)/)/g;
  # Remove the longer identifier first.
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT//g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM//g;
}
# Remove the actual include.
\@# *include "mozilla/GuardObjects.h"@d
```
and running:
```
find . -name \*.cpp -o -name \*.h | grep -v 'GuardObjects.h' |xargs sed -i -f script 2>/dev/null
mach clang-format
```
Differential Revision: https://phabricator.services.mozilla.com/D85168
		
	
			
		
			
				
	
	
		
			164 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | |
| /* 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 LAYOUT_SVG_SVGMARKERFRAME_H_
 | |
| #define LAYOUT_SVG_SVGMARKERFRAME_H_
 | |
| 
 | |
| #include "mozilla/Attributes.h"
 | |
| #include "mozilla/SVGContainerFrame.h"
 | |
| #include "gfxMatrix.h"
 | |
| #include "gfxRect.h"
 | |
| #include "nsIFrame.h"
 | |
| #include "nsLiteralString.h"
 | |
| #include "nsQueryFrame.h"
 | |
| 
 | |
| class gfxContext;
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| class PresShell;
 | |
| class SVGGeometryFrame;
 | |
| 
 | |
| struct SVGMark;
 | |
| 
 | |
| namespace dom {
 | |
| class SVGViewportElement;
 | |
| }  // namespace dom
 | |
| }  // namespace mozilla
 | |
| 
 | |
| nsContainerFrame* NS_NewSVGMarkerFrame(mozilla::PresShell* aPresShell,
 | |
|                                        mozilla::ComputedStyle* aStyle);
 | |
| nsContainerFrame* NS_NewSVGMarkerAnonChildFrame(mozilla::PresShell* aPresShell,
 | |
|                                                 mozilla::ComputedStyle* aStyle);
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| class SVGMarkerFrame final : public SVGContainerFrame {
 | |
|   using imgDrawingParams = image::imgDrawingParams;
 | |
| 
 | |
|   friend class SVGMarkerAnonChildFrame;
 | |
|   friend nsContainerFrame* ::NS_NewSVGMarkerFrame(
 | |
|       mozilla::PresShell* aPresShell, ComputedStyle* aStyle);
 | |
| 
 | |
|  protected:
 | |
|   explicit SVGMarkerFrame(ComputedStyle* aStyle, nsPresContext* aPresContext)
 | |
|       : SVGContainerFrame(aStyle, aPresContext, kClassID),
 | |
|         mMarkedFrame(nullptr),
 | |
|         mInUse(false),
 | |
|         mInUse2(false) {
 | |
|     AddStateBits(NS_FRAME_IS_NONDISPLAY);
 | |
|   }
 | |
| 
 | |
|  public:
 | |
|   NS_DECL_FRAMEARENA_HELPERS(SVGMarkerFrame)
 | |
| 
 | |
|   // nsIFrame interface:
 | |
| #ifdef DEBUG
 | |
|   virtual void Init(nsIContent* aContent, nsContainerFrame* aParent,
 | |
|                     nsIFrame* aPrevInFlow) override;
 | |
| #endif
 | |
| 
 | |
|   virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
 | |
|                                 const nsDisplayListSet& aLists) override {}
 | |
| 
 | |
|   virtual nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
 | |
|                                     int32_t aModType) override;
 | |
| 
 | |
| #ifdef DEBUG_FRAME_DUMP
 | |
|   virtual nsresult GetFrameName(nsAString& aResult) const override {
 | |
|     return MakeFrameName(u"SVGMarker"_ns, aResult);
 | |
|   }
 | |
| #endif
 | |
| 
 | |
|   virtual nsContainerFrame* GetContentInsertionFrame() override {
 | |
|     // Any children must be added to our single anonymous inner frame kid.
 | |
|     MOZ_ASSERT(
 | |
|         PrincipalChildList().FirstChild() &&
 | |
|             PrincipalChildList().FirstChild()->IsSVGMarkerAnonChildFrame(),
 | |
|         "Where is our anonymous child?");
 | |
|     return PrincipalChildList().FirstChild()->GetContentInsertionFrame();
 | |
|   }
 | |
| 
 | |
|   // SVGMarkerFrame methods:
 | |
|   void PaintMark(gfxContext& aContext, const gfxMatrix& aToMarkedFrameUserSpace,
 | |
|                  SVGGeometryFrame* aMarkedFrame, const SVGMark& aMark,
 | |
|                  float aStrokeWidth, imgDrawingParams& aImgParams);
 | |
| 
 | |
|   SVGBBox GetMarkBBoxContribution(const Matrix& aToBBoxUserspace,
 | |
|                                   uint32_t aFlags,
 | |
|                                   SVGGeometryFrame* aMarkedFrame,
 | |
|                                   const SVGMark& aMark, float aStrokeWidth);
 | |
| 
 | |
|   // Return our anonymous box child.
 | |
|   void AppendDirectlyOwnedAnonBoxes(nsTArray<OwnedAnonBox>& aResult) override;
 | |
| 
 | |
|  private:
 | |
|   // stuff needed for callback
 | |
|   SVGGeometryFrame* mMarkedFrame;
 | |
|   Matrix mMarkerTM;
 | |
| 
 | |
|   // SVGContainerFrame methods:
 | |
|   virtual gfxMatrix GetCanvasTM() override;
 | |
| 
 | |
|   // A helper class to allow us to paint markers safely. The helper
 | |
|   // automatically sets and clears the mInUse flag on the marker frame (to
 | |
|   // prevent nasty reference loops) as well as the reference to the marked
 | |
|   // frame and its coordinate context. It's easy to mess this up
 | |
|   // and break things, so this helper makes the code far more robust.
 | |
|   class MOZ_RAII AutoMarkerReferencer {
 | |
|    public:
 | |
|     AutoMarkerReferencer(SVGMarkerFrame* aFrame,
 | |
|                          SVGGeometryFrame* aMarkedFrame);
 | |
|     ~AutoMarkerReferencer();
 | |
| 
 | |
|    private:
 | |
|     SVGMarkerFrame* mFrame;
 | |
|   };
 | |
| 
 | |
|   // SVGMarkerFrame methods:
 | |
|   void SetParentCoordCtxProvider(dom::SVGViewportElement* aContext);
 | |
| 
 | |
|   // recursion prevention flag
 | |
|   bool mInUse;
 | |
| 
 | |
|   // second recursion prevention flag, for GetCanvasTM()
 | |
|   bool mInUse2;
 | |
| };
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////
 | |
| // nsMarkerAnonChildFrame class
 | |
| 
 | |
| class SVGMarkerAnonChildFrame final : public SVGDisplayContainerFrame {
 | |
|   friend nsContainerFrame* ::NS_NewSVGMarkerAnonChildFrame(
 | |
|       mozilla::PresShell* aPresShell, ComputedStyle* aStyle);
 | |
| 
 | |
|   explicit SVGMarkerAnonChildFrame(ComputedStyle* aStyle,
 | |
|                                    nsPresContext* aPresContext)
 | |
|       : SVGDisplayContainerFrame(aStyle, aPresContext, kClassID) {}
 | |
| 
 | |
|  public:
 | |
|   NS_DECL_FRAMEARENA_HELPERS(SVGMarkerAnonChildFrame)
 | |
| 
 | |
| #ifdef DEBUG
 | |
|   virtual void Init(nsIContent* aContent, nsContainerFrame* aParent,
 | |
|                     nsIFrame* aPrevInFlow) override;
 | |
| #endif
 | |
| 
 | |
| #ifdef DEBUG_FRAME_DUMP
 | |
|   virtual nsresult GetFrameName(nsAString& aResult) const override {
 | |
|     return MakeFrameName(u"SVGMarkerAnonChild"_ns, aResult);
 | |
|   }
 | |
| #endif
 | |
| 
 | |
|   // SVGContainerFrame methods:
 | |
|   virtual gfxMatrix GetCanvasTM() override {
 | |
|     return static_cast<SVGMarkerFrame*>(GetParent())->GetCanvasTM();
 | |
|   }
 | |
| };
 | |
| 
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #endif  // LAYOUT_SVG_SVGMARKERFRAME_H_
 |