forked from mirrors/gecko-dev
		
	 5b9df67d2e
			
		
	
	
		5b9df67d2e
		
	
	
	
	
		
			
			Also removes some mozilla:: where its no longer needed Note that this patch was created by running sed -e -i '.bak' 's/typedef ([a-zA-Z0-9:]+) ([a-zA-Z0-9:]+)/using \2 = \1/' and then fixing up a few cases that didn't work. Differential Revision: https://phabricator.services.mozilla.com/D83294
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.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_SVGMASKFRAME_H_
 | |
| #define LAYOUT_SVG_SVGMASKFRAME_H_
 | |
| 
 | |
| #include "mozilla/Attributes.h"
 | |
| #include "mozilla/RefPtr.h"
 | |
| #include "mozilla/SVGContainerFrame.h"
 | |
| #include "mozilla/gfx/2D.h"
 | |
| #include "gfxPattern.h"
 | |
| #include "gfxMatrix.h"
 | |
| 
 | |
| class gfxContext;
 | |
| 
 | |
| namespace mozilla {
 | |
| class PresShell;
 | |
| }  // namespace mozilla
 | |
| 
 | |
| nsIFrame* NS_NewSVGMaskFrame(mozilla::PresShell* aPresShell,
 | |
|                              mozilla::ComputedStyle* aStyle);
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| class SVGMaskFrame final : public SVGContainerFrame {
 | |
|   friend nsIFrame* ::NS_NewSVGMaskFrame(mozilla::PresShell* aPresShell,
 | |
|                                         ComputedStyle* aStyle);
 | |
| 
 | |
|   using Matrix = gfx::Matrix;
 | |
|   using SourceSurface = gfx::SourceSurface;
 | |
|   using imgDrawingParams = image::imgDrawingParams;
 | |
| 
 | |
|  protected:
 | |
|   explicit SVGMaskFrame(ComputedStyle* aStyle, nsPresContext* aPresContext)
 | |
|       : SVGContainerFrame(aStyle, aPresContext, kClassID), mInUse(false) {
 | |
|     AddStateBits(NS_FRAME_IS_NONDISPLAY);
 | |
|   }
 | |
| 
 | |
|  public:
 | |
|   NS_DECL_FRAMEARENA_HELPERS(SVGMaskFrame)
 | |
| 
 | |
|   struct MaskParams {
 | |
|     gfxContext* ctx;
 | |
|     nsIFrame* maskedFrame;
 | |
|     const gfxMatrix& toUserSpace;
 | |
|     float opacity;
 | |
|     StyleMaskMode maskMode;
 | |
|     imgDrawingParams& imgParams;
 | |
| 
 | |
|     explicit MaskParams(gfxContext* aCtx, nsIFrame* aMaskedFrame,
 | |
|                         const gfxMatrix& aToUserSpace, float aOpacity,
 | |
|                         StyleMaskMode aMaskMode, imgDrawingParams& aImgParams)
 | |
|         : ctx(aCtx),
 | |
|           maskedFrame(aMaskedFrame),
 | |
|           toUserSpace(aToUserSpace),
 | |
|           opacity(aOpacity),
 | |
|           maskMode(aMaskMode),
 | |
|           imgParams(aImgParams) {}
 | |
|   };
 | |
| 
 | |
|   // SVGMaskFrame method:
 | |
| 
 | |
|   /**
 | |
|    * Generate a mask surface for the target frame.
 | |
|    *
 | |
|    * The return surface can be null, it's the caller's responsibility to
 | |
|    * null-check before dereferencing.
 | |
|    */
 | |
|   already_AddRefed<SourceSurface> GetMaskForMaskedFrame(MaskParams& aParams);
 | |
| 
 | |
|   gfxRect GetMaskArea(nsIFrame* aMaskedFrame);
 | |
| 
 | |
|   virtual nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
 | |
|                                     int32_t aModType) override;
 | |
| 
 | |
| #ifdef DEBUG
 | |
|   virtual void Init(nsIContent* aContent, nsContainerFrame* aParent,
 | |
|                     nsIFrame* aPrevInFlow) override;
 | |
| #endif
 | |
| 
 | |
|   virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
 | |
|                                 const nsDisplayListSet& aLists) override {}
 | |
| 
 | |
| #ifdef DEBUG_FRAME_DUMP
 | |
|   virtual nsresult GetFrameName(nsAString& aResult) const override {
 | |
|     return MakeFrameName(u"SVGMask"_ns, aResult);
 | |
|   }
 | |
| #endif
 | |
| 
 | |
|  private:
 | |
|   /**
 | |
|    * If the mask element transforms its children due to
 | |
|    * maskContentUnits="objectBoundingBox" being set on it, this function
 | |
|    * returns the resulting transform.
 | |
|    */
 | |
|   gfxMatrix GetMaskTransform(nsIFrame* aMaskedFrame);
 | |
| 
 | |
|   gfxMatrix mMatrixForChildren;
 | |
|   // recursion prevention flag
 | |
|   bool mInUse;
 | |
| 
 | |
|   // SVGContainerFrame methods:
 | |
|   virtual gfxMatrix GetCanvasTM() override;
 | |
| };
 | |
| 
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #endif  // LAYOUT_SVG_SVGMASKFRAME_H_
 |