aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2016-11-12 08:06:55 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-13 18:31:13 +0000
commit5df4934b3e40cdc378e225d1dda39f015cae9bae (patch)
treef0871dcbca35730333ad3b14115e6a14987fac7b /include
parentf982cb37e3092e7a69c13a12ec09806ceff5af45 (diff)
Revert[2] "Change SkCanvas to *not* inherit from SkRefCnt"
Changes over original: - conditionalize ownership in SkPictureRecorder - conditionalize ownership in SkCanvasStateUtils This reverts commit b613c266df48cf45296ecc23d1bd7098c84bb7ba. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4742 Change-Id: Ib25514d6f546c69b6650b5c957403b04f7380dc2 Reviewed-on: https://skia-review.googlesource.com/4742 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'include')
-rw-r--r--include/core/SkCanvas.h23
-rw-r--r--include/core/SkMultiPictureDraw.h2
-rw-r--r--include/core/SkPictureRecorder.h18
-rw-r--r--include/svg/SkSVGCanvas.h8
-rw-r--r--include/utils/SkCanvasStateUtils.h7
-rw-r--r--include/utils/SkNullCanvas.h8
6 files changed, 52 insertions, 14 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index ab47edde51..ba8a3830d0 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -60,7 +60,13 @@ class SkTextBlob;
color, typeface, textSize, strokeWidth, shader (e.g. gradients, patterns),
etc.
*/
-class SK_API SkCanvas : public SkRefCnt {
+class SK_API SkCanvas
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+: public SkRefCnt
+#else
+: SkNoncopyable
+#endif
+{
enum PrivateSaveLayerFlags {
kDontClipToLayer_PrivateSaveLayerFlag = 1U << 31,
};
@@ -100,11 +106,22 @@ public:
* Note: it is valid to request a supported ImageInfo, but with zero
* dimensions.
*/
- static SkCanvas* NewRasterDirect(const SkImageInfo&, void*, size_t);
+ static std::unique_ptr<SkCanvas> MakeRasterDirect(const SkImageInfo&, void*, size_t);
+
+ static std::unique_ptr<SkCanvas> MakeRasterDirectN32(int width, int height, SkPMColor* pixels,
+ size_t rowBytes) {
+ return MakeRasterDirect(SkImageInfo::MakeN32Premul(width, height), pixels, rowBytes);
+ }
+
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+ static SkCanvas* NewRasterDirect(const SkImageInfo& info, void* pixels, size_t rowBytes) {
+ return MakeRasterDirect(info, pixels, rowBytes).release();
+ }
static SkCanvas* NewRasterDirectN32(int width, int height, SkPMColor* pixels, size_t rowBytes) {
- return NewRasterDirect(SkImageInfo::MakeN32Premul(width, height), pixels, rowBytes);
+ return MakeRasterDirectN32(width, height, pixels, rowBytes).release();
}
+#endif
/**
* Creates an empty canvas with no backing device/pixels, and zero
diff --git a/include/core/SkMultiPictureDraw.h b/include/core/SkMultiPictureDraw.h
index cd46a303ae..9995721ab9 100644
--- a/include/core/SkMultiPictureDraw.h
+++ b/include/core/SkMultiPictureDraw.h
@@ -57,7 +57,7 @@ public:
private:
struct DrawData {
- SkCanvas* fCanvas; // reffed
+ SkCanvas* fCanvas;
const SkPicture* fPicture; // reffed
SkMatrix fMatrix;
SkPaint* fPaint; // owned
diff --git a/include/core/SkPictureRecorder.h b/include/core/SkPictureRecorder.h
index 59e8f14504..7bf081d04d 100644
--- a/include/core/SkPictureRecorder.h
+++ b/include/core/SkPictureRecorder.h
@@ -111,13 +111,17 @@ private:
friend class SkPictureRecorderReplayTester; // for unit testing
void partialReplay(SkCanvas* canvas) const;
- bool fActivelyRecording;
- uint32_t fFlags;
- SkRect fCullRect;
- sk_sp<SkBBoxHierarchy> fBBH;
- sk_sp<SkRecorder> fRecorder;
- sk_sp<SkRecord> fRecord;
- SkMiniRecorder fMiniRecorder;
+ bool fActivelyRecording;
+ uint32_t fFlags;
+ SkRect fCullRect;
+ sk_sp<SkBBoxHierarchy> fBBH;
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+ sk_sp<SkRecorder> fRecorder;
+#else
+ std::unique_ptr<SkRecorder> fRecorder;
+#endif
+ sk_sp<SkRecord> fRecord;
+ SkMiniRecorder fMiniRecorder;
typedef SkNoncopyable INHERITED;
};
diff --git a/include/svg/SkSVGCanvas.h b/include/svg/SkSVGCanvas.h
index e285faa459..b72f273123 100644
--- a/include/svg/SkSVGCanvas.h
+++ b/include/svg/SkSVGCanvas.h
@@ -25,7 +25,13 @@ public:
* The 'bounds' parameter defines an initial SVG viewport (viewBox attribute on the root
* SVG element).
*/
- static SkCanvas* Create(const SkRect& bounds, SkXMLWriter*);
+ static std::unique_ptr<SkCanvas> Make(const SkRect& bounds, SkXMLWriter*);
+
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+ static SkCanvas* Create(const SkRect& bounds, SkXMLWriter* writer) {
+ return Make(bounds, writer).release();
+ }
+#endif
};
#endif
diff --git a/include/utils/SkCanvasStateUtils.h b/include/utils/SkCanvasStateUtils.h
index 3071c7547c..fbc3a6f6e4 100644
--- a/include/utils/SkCanvasStateUtils.h
+++ b/include/utils/SkCanvasStateUtils.h
@@ -62,7 +62,12 @@ public:
* identical to the captured canvas. The caller is responsible for
* calling unref on the SkCanvas.
*/
- static SkCanvas* CreateFromCanvasState(const SkCanvasState* state);
+ static std::unique_ptr<SkCanvas> MakeFromCanvasState(const SkCanvasState* state);
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+ static SkCanvas* CreateFromCanvasState(const SkCanvasState* state) {
+ return MakeFromCanvasState(state).release();
+ }
+#endif
/**
* Free the memory associated with the captured canvas state. The state
diff --git a/include/utils/SkNullCanvas.h b/include/utils/SkNullCanvas.h
index 99a26dafdd..884b68bfb1 100644
--- a/include/utils/SkNullCanvas.h
+++ b/include/utils/SkNullCanvas.h
@@ -15,6 +15,12 @@ class SkCanvas;
/**
* Creates a canvas that draws nothing. This is useful for performance testing.
*/
-SK_API SkCanvas* SkCreateNullCanvas();
+SK_API std::unique_ptr<SkCanvas> SkMakeNullCanvas();
+
+#ifdef SK_SUPPORT_LEGACY_CANVAS_IS_REFCNT
+static inline SkCanvas* SkCreateNullCanvas() {
+ return SkMakeNullCanvas().release();
+}
+#endif
#endif