aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cocoa/PlatCocoa.mm11
1 files changed, 7 insertions, 4 deletions
diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm
index 937edbf00..37334043e 100644
--- a/cocoa/PlatCocoa.mm
+++ b/cocoa/PlatCocoa.mm
@@ -620,6 +620,11 @@ void Scintilla::SurfaceImpl::AlphaRectangle(PRectangle rc, int /*cornerSize*/, C
}
}
+static void ProviderReleaseData(void *, const void *data, size_t) {
+ const unsigned char *pixels = reinterpret_cast<const unsigned char *>(data);
+ delete []pixels;
+}
+
static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char *pixelsImage, bool invert) {
CGImageRef image = 0;
@@ -631,9 +636,8 @@ static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char
// Create a data provider.
CGDataProviderRef dataProvider = 0;
- unsigned char *pixelsUpsideDown = 0;
if (invert) {
- pixelsUpsideDown = new unsigned char[bitmapByteCount];
+ unsigned char *pixelsUpsideDown = new unsigned char[bitmapByteCount];
for (int y=0; y<height; y++) {
int yInverse = height - y - 1;
@@ -643,7 +647,7 @@ static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char
}
dataProvider = CGDataProviderCreateWithData(
- NULL, pixelsUpsideDown, bitmapByteCount, NULL);
+ NULL, pixelsUpsideDown, bitmapByteCount, ProviderReleaseData);
} else {
dataProvider = CGDataProviderCreateWithData(
NULL, pixelsImage, bitmapByteCount, NULL);
@@ -665,7 +669,6 @@ static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char
CGDataProviderRelease(dataProvider);
}
- delete []pixelsUpsideDown;
// The image retains the color space, so we can release it.
CGColorSpaceRelease(colorSpace);