/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrDrawContextPriv_DEFINED #define GrDrawContextPriv_DEFINED #include "GrDrawContext.h" #include "GrDrawTarget.h" #include "GrPathRendering.h" class GrFixedClip; class GrPath; struct GrUserStencilSettings; /** Class that adds methods to GrDrawContext that are only intended for use internal to Skia. This class is purely a privileged window into GrDrawContext. It should never have additional data members or virtual methods. */ class GrDrawContextPriv { public: gr_instanced::InstancedRendering* accessInstancedRendering() const { return fDrawContext->getDrawTarget()->instancedRendering(); } void clear(const GrFixedClip&, const GrColor, bool canIgnoreClip); void clearStencilClip(const GrFixedClip&, bool insideStencilMask); void stencilRect(const GrClip& clip, const GrUserStencilSettings* ss, bool useHWAA, const SkMatrix& viewMatrix, const SkRect& rect); void stencilPath(const GrClip&, bool useHWAA, const SkMatrix& viewMatrix, const GrPath*); bool drawAndStencilRect(const GrClip&, const GrUserStencilSettings*, SkRegion::Op op, bool invert, bool doAA, const SkMatrix& viewMatrix, const SkRect&); bool drawAndStencilPath(const GrClip&, const GrUserStencilSettings*, SkRegion::Op op, bool invert, bool doAA, const SkMatrix& viewMatrix, const SkPath&); SkBudgeted isBudgeted() const; void testingOnly_drawBatch(const GrPaint&, GrDrawBatch* batch, const GrUserStencilSettings* = nullptr, bool snapToCenters = false); private: explicit GrDrawContextPriv(GrDrawContext* drawContext) : fDrawContext(drawContext) {} GrDrawContextPriv(const GrRenderTargetPriv&) {} // unimpl GrDrawContextPriv& operator=(const GrRenderTargetPriv&); // unimpl // No taking addresses of this type. const GrDrawContextPriv* operator&() const; GrDrawContextPriv* operator&(); GrDrawContext* fDrawContext; friend class GrDrawContext; // to construct/copy this type. }; inline GrDrawContextPriv GrDrawContext::drawContextPriv() { return GrDrawContextPriv(this); } inline const GrDrawContextPriv GrDrawContext::drawContextPriv () const { return GrDrawContextPriv(const_cast(this)); } #endif