| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index aa25ca0b41c96dcafe053d05d7066a50e8bcb8b8..bf4e86cafa044c9e438e36ce193088eb617982b2 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -1133,25 +1133,44 @@ SkImageInfo SkCanvas::imageInfo() const {
|
| }
|
|
|
| const void* SkCanvas::peekPixels(SkImageInfo* info, size_t* rowBytes) {
|
| - return this->onPeekPixels(info, rowBytes);
|
| + SkPixmap pmap;
|
| + if (!this->onPeekPixels(&pmap)) {
|
| + return NULL;
|
| + }
|
| + if (info) {
|
| + *info = pmap.info();
|
| + }
|
| + if (rowBytes) {
|
| + *rowBytes = pmap.rowBytes();
|
| + }
|
| + return pmap.addr();
|
| }
|
|
|
| -const void* SkCanvas::onPeekPixels(SkImageInfo* info, size_t* rowBytes) {
|
| +bool SkCanvas::onPeekPixels(SkPixmap* pmap) {
|
| SkBaseDevice* dev = this->getDevice();
|
| - return dev ? dev->peekPixels(info, rowBytes) : NULL;
|
| + return dev && dev->peekPixels(pmap);
|
| }
|
|
|
| void* SkCanvas::accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoint* origin) {
|
| - void* pixels = this->onAccessTopLayerPixels(info, rowBytes);
|
| - if (pixels && origin) {
|
| + SkPixmap pmap;
|
| + if (!this->onAccessTopLayerPixels(&pmap)) {
|
| + return NULL;
|
| + }
|
| + if (info) {
|
| + *info = pmap.info();
|
| + }
|
| + if (rowBytes) {
|
| + *rowBytes = pmap.rowBytes();
|
| + }
|
| + if (origin) {
|
| *origin = this->getTopDevice(false)->getOrigin();
|
| }
|
| - return pixels;
|
| + return pmap.writable_addr();
|
| }
|
|
|
| -void* SkCanvas::onAccessTopLayerPixels(SkImageInfo* info, size_t* rowBytes) {
|
| +bool SkCanvas::onAccessTopLayerPixels(SkPixmap* pmap) {
|
| SkBaseDevice* dev = this->getTopDevice();
|
| - return dev ? dev->accessPixels(info, rowBytes) : NULL;
|
| + return dev && dev->accessPixels(pmap);
|
| }
|
|
|
| SkAutoROCanvasPixels::SkAutoROCanvasPixels(SkCanvas* canvas) {
|
|
|