diff options
author | 2016-11-12 08:06:55 -0600 | |
---|---|---|
committer | 2016-11-13 18:31:13 +0000 | |
commit | 5df4934b3e40cdc378e225d1dda39f015cae9bae (patch) | |
tree | f0871dcbca35730333ad3b14115e6a14987fac7b /include | |
parent | f982cb37e3092e7a69c13a12ec09806ceff5af45 (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.h | 23 | ||||
-rw-r--r-- | include/core/SkMultiPictureDraw.h | 2 | ||||
-rw-r--r-- | include/core/SkPictureRecorder.h | 18 | ||||
-rw-r--r-- | include/svg/SkSVGCanvas.h | 8 | ||||
-rw-r--r-- | include/utils/SkCanvasStateUtils.h | 7 | ||||
-rw-r--r-- | include/utils/SkNullCanvas.h | 8 |
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 |