1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2016 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkNoDrawCanvas_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkNoDrawCanvas_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvasVirtualEnforcer.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker struct SkIRect; 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker // SkNoDrawCanvas is a helper for SkCanvas subclasses which do not need to 17*c8dee2aaSAndroid Build Coastguard Worker // actually rasterize (e.g., analysis of the draw calls). 18*c8dee2aaSAndroid Build Coastguard Worker // 19*c8dee2aaSAndroid Build Coastguard Worker // It provides the following simplifications: 20*c8dee2aaSAndroid Build Coastguard Worker // 21*c8dee2aaSAndroid Build Coastguard Worker // * not backed by any device/pixels 22*c8dee2aaSAndroid Build Coastguard Worker // * conservative clipping (clipping calls only use rectangles) 23*c8dee2aaSAndroid Build Coastguard Worker // 24*c8dee2aaSAndroid Build Coastguard Worker class SK_API SkNoDrawCanvas : public SkCanvasVirtualEnforcer<SkCanvas> { 25*c8dee2aaSAndroid Build Coastguard Worker public: 26*c8dee2aaSAndroid Build Coastguard Worker SkNoDrawCanvas(int width, int height); 27*c8dee2aaSAndroid Build Coastguard Worker SkNoDrawCanvas(const SkIRect&); 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker // Optimization to reset state to be the same as after construction. resetCanvas(int w,int h)30*c8dee2aaSAndroid Build Coastguard Worker void resetCanvas(int w, int h) { this->resetForNextPicture(SkIRect::MakeWH(w, h)); } resetCanvas(const SkIRect & rect)31*c8dee2aaSAndroid Build Coastguard Worker void resetCanvas(const SkIRect& rect) { this->resetForNextPicture(rect); } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker protected: 34*c8dee2aaSAndroid Build Coastguard Worker SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override; 35*c8dee2aaSAndroid Build Coastguard Worker bool onDoSaveBehind(const SkRect*) override; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker // No-op overrides for aborting rasterization earlier than SkNullBlitter. onDrawAnnotation(const SkRect &,const char[],SkData *)38*c8dee2aaSAndroid Build Coastguard Worker void onDrawAnnotation(const SkRect&, const char[], SkData*) override {} onDrawDRRect(const SkRRect &,const SkRRect &,const SkPaint &)39*c8dee2aaSAndroid Build Coastguard Worker void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override {} onDrawDrawable(SkDrawable *,const SkMatrix *)40*c8dee2aaSAndroid Build Coastguard Worker void onDrawDrawable(SkDrawable*, const SkMatrix*) override {} onDrawTextBlob(const SkTextBlob *,SkScalar,SkScalar,const SkPaint &)41*c8dee2aaSAndroid Build Coastguard Worker void onDrawTextBlob(const SkTextBlob*, SkScalar, SkScalar, const SkPaint&) override {} onDrawPatch(const SkPoint[12],const SkColor[4],const SkPoint[4],SkBlendMode,const SkPaint &)42*c8dee2aaSAndroid Build Coastguard Worker void onDrawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode, 43*c8dee2aaSAndroid Build Coastguard Worker const SkPaint&) override {} 44*c8dee2aaSAndroid Build Coastguard Worker onDrawPaint(const SkPaint &)45*c8dee2aaSAndroid Build Coastguard Worker void onDrawPaint(const SkPaint&) override {} onDrawBehind(const SkPaint &)46*c8dee2aaSAndroid Build Coastguard Worker void onDrawBehind(const SkPaint&) override {} onDrawPoints(PointMode,size_t,const SkPoint[],const SkPaint &)47*c8dee2aaSAndroid Build Coastguard Worker void onDrawPoints(PointMode, size_t, const SkPoint[], const SkPaint&) override {} onDrawRect(const SkRect &,const SkPaint &)48*c8dee2aaSAndroid Build Coastguard Worker void onDrawRect(const SkRect&, const SkPaint&) override {} onDrawRegion(const SkRegion &,const SkPaint &)49*c8dee2aaSAndroid Build Coastguard Worker void onDrawRegion(const SkRegion&, const SkPaint&) override {} onDrawOval(const SkRect &,const SkPaint &)50*c8dee2aaSAndroid Build Coastguard Worker void onDrawOval(const SkRect&, const SkPaint&) override {} onDrawArc(const SkRect &,SkScalar,SkScalar,bool,const SkPaint &)51*c8dee2aaSAndroid Build Coastguard Worker void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override {} onDrawRRect(const SkRRect &,const SkPaint &)52*c8dee2aaSAndroid Build Coastguard Worker void onDrawRRect(const SkRRect&, const SkPaint&) override {} onDrawPath(const SkPath &,const SkPaint &)53*c8dee2aaSAndroid Build Coastguard Worker void onDrawPath(const SkPath&, const SkPaint&) override {} 54*c8dee2aaSAndroid Build Coastguard Worker onDrawImage2(const SkImage *,SkScalar,SkScalar,const SkSamplingOptions &,const SkPaint *)55*c8dee2aaSAndroid Build Coastguard Worker void onDrawImage2(const SkImage*, SkScalar, SkScalar, const SkSamplingOptions&, 56*c8dee2aaSAndroid Build Coastguard Worker const SkPaint*) override {} onDrawImageRect2(const SkImage *,const SkRect &,const SkRect &,const SkSamplingOptions &,const SkPaint *,SrcRectConstraint)57*c8dee2aaSAndroid Build Coastguard Worker void onDrawImageRect2(const SkImage*, const SkRect&, const SkRect&, const SkSamplingOptions&, 58*c8dee2aaSAndroid Build Coastguard Worker const SkPaint*, SrcRectConstraint) override {} onDrawImageLattice2(const SkImage *,const Lattice &,const SkRect &,SkFilterMode,const SkPaint *)59*c8dee2aaSAndroid Build Coastguard Worker void onDrawImageLattice2(const SkImage*, const Lattice&, const SkRect&, SkFilterMode, 60*c8dee2aaSAndroid Build Coastguard Worker const SkPaint*) override {} onDrawAtlas2(const SkImage *,const SkRSXform[],const SkRect[],const SkColor[],int,SkBlendMode,const SkSamplingOptions &,const SkRect *,const SkPaint *)61*c8dee2aaSAndroid Build Coastguard Worker void onDrawAtlas2(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, 62*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode, const SkSamplingOptions&, const SkRect*, const SkPaint*) override {} 63*c8dee2aaSAndroid Build Coastguard Worker onDrawVerticesObject(const SkVertices *,SkBlendMode,const SkPaint &)64*c8dee2aaSAndroid Build Coastguard Worker void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override {} onDrawShadowRec(const SkPath &,const SkDrawShadowRec &)65*c8dee2aaSAndroid Build Coastguard Worker void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override {} onDrawPicture(const SkPicture *,const SkMatrix *,const SkPaint *)66*c8dee2aaSAndroid Build Coastguard Worker void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override {} 67*c8dee2aaSAndroid Build Coastguard Worker onDrawEdgeAAQuad(const SkRect &,const SkPoint[4],QuadAAFlags,const SkColor4f &,SkBlendMode)68*c8dee2aaSAndroid Build Coastguard Worker void onDrawEdgeAAQuad(const SkRect&, const SkPoint[4], QuadAAFlags, const SkColor4f&, 69*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode) override {} onDrawEdgeAAImageSet2(const ImageSetEntry[],int,const SkPoint[],const SkMatrix[],const SkSamplingOptions &,const SkPaint *,SrcRectConstraint)70*c8dee2aaSAndroid Build Coastguard Worker void onDrawEdgeAAImageSet2(const ImageSetEntry[], int, const SkPoint[], const SkMatrix[], 71*c8dee2aaSAndroid Build Coastguard Worker const SkSamplingOptions&, const SkPaint*, 72*c8dee2aaSAndroid Build Coastguard Worker SrcRectConstraint) override {} 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker private: 75*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = SkCanvasVirtualEnforcer<SkCanvas>; 76*c8dee2aaSAndroid Build Coastguard Worker }; 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker #endif // SkNoDrawCanvas_DEFINED 79