diff options
author | reed <reed@google.com> | 2016-03-10 12:45:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-10 12:45:18 -0800 |
commit | bd73ffb83022f1f6b1997e2a91c049949e88a8a2 (patch) | |
tree | 5e716db9736fe7a3d9a4df87cab4bc70938f73a7 /src/image/SkImage_Raster.cpp | |
parent | a6b439a0af614e2e79b35ad41df7b72736d5d1b9 (diff) |
add Make variations to return SkImage by sk_sp
some internal call-sites update, but not. Will follow-up in future to complete that.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1778393002
Review URL: https://codereview.chromium.org/1778393002
Diffstat (limited to 'src/image/SkImage_Raster.cpp')
-rw-r--r-- | src/image/SkImage_Raster.cpp | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index 5bd0e1d8f1..7f2f5c07ef 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -63,7 +63,7 @@ public: return true; } - SkImage_Raster(const SkImageInfo&, SkData*, size_t rb, SkColorTable*); + SkImage_Raster(const SkImageInfo&, sk_sp<SkData>, size_t rb, SkColorTable*); virtual ~SkImage_Raster(); bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override; @@ -71,7 +71,7 @@ public: SkData* onRefEncoded(GrContext*) const override; bool getROPixels(SkBitmap*, CachingHint) const override; GrTexture* asTextureRef(GrContext*, const GrTextureParams&) const override; - SkImage* onNewSubset(const SkIRect&) const override; + sk_sp<SkImage> onMakeSubset(const SkIRect&) const override; // exposed for SkSurface_Raster via SkNewImageFromPixelRef SkImage_Raster(const SkImageInfo&, SkPixelRef*, const SkIPoint& origin, size_t rowBytes); @@ -110,14 +110,13 @@ static void release_data(void* addr, void* context) { data->unref(); } -SkImage_Raster::SkImage_Raster(const Info& info, SkData* data, size_t rowBytes, +SkImage_Raster::SkImage_Raster(const Info& info, sk_sp<SkData> data, size_t rowBytes, SkColorTable* ctable) : INHERITED(info.width(), info.height(), kNeedNewImageUniqueID) { - data->ref(); void* addr = const_cast<void*>(data->data()); - fBitmap.installPixels(info, addr, rowBytes, ctable, release_data, data); + fBitmap.installPixels(info, addr, rowBytes, ctable, release_data, data.release()); fBitmap.setImmutable(); fBitmap.lockPixels(); } @@ -173,7 +172,7 @@ GrTexture* SkImage_Raster::asTextureRef(GrContext* ctx, const GrTextureParams& p return nullptr; } -SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const { +sk_sp<SkImage> SkImage_Raster::onMakeSubset(const SkIRect& subset) const { // TODO : could consider heurist of sharing pixels, if subset is pretty close to complete SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), fBitmap.alphaType()); @@ -184,25 +183,26 @@ SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const { surface->getCanvas()->clear(0); surface->getCanvas()->drawImage(this, SkIntToScalar(-subset.x()), SkIntToScalar(-subset.y()), nullptr); - return surface->newImageSnapshot(); + return sk_sp<SkImage>(surface->newImageSnapshot()); } /////////////////////////////////////////////////////////////////////////////// -SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, size_t rowBytes, - SkColorTable* ctable) { +sk_sp<SkImage> SkImage::MakeRasterCopy(const SkPixmap& pmap) { size_t size; - if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable != nullptr, &size) || !pixels) { + if (!SkImage_Raster::ValidArgs(pmap.info(), pmap.rowBytes(), + pmap.ctable() != nullptr, &size) || !pmap.addr()) { return nullptr; } // Here we actually make a copy of the caller's pixel data - SkAutoDataUnref data(SkData::NewWithCopy(pixels, size)); - return new SkImage_Raster(info, data, rowBytes, ctable); + sk_sp<SkData> data(SkData::NewWithCopy(pmap.addr(), size)); + return sk_make_sp<SkImage_Raster>(pmap.info(), std::move(data), pmap.rowBytes(), pmap.ctable()); } -SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t rowBytes) { +sk_sp<SkImage> SkImage::MakeRasterData(const SkImageInfo& info, sk_sp<SkData> data, + size_t rowBytes) { size_t size; if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !data) { return nullptr; @@ -214,30 +214,29 @@ SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t ro } SkColorTable* ctable = nullptr; - return new SkImage_Raster(info, data, rowBytes, ctable); + return sk_make_sp<SkImage_Raster>(info, std::move(data), rowBytes, ctable); } -SkImage* SkImage::NewFromRaster(const SkImageInfo& info, const void* pixels, size_t rowBytes, - RasterReleaseProc proc, ReleaseContext ctx) { +sk_sp<SkImage> SkImage::MakeFromRaster(const SkPixmap& pmap, RasterReleaseProc proc, + ReleaseContext ctx) { size_t size; - if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !pixels) { + if (!SkImage_Raster::ValidArgs(pmap.info(), pmap.rowBytes(), false, &size) || !pmap.addr()) { return nullptr; } - SkColorTable* ctable = nullptr; - SkAutoDataUnref data(SkData::NewWithProc(pixels, size, proc, ctx)); - return new SkImage_Raster(info, data, rowBytes, ctable); + sk_sp<SkData> data(SkData::NewWithProc(pmap.addr(), size, proc, ctx)); + return sk_make_sp<SkImage_Raster>(pmap.info(), std::move(data), pmap.rowBytes(), pmap.ctable()); } -SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr, - const SkIPoint& pixelRefOrigin, size_t rowBytes) { +sk_sp<SkImage> SkMakeImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr, + const SkIPoint& pixelRefOrigin, size_t rowBytes) { if (!SkImage_Raster::ValidArgs(info, rowBytes, false, nullptr)) { return nullptr; } - return new SkImage_Raster(info, pr, pixelRefOrigin, rowBytes); + return sk_make_sp<SkImage_Raster>(info, pr, pixelRefOrigin, rowBytes); } -SkImage* SkNewImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy) { +sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy) { SkASSERT(nullptr == bm.getTexture()); bool hasColorTable = false; @@ -250,16 +249,16 @@ SkImage* SkNewImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy) return nullptr; } - SkImage* image = nullptr; + sk_sp<SkImage> image; if (kYes_ForceCopyMode == forceCopy || !bm.isImmutable()) { SkBitmap tmp(bm); tmp.lockPixels(); - if (tmp.getPixels()) { - image = SkImage::NewRasterCopy(tmp.info(), tmp.getPixels(), tmp.rowBytes(), - tmp.getColorTable()); + SkPixmap pmap; + if (tmp.getPixels() && tmp.peekPixels(&pmap)) { + image = SkImage::MakeRasterCopy(pmap); } } else { - image = new SkImage_Raster(bm); + image = sk_make_sp<SkImage_Raster>(bm); } return image; } |