aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/mac/SkCreateCGImageRef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/mac/SkCreateCGImageRef.cpp')
-rw-r--r--src/utils/mac/SkCreateCGImageRef.cpp36
1 files changed, 7 insertions, 29 deletions
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index b2a37f0174..6c9415edc0 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -3,27 +3,7 @@
extern CGImageRef SkCreateCGImageRef(const SkBitmap&);
-static const void* SkBitmap_GetBytesPointer(void* info) {
- SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
- bitmap->lockPixels();
- return bitmap->getPixels();
-}
-
-static void SkBitmap_ReleaseBytePointer(void* info, const void* pointer) {
- SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
- bitmap->unlockPixels();
-}
-
-static size_t SkBitmap_GetBytesAtPosition(void* info, void* buffer,
- off_t offset, size_t count) {
- SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
- bitmap->lockPixels();
- memcpy(buffer, (const char*)bitmap->getPixels() + offset, count);
- bitmap->unlockPixels();
- return count;
-}
-
-static void SkBitmap_ReleaseInfo(void* info) {
+static void SkBitmap_ReleaseInfo(void* info, const void* pixelData, size_t size) {
SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
delete bitmap;
}
@@ -67,15 +47,13 @@ CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
const int h = bitmap->height();
const size_t s = bitmap->getSize();
- CGDataProviderDirectCallbacks procs;
- procs.version = 0;
- procs.getBytePointer = SkBitmap_GetBytesPointer;
- procs.releaseBytePointer = SkBitmap_ReleaseBytePointer;
- procs.getBytesAtPosition = SkBitmap_GetBytesAtPosition;
- procs.releaseInfo = SkBitmap_ReleaseInfo;
-
// our provider "owns" the bitmap*, and will take care of deleting it
- CGDataProviderRef dataRef = CGDataProviderCreateDirect(bitmap, s, &procs);
+ // we initially lock it, so we can access the pixels. The bitmap will be deleted in the release
+ // proc, which will in turn unlock the pixels
+ bitmap->lockPixels();
+ CGDataProviderRef dataRef = CGDataProviderCreateWithData(bitmap, bitmap->getPixels(), s,
+ SkBitmap_ReleaseInfo);
+
CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGImageRef ref = CGImageCreate(w, h, bitsPerComponent,
bitmap->bytesPerPixel() * 8,