aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkBitmapDevice.cpp9
-rw-r--r--src/core/SkCanvas.cpp14
-rw-r--r--src/core/SkDevice.cpp16
3 files changed, 39 insertions, 0 deletions
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index 098f0fc96c..8524f0b72b 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -268,6 +268,15 @@ void SkBitmapDevice::writePixels(const SkBitmap& bitmap,
}
#endif
+void* SkBitmapDevice::onAccessPixels(SkImageInfo* info, size_t* rowBytes) {
+ if (fBitmap.getPixels()) {
+ *info = fBitmap.info();
+ *rowBytes = fBitmap.rowBytes();
+ return fBitmap.getPixels();
+ }
+ return NULL;
+}
+
static void rect_memcpy(void* dst, size_t dstRB, const void* src, size_t srcRB, size_t bytesPerRow,
int rowCount) {
SkASSERT(bytesPerRow <= srcRB);
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 9fbb37bf31..4086291507 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1040,6 +1040,15 @@ const void* SkCanvas::onPeekPixels(SkImageInfo* info, size_t* rowBytes) {
return dev ? dev->peekPixels(info, rowBytes) : NULL;
}
+void* SkCanvas::accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes) {
+ return this->onAccessTopLayerPixels(info, rowBytes);
+}
+
+void* SkCanvas::onAccessTopLayerPixels(SkImageInfo* info, size_t* rowBytes) {
+ SkBaseDevice* dev = this->getTopDevice();
+ return dev ? dev->accessPixels(info, rowBytes) : NULL;
+}
+
SkAutoROCanvasPixels::SkAutoROCanvasPixels(SkCanvas* canvas) {
fAddr = canvas->peekPixels(&fInfo, &fRowBytes);
if (NULL == fAddr) {
@@ -1713,6 +1722,11 @@ void SkCanvas::internal_private_getTotalClipAsPath(SkPath* path) const {
(void)rgn.getBoundaryPath(path);
}
+GrRenderTarget* SkCanvas::internal_private_accessTopLayerRenderTarget() {
+ SkBaseDevice* dev = this->getTopDevice();
+ return dev ? dev->accessRenderTarget() : NULL;
+}
+
SkBaseDevice* SkCanvas::createLayerDevice(const SkImageInfo& info) {
SkBaseDevice* device = this->getTopDevice();
return device ? device->createCompatibleDeviceForSaveLayer(info) : NULL;
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 666e456e8c..587181302d 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -194,6 +194,22 @@ bool SkBaseDevice::onReadPixels(const SkBitmap&, int x, int y, SkCanvas::Config8
return false;
}
+void* SkBaseDevice::accessPixels(SkImageInfo* info, size_t* rowBytes) {
+ SkImageInfo tmpInfo;
+ size_t tmpRowBytes;
+ if (NULL == info) {
+ info = &tmpInfo;
+ }
+ if (NULL == rowBytes) {
+ rowBytes = &tmpRowBytes;
+ }
+ return this->onAccessPixels(info, rowBytes);
+}
+
+void* SkBaseDevice::onAccessPixels(SkImageInfo* info, size_t* rowBytes) {
+ return NULL;
+}
+
#ifdef SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
void SkBaseDevice::writePixels(const SkBitmap&, int x, int y, SkCanvas::Config8888) {}
#endif