| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright 2012 Google Inc. |    2  * Copyright 2012 Google Inc. | 
|    3  * |    3  * | 
|    4  * Use of this source code is governed by a BSD-style license that can be |    4  * Use of this source code is governed by a BSD-style license that can be | 
|    5  * found in the LICENSE file. |    5  * found in the LICENSE file. | 
|    6  */ |    6  */ | 
|    7  |    7  | 
|    8 #include "SkImage_Base.h" |    8 #include "SkImage_Base.h" | 
|    9 #include "SkBitmap.h" |    9 #include "SkBitmap.h" | 
|   10 #include "SkCanvas.h" |   10 #include "SkCanvas.h" | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   60  |   60  | 
|   61         if (minSize) { |   61         if (minSize) { | 
|   62             *minSize = size; |   62             *minSize = size; | 
|   63         } |   63         } | 
|   64         return true; |   64         return true; | 
|   65     } |   65     } | 
|   66  |   66  | 
|   67     SkImage_Raster(const SkImageInfo&, SkData*, size_t rb, SkColorTable*, const 
     SkSurfaceProps*); |   67     SkImage_Raster(const SkImageInfo&, SkData*, size_t rb, SkColorTable*, const 
     SkSurfaceProps*); | 
|   68     virtual ~SkImage_Raster(); |   68     virtual ~SkImage_Raster(); | 
|   69  |   69  | 
|   70     SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const ove
     rride; |  | 
|   71     bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY) con
     st override; |   70     bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY) con
     st override; | 
|   72     const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; |   71     const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; | 
|   73     SkData* onRefEncoded() const override; |   72     SkData* onRefEncoded() const override; | 
|   74     bool getROPixels(SkBitmap*) const override; |   73     bool getROPixels(SkBitmap*) const override; | 
|   75     GrTexture* asTextureRef(GrContext*, SkImageUsageType) const override; |   74     GrTexture* asTextureRef(GrContext*, SkImageUsageType) const override; | 
 |   75     SkImage* onNewSubset(const SkIRect&) const override; | 
|   76  |   76  | 
|   77     // exposed for SkSurface_Raster via SkNewImageFromPixelRef |   77     // exposed for SkSurface_Raster via SkNewImageFromPixelRef | 
|   78     SkImage_Raster(const SkImageInfo&, SkPixelRef*, const SkIPoint& pixelRefOrig
     in, size_t rowBytes, |   78     SkImage_Raster(const SkImageInfo&, SkPixelRef*, const SkIPoint& pixelRefOrig
     in, size_t rowBytes, | 
|   79                    const SkSurfaceProps*); |   79                    const SkSurfaceProps*); | 
|   80  |   80  | 
|   81     SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); } |   81     SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); } | 
|   82  |   82  | 
|   83     SkShader* onNewShader(SkShader::TileMode, |   83     SkShader* onNewShader(SkShader::TileMode, | 
|   84                           SkShader::TileMode, |   84                           SkShader::TileMode, | 
|   85                           const SkMatrix* localMatrix) const override; |   85                           const SkMatrix* localMatrix) const override; | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  142     SkASSERT(fBitmap.isImmutable()); |  142     SkASSERT(fBitmap.isImmutable()); | 
|  143 } |  143 } | 
|  144  |  144  | 
|  145 SkImage_Raster::~SkImage_Raster() {} |  145 SkImage_Raster::~SkImage_Raster() {} | 
|  146  |  146  | 
|  147 SkShader* SkImage_Raster::onNewShader(SkShader::TileMode tileX, SkShader::TileMo
     de tileY, |  147 SkShader* SkImage_Raster::onNewShader(SkShader::TileMode tileX, SkShader::TileMo
     de tileY, | 
|  148                                       const SkMatrix* localMatrix) const { |  148                                       const SkMatrix* localMatrix) const { | 
|  149     return SkShader::CreateBitmapShader(fBitmap, tileX, tileY, localMatrix); |  149     return SkShader::CreateBitmapShader(fBitmap, tileX, tileY, localMatrix); | 
|  150 } |  150 } | 
|  151  |  151  | 
|  152 SkSurface* SkImage_Raster::onNewSurface(const SkImageInfo& info, const SkSurface
     Props& props) const { |  | 
|  153     return SkSurface::NewRaster(info, &props); |  | 
|  154 } |  | 
|  155  |  | 
|  156 bool SkImage_Raster::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, s
     ize_t dstRowBytes, |  152 bool SkImage_Raster::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, s
     ize_t dstRowBytes, | 
|  157                                   int srcX, int srcY) const { |  153                                   int srcX, int srcY) const { | 
|  158     SkBitmap shallowCopy(fBitmap); |  154     SkBitmap shallowCopy(fBitmap); | 
|  159     return shallowCopy.readPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY); |  155     return shallowCopy.readPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY); | 
|  160 } |  156 } | 
|  161  |  157  | 
|  162 const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesP
     tr) const { |  158 const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesP
     tr) const { | 
|  163     const SkImageInfo info = fBitmap.info(); |  159     const SkImageInfo info = fBitmap.info(); | 
|  164     if ((kUnknown_SkColorType == info.colorType()) || !fBitmap.getPixels()) { |  160     if ((kUnknown_SkColorType == info.colorType()) || !fBitmap.getPixels()) { | 
|  165         return nullptr; |  161         return nullptr; | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  205  |  201  | 
|  206     if (GrTexture* tex = ctx->textureProvider()->findAndRefTextureByUniqueKey(ke
     y)) { |  202     if (GrTexture* tex = ctx->textureProvider()->findAndRefTextureByUniqueKey(ke
     y)) { | 
|  207         return tex; |  203         return tex; | 
|  208     } |  204     } | 
|  209     return GrRefCachedBitmapTexture(ctx, fBitmap, usage); |  205     return GrRefCachedBitmapTexture(ctx, fBitmap, usage); | 
|  210 #endif |  206 #endif | 
|  211      |  207      | 
|  212     return nullptr; |  208     return nullptr; | 
|  213 } |  209 } | 
|  214  |  210  | 
 |  211 SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const { | 
 |  212     // TODO : could consider heurist of sharing pixels, if subset is pretty clos
     e to complete | 
 |  213  | 
 |  214     SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), fBi
     tmap.alphaType()); | 
 |  215     SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); | 
 |  216     if (!surface) { | 
 |  217         return nullptr; | 
 |  218     } | 
 |  219     surface->getCanvas()->clear(0); | 
 |  220     surface->getCanvas()->drawImage(this, SkIntToScalar(-subset.x()), SkIntToSca
     lar(-subset.y()), | 
 |  221                                     nullptr); | 
 |  222     return surface->newImageSnapshot(); | 
 |  223 } | 
 |  224  | 
|  215 /////////////////////////////////////////////////////////////////////////////// |  225 /////////////////////////////////////////////////////////////////////////////// | 
|  216  |  226  | 
|  217 SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, siz
     e_t rowBytes, |  227 SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, siz
     e_t rowBytes, | 
|  218                                 SkColorTable* ctable) { |  228                                 SkColorTable* ctable) { | 
|  219     size_t size; |  229     size_t size; | 
|  220     if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable, &size) || !pixels) { |  230     if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable, &size) || !pixels) { | 
|  221         return nullptr; |  231         return nullptr; | 
|  222     } |  232     } | 
|  223  |  233  | 
|  224     // Here we actually make a copy of the caller's pixel data |  234     // Here we actually make a copy of the caller's pixel data | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  305         // pixelref since the caller might call setImmutable() themselves |  315         // pixelref since the caller might call setImmutable() themselves | 
|  306         // (thus changing our state). |  316         // (thus changing our state). | 
|  307         if (fBitmap.isImmutable()) { |  317         if (fBitmap.isImmutable()) { | 
|  308             bitmap->setInfo(fBitmap.info(), fBitmap.rowBytes()); |  318             bitmap->setInfo(fBitmap.info(), fBitmap.rowBytes()); | 
|  309             bitmap->setPixelRef(fBitmap.pixelRef(), fBitmap.pixelRefOrigin()); |  319             bitmap->setPixelRef(fBitmap.pixelRef(), fBitmap.pixelRefOrigin()); | 
|  310             return true; |  320             return true; | 
|  311         } |  321         } | 
|  312     } |  322     } | 
|  313     return this->INHERITED::onAsLegacyBitmap(bitmap, mode); |  323     return this->INHERITED::onAsLegacyBitmap(bitmap, mode); | 
|  314 } |  324 } | 
| OLD | NEW |