diff options
-rw-r--r-- | gn/utils.gni | 1 | ||||
-rw-r--r-- | include/core/SkCanvas.h | 1 | ||||
-rw-r--r-- | include/utils/SkNoDrawCanvas.h | 32 | ||||
-rw-r--r-- | include/utils/SkNoSaveLayerCanvas.h | 2 | ||||
-rw-r--r-- | src/core/SkCanvas.cpp | 13 |
5 files changed, 48 insertions, 1 deletions
diff --git a/gn/utils.gni b/gn/utils.gni index a08e60ba31..b99e6708d4 100644 --- a/gn/utils.gni +++ b/gn/utils.gni @@ -17,6 +17,7 @@ skia_utils_sources = [ "$_include/utils/SkInterpolator.h", "$_include/utils/SkLayer.h", "$_include/utils/SkMeshUtils.h", + "$_include/utils/SkNoDrawCanvas.h", "$_include/utils/SkNoSaveLayerCanvas.h", "$_include/utils/SkNWayCanvas.h", "$_include/utils/SkNullCanvas.h", diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 23e1c9f077..fdea19fd2f 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1622,6 +1622,7 @@ private: friend class SkSurface_Raster; // needs getDevice() friend class SkRecorder; // InitFlags friend class SkLiteRecorder; // InitFlags + friend class SkNoDrawCanvas; // InitFlags friend class SkNoSaveLayerCanvas; // InitFlags friend class SkNWayCanvas; // InitFlags friend class SkPictureImageFilter; // SkCanvas(SkBaseDevice*, SkSurfaceProps*, InitFlags) diff --git a/include/utils/SkNoDrawCanvas.h b/include/utils/SkNoDrawCanvas.h new file mode 100644 index 0000000000..376fa7c32e --- /dev/null +++ b/include/utils/SkNoDrawCanvas.h @@ -0,0 +1,32 @@ +/* + * 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 SkNoDrawCanvas_DEFINED +#define SkNoDrawCanvas_DEFINED + +#include "SkCanvas.h" + +// SkNoDrawCanvas is a helper for SkCanvas subclasses which do not need to +// actually rasterize (e.g., analysis of the draw calls). +// +// It provides the following simplifications: +// +// * not backed by any device/pixels +// * conservative clipping (clipping calls only use rectangles) +// +class SK_API SkNoDrawCanvas : public SkCanvas { +public: + SkNoDrawCanvas(int width, int height); + +protected: + SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override; + +private: + typedef SkCanvas INHERITED; +}; + +#endif // SkNoSaveLayerCanvas_DEFINED diff --git a/include/utils/SkNoSaveLayerCanvas.h b/include/utils/SkNoSaveLayerCanvas.h index 3d786c532c..3d15cf9fef 100644 --- a/include/utils/SkNoSaveLayerCanvas.h +++ b/include/utils/SkNoSaveLayerCanvas.h @@ -14,6 +14,8 @@ // The NoSaveLayerCanvas is used to play back SkPictures when the saveLayer // functionality isn't required (e.g., during analysis of the draw calls). // It also simplifies the clipping calls to only use rectangles. +// +// DEPRECATED: use SkNoDrawCanvas instead. class SK_API SkNoSaveLayerCanvas : public SkCanvas { public: SkNoSaveLayerCanvas(SkBaseDevice* device) diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index aa74a642a8..25f83deb09 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -22,6 +22,7 @@ #include "SkMakeUnique.h" #include "SkMatrixUtils.h" #include "SkMetaData.h" +#include "SkNoDrawCanvas.h" #include "SkNx.h" #include "SkPaintPriv.h" #include "SkPatchUtils.h" @@ -3367,7 +3368,17 @@ SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { fCanvas->restoreToCount(fSaveCount); } -///////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +SkNoDrawCanvas::SkNoDrawCanvas(int width, int height) + : INHERITED(SkIRect::MakeWH(width, height), kConservativeRasterClip_InitFlag) {} + +SkCanvas::SaveLayerStrategy SkNoDrawCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) { + (void)this->INHERITED::getSaveLayerStrategy(rec); + return kNoLayer_SaveLayerStrategy; +} + +/////////////////////////////////////////////////////////////////////////////// const SkCanvas::ClipOp SkCanvas::kDifference_Op; const SkCanvas::ClipOp SkCanvas::kIntersect_Op; |