aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core/SkCanvas.h
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2016-11-09 13:59:58 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-09 19:40:06 +0000
commit824075071885b6b741c141cbe2134d8345d34589 (patch)
tree828b9fd105e92a6ff21b0dc942da6c015ea8ac73 /include/core/SkCanvas.h
parentc78eff97549e8e346394d3e228395ceb8a467b35 (diff)
Change SkCanvas to *not* inherit from SkRefCnt
Definitely tricky for classes like SkNWayCanvas, where the caller (today) need not pay attention to ownership of the canvases it gave the NWay (after this CL, the caller *must* managed ownership) BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4441 DOCS_PREVIEW= https://skia.org/?cl=4441 Change-Id: Ib1ac07a3cdf0686d78e7aaa4735d45cc90bea081 Reviewed-on: https://skia-review.googlesource.com/4441 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org> Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'include/core/SkCanvas.h')
-rw-r--r--include/core/SkCanvas.h23
1 files changed, 20 insertions, 3 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