diff options
author | 2016-03-09 14:26:26 -0800 | |
---|---|---|
committer | 2016-03-09 14:26:26 -0800 | |
commit | 6ceeebd37a43d879c120b6ba100ae1febdd67a18 (patch) | |
tree | 6c4dfeb68ba4183bc2e63d8888ae01f24caede88 /src/image | |
parent | f842c50116863f44240f806509f14e434eabb0a8 (diff) |
unify peekPixels around pixmap parameter
requires this chrome CL to land first
https://codereview.chromium.org/1775393003/
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1784563002
Review URL: https://codereview.chromium.org/1784563002
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImage.cpp | 41 | ||||
-rw-r--r-- | src/image/SkImage_Base.h | 4 | ||||
-rw-r--r-- | src/image/SkImage_Generator.cpp | 5 | ||||
-rw-r--r-- | src/image/SkImage_Raster.cpp | 12 | ||||
-rw-r--r-- | src/image/SkSurface.cpp | 18 |
5 files changed, 42 insertions, 38 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 07279501a3..5e7cb07226 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -36,17 +36,29 @@ SkImage::SkImage(int width, int height, uint32_t uniqueID) SkASSERT(height > 0); } -const void* SkImage::peekPixels(SkImageInfo* info, size_t* rowBytes) const { - SkImageInfo infoStorage; - size_t rowBytesStorage; - if (nullptr == info) { - info = &infoStorage; +bool SkImage::peekPixels(SkPixmap* pm) const { + SkPixmap tmp; + if (!pm) { + pm = &tmp; } - if (nullptr == rowBytes) { - rowBytes = &rowBytesStorage; + return as_IB(this)->onPeekPixels(pm); +} + +#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS +const void* SkImage::peekPixels(SkImageInfo* info, size_t* rowBytes) const { + SkPixmap pm; + if (this->peekPixels(&pm)) { + if (info) { + *info = pm.info(); + } + if (rowBytes) { + *rowBytes = pm.rowBytes(); + } + return pm.addr(); } - return as_IB(this)->onPeekPixels(info, rowBytes); + return nullptr; } +#endif bool SkImage::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY, CachingHint chint) const { @@ -241,19 +253,6 @@ bool SkImage_Base::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, siz /////////////////////////////////////////////////////////////////////////////////////////////////// -bool SkImage::peekPixels(SkPixmap* pmap) const { - SkImageInfo info; - size_t rowBytes; - const void* pixels = this->peekPixels(&info, &rowBytes); - if (pixels) { - if (pmap) { - pmap->reset(info, pixels, rowBytes); - } - return true; - } - return false; -} - bool SkImage::readPixels(const SkPixmap& pmap, int srcX, int srcY, CachingHint chint) const { return this->readPixels(pmap.info(), pmap.writable_addr(), pmap.rowBytes(), srcX, srcY, chint); } diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h index da87e42888..9e2efe98b5 100644 --- a/src/image/SkImage_Base.h +++ b/src/image/SkImage_Base.h @@ -26,7 +26,7 @@ public: SkImage_Base(int width, int height, uint32_t uniqueID); virtual ~SkImage_Base(); - virtual const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const { return nullptr; } + virtual bool onPeekPixels(SkPixmap*) const { return false; } // Default impl calls onDraw virtual bool onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, @@ -74,7 +74,7 @@ private: typedef SkImage INHERITED; }; -static inline SkImage_Base* as_IB(SkImage* image) { +static inline SkImage_Base* as_IB(SkImage* image) { return static_cast<SkImage_Base*>(image); } diff --git a/src/image/SkImage_Generator.cpp b/src/image/SkImage_Generator.cpp index 688b4ffe3b..95cc426a43 100644 --- a/src/image/SkImage_Generator.cpp +++ b/src/image/SkImage_Generator.cpp @@ -22,7 +22,6 @@ public: {} bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override; - const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; SkImageCacherator* peekCacherator() const override { return fCache; } SkData* onRefEncoded(GrContext*) const override; bool isOpaque() const override { return fCache->info().isOpaque(); } @@ -62,10 +61,6 @@ bool SkImage_Generator::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels return false; } -const void* SkImage_Generator::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesPtr) const { - return NULL; -} - SkData* SkImage_Generator::onRefEncoded(GrContext* ctx) const { return fCache->refEncoded(ctx); } diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index d4debdf807..5bd0e1d8f1 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -67,7 +67,7 @@ public: virtual ~SkImage_Raster(); bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override; - const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; + bool onPeekPixels(SkPixmap*) const override; SkData* onRefEncoded(GrContext*) const override; bool getROPixels(SkBitmap*, CachingHint) const override; GrTexture* asTextureRef(GrContext*, const GrTextureParams&) const override; @@ -140,14 +140,8 @@ bool SkImage_Raster::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, s return shallowCopy.readPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY); } -const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesPtr) const { - const SkImageInfo info = fBitmap.info(); - if ((kUnknown_SkColorType == info.colorType()) || !fBitmap.getPixels()) { - return nullptr; - } - *infoPtr = info; - *rowBytesPtr = fBitmap.rowBytes(); - return fBitmap.getPixels(); +bool SkImage_Raster::onPeekPixels(SkPixmap* pm) const { + return fBitmap.peekPixels(pm); } SkData* SkImage_Raster::onRefEncoded(GrContext*) const { diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp index b018ef9756..9bec562df9 100644 --- a/src/image/SkSurface.cpp +++ b/src/image/SkSurface.cpp @@ -182,9 +182,25 @@ void SkSurface::draw(SkCanvas* canvas, SkScalar x, SkScalar y, return asSB(this)->onDraw(canvas, x, y, paint); } +bool SkSurface::peekPixels(SkPixmap* pmap) { + return this->getCanvas()->peekPixels(pmap); +} + +#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS const void* SkSurface::peekPixels(SkImageInfo* info, size_t* rowBytes) { - return this->getCanvas()->peekPixels(info, rowBytes); + SkPixmap pm; + if (this->peekPixels(&pm)) { + if (info) { + *info = pm.info(); + } + if (rowBytes) { + *rowBytes = pm.rowBytes(); + } + return pm.addr(); + } + return nullptr; } +#endif bool SkSurface::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) { |