aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2016-12-01 12:47:59 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-01 18:34:29 +0000
commitee424acbb87bf999be132a437527e656e37541d7 (patch)
treeeef34d6fb29a2a7ebd53c452b37a43f6c4f93686
parenta2f7126ed4e705f0fec8227daed651fcdd3ba445 (diff)
SkNoDrawCanvas - a public non-drawing canvas base class
TODO: - convert SkDeferredCanvas, SkLiteRecorder, etc. to the new base - remove unused SkNoSaveLayerCanvas BUG=chromium:668925 R=reed@google.com,mtklein@google.com Change-Id: Ie9af577477a6b9eaa5ef55523287ad1635dca116 Reviewed-on: https://skia-review.googlesource.com/5349 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Florin Malita <fmalita@chromium.org>
-rw-r--r--gn/utils.gni1
-rw-r--r--include/core/SkCanvas.h1
-rw-r--r--include/utils/SkNoDrawCanvas.h32
-rw-r--r--include/utils/SkNoSaveLayerCanvas.h2
-rw-r--r--src/core/SkCanvas.cpp13
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;