Index: src/core/SkSpecialImage.cpp |
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp |
index b17d5d4147d998d85016a1f2d50c6bbb63ac91e7..e90c655a5824567bb64035da8643567ea77f73e1 100644 |
--- a/src/core/SkSpecialImage.cpp |
+++ b/src/core/SkSpecialImage.cpp |
@@ -29,9 +29,9 @@ public: |
// Delete this entry point ASAP (see skbug.com/4965) |
virtual bool getBitmapDeprecated(SkBitmap* result) const = 0; |
- virtual SkSpecialSurface* onNewSurface(const SkImageInfo& info) const = 0; |
+ virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const = 0; |
- virtual SkSpecialImage* onExtractSubset(const SkIRect& subset) const = 0; |
+ virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0; |
private: |
typedef SkSpecialImage INHERITED; |
@@ -58,12 +58,12 @@ bool SkSpecialImage::testingOnlyGetROPixels(SkBitmap* result) const { |
return as_SIB(this)->testingOnlyOnGetROPixels(result); |
} |
-SkSpecialSurface* SkSpecialImage::newSurface(const SkImageInfo& info) const { |
- return as_SIB(this)->onNewSurface(info); |
+sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) const { |
+ return as_SIB(this)->onMakeSurface(info); |
} |
-SkSpecialImage* SkSpecialImage::extractSubset(const SkIRect& subset) const { |
- return as_SIB(this)->onExtractSubset(subset); |
+sk_sp<SkSpecialImage> SkSpecialImage::makeSubset(const SkIRect& subset) const { |
+ return as_SIB(this)->onMakeSubset(subset); |
} |
#if SK_SUPPORT_GPU |
@@ -71,17 +71,17 @@ SkSpecialImage* SkSpecialImage::extractSubset(const SkIRect& subset) const { |
#include "SkGrPixelRef.h" |
#endif |
-SkSpecialImage* SkSpecialImage::internal_fromBM(SkImageFilter::Proxy* proxy, |
- const SkBitmap& src) { |
+sk_sp<SkSpecialImage> SkSpecialImage::internal_fromBM(SkImageFilter::Proxy* proxy, |
+ const SkBitmap& src) { |
// Need to test offset case! (see skbug.com/4967) |
if (src.getTexture()) { |
- return SkSpecialImage::NewFromGpu(proxy, |
- src.bounds(), |
- src.getGenerationID(), |
- src.getTexture()); |
+ return SkSpecialImage::MakeFromGpu(proxy, |
+ src.bounds(), |
+ src.getGenerationID(), |
+ src.getTexture()); |
} |
- return SkSpecialImage::NewFromRaster(proxy, src.bounds(), src); |
+ return SkSpecialImage::MakeFromRaster(proxy, src.bounds(), src); |
} |
bool SkSpecialImage::internal_getBM(SkBitmap* result) { |
@@ -103,13 +103,15 @@ SkImageFilter::Proxy* SkSpecialImage::internal_getProxy() const { |
class SkSpecialImage_Image : public SkSpecialImage_Base { |
public: |
- SkSpecialImage_Image(SkImageFilter::Proxy* proxy, const SkIRect& subset, const SkImage* image) |
+ SkSpecialImage_Image(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ sk_sp<SkImage> image) |
: INHERITED(proxy, subset, image->uniqueID()) |
- , fImage(SkRef(image)) { |
+ , fImage(image) { |
} |
~SkSpecialImage_Image() override { } |
- |
+ |
bool isOpaque() const override { return fImage->isOpaque(); } |
size_t getSize() const override { |
@@ -130,7 +132,7 @@ public: |
void onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const override { |
SkRect dst = SkRect::MakeXYWH(x, y, this->subset().width(), this->subset().height()); |
- canvas->drawImageRect(fImage, this->subset(), |
+ canvas->drawImageRect(fImage.get(), this->subset(), |
dst, paint, SkCanvas::kStrict_SrcRectConstraint); |
} |
@@ -162,32 +164,32 @@ public: |
return fImage->asLegacyBitmap(result, SkImage::kRO_LegacyBitmapMode); |
} |
- SkSpecialSurface* onNewSurface(const SkImageInfo& info) const override { |
+ sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { |
#if SK_SUPPORT_GPU |
GrTexture* texture = as_IB(fImage.get())->peekTexture(); |
if (texture) { |
GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(info); |
desc.fFlags = kRenderTarget_GrSurfaceFlag; |
- return SkSpecialSurface::NewRenderTarget(this->proxy(), texture->getContext(), desc); |
+ return SkSpecialSurface::MakeRenderTarget(this->proxy(), texture->getContext(), desc); |
} |
#endif |
- return SkSpecialSurface::NewRaster(this->proxy(), info, nullptr); |
+ return SkSpecialSurface::MakeRaster(this->proxy(), info, nullptr); |
} |
- SkSpecialImage* onExtractSubset(const SkIRect& subset) const override { |
- SkAutoTUnref<SkImage> subsetImg(fImage->newSubset(subset)); |
+ sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override { |
+ sk_sp<SkImage> subsetImg(fImage->makeSubset(subset)); |
if (!subsetImg) { |
return nullptr; |
} |
- return SkSpecialImage::NewFromImage(this->internal_getProxy(), |
- SkIRect::MakeWH(subset.width(), subset.height()), |
- subsetImg); |
+ return SkSpecialImage::MakeFromImage(this->internal_getProxy(), |
+ SkIRect::MakeWH(subset.width(), subset.height()), |
+ subsetImg); |
} |
private: |
- SkAutoTUnref<const SkImage> fImage; |
+ sk_sp<SkImage> fImage; |
typedef SkSpecialImage_Base INHERITED; |
}; |
@@ -206,11 +208,12 @@ static bool rect_fits(const SkIRect& rect, int width, int height) { |
} |
#endif |
-SkSpecialImage* SkSpecialImage::NewFromImage(SkImageFilter::Proxy* proxy, |
- const SkIRect& subset, |
- const SkImage* image) { |
+sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ sk_sp<SkImage> image) { |
SkASSERT(rect_fits(subset, image->width(), image->height())); |
- return new SkSpecialImage_Image(proxy, subset, image); |
+ |
+ return sk_make_sp<SkSpecialImage_Image>(proxy, subset, image); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -233,8 +236,8 @@ public: |
SkSpecialImage_Raster(SkImageFilter::Proxy* proxy, |
const SkIRect& subset, |
const SkPixmap& pixmap, |
- void (*releaseProc)(void* addr, void* context), |
- void* context) |
+ RasterReleaseProc releaseProc, |
+ ReleaseContext context) |
: INHERITED(proxy, subset, kNeedNewImageUniqueID_SpecialImage) { |
fBitmap.installPixels(pixmap.info(), pixmap.writable_addr(), |
pixmap.rowBytes(), pixmap.ctable(), |
@@ -274,20 +277,20 @@ public: |
return true; |
} |
- SkSpecialSurface* onNewSurface(const SkImageInfo& info) const override { |
- return SkSpecialSurface::NewRaster(this->proxy(), info, nullptr); |
+ sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { |
+ return SkSpecialSurface::MakeRaster(this->proxy(), info, nullptr); |
} |
- SkSpecialImage* onExtractSubset(const SkIRect& subset) const override { |
+ sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override { |
SkBitmap subsetBM; |
if (!fBitmap.extractSubset(&subsetBM, subset)) { |
return nullptr; |
} |
- return SkSpecialImage::NewFromRaster(this->internal_getProxy(), |
- SkIRect::MakeWH(subset.width(), subset.height()), |
- subsetBM); |
+ return SkSpecialImage::MakeFromRaster(this->internal_getProxy(), |
+ SkIRect::MakeWH(subset.width(), subset.height()), |
+ subsetBM); |
} |
private: |
@@ -296,20 +299,25 @@ private: |
typedef SkSpecialImage_Base INHERITED; |
}; |
-SkSpecialImage* SkSpecialImage::NewFromRaster(SkImageFilter::Proxy* proxy, |
- const SkIRect& subset, |
- const SkBitmap& bm) { |
+sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ const SkBitmap& bm) { |
SkASSERT(nullptr == bm.getTexture()); |
SkASSERT(rect_fits(subset, bm.width(), bm.height())); |
- return new SkSpecialImage_Raster(proxy, subset, bm); |
+ |
+ return sk_make_sp<SkSpecialImage_Raster>(proxy, subset, bm); |
} |
-SkSpecialImage* SkSpecialImage::NewFromPixmap(SkImageFilter::Proxy* proxy, |
- const SkIRect& subset, |
- const SkPixmap& src, |
- void (*releaseProc)(void* addr, void* context), |
- void* context) { |
- return new SkSpecialImage_Raster(proxy, subset, src, releaseProc, context); |
+sk_sp<SkSpecialImage> SkSpecialImage::MakeFromPixmap(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ const SkPixmap& src, |
+ RasterReleaseProc releaseProc, |
+ ReleaseContext context) { |
+ if (!src.addr()) { |
+ return nullptr; |
+ } |
+ |
+ return sk_make_sp<SkSpecialImage_Raster>(proxy, subset, src, releaseProc, context); |
} |
@@ -383,19 +391,19 @@ public: |
return true; |
} |
- SkSpecialSurface* onNewSurface(const SkImageInfo& info) const override { |
+ sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { |
GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(info); |
desc.fFlags = kRenderTarget_GrSurfaceFlag; |
- return SkSpecialSurface::NewRenderTarget(this->proxy(), fTexture->getContext(), desc); |
+ return SkSpecialSurface::MakeRenderTarget(this->proxy(), fTexture->getContext(), desc); |
} |
- SkSpecialImage* onExtractSubset(const SkIRect& subset) const override { |
- return SkSpecialImage::NewFromGpu(this->internal_getProxy(), |
- subset, |
- this->uniqueID(), |
- fTexture, |
- fAlphaType); |
+ sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override { |
+ return SkSpecialImage::MakeFromGpu(this->internal_getProxy(), |
+ subset, |
+ this->uniqueID(), |
+ fTexture, |
+ fAlphaType); |
} |
private: |
@@ -405,22 +413,22 @@ private: |
typedef SkSpecialImage_Base INHERITED; |
}; |
-SkSpecialImage* SkSpecialImage::NewFromGpu(SkImageFilter::Proxy* proxy, |
- const SkIRect& subset, |
- uint32_t uniqueID, |
- GrTexture* tex, |
- SkAlphaType at) { |
+sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ uint32_t uniqueID, |
+ GrTexture* tex, |
+ SkAlphaType at) { |
SkASSERT(rect_fits(subset, tex->width(), tex->height())); |
- return new SkSpecialImage_Gpu(proxy, subset, uniqueID, tex, at); |
+ return sk_make_sp<SkSpecialImage_Gpu>(proxy, subset, uniqueID, tex, at); |
} |
#else |
-SkSpecialImage* SkSpecialImage::NewFromGpu(SkImageFilter::Proxy* proxy, |
- const SkIRect& subset, |
- uint32_t uniqueID, |
- GrTexture* tex, |
- SkAlphaType at) { |
+sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ uint32_t uniqueID, |
+ GrTexture* tex, |
+ SkAlphaType at) { |
return nullptr; |
} |