summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXImage.c
diff options
context:
space:
mode:
authorKevin Walzer <kw@codebykevin.com>2022-02-12 16:11:42 (GMT)
committerKevin Walzer <kw@codebykevin.com>2022-02-12 16:11:42 (GMT)
commita0f3384c5c976dc892b23441c0f93d1dce761c0d (patch)
tree6b6575ba56a2e4b24bd32ef2bbb48f24bf5e4b88 /macosx/tkMacOSXImage.c
parent23ebb7efcab9540b1889a6f441d51ae6f0ac80fa (diff)
parentb9d4b176d94b936835e2c567bee130325b25ab4d (diff)
downloadtk-a0f3384c5c976dc892b23441c0f93d1dce761c0d.zip
tk-a0f3384c5c976dc892b23441c0f93d1dce761c0d.tar.gz
tk-a0f3384c5c976dc892b23441c0f93d1dce761c0d.tar.bz2
Merge Chavez patches to trunk
Diffstat (limited to 'macosx/tkMacOSXImage.c')
-rw-r--r--macosx/tkMacOSXImage.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/macosx/tkMacOSXImage.c b/macosx/tkMacOSXImage.c
index 28c73df..0b63148 100644
--- a/macosx/tkMacOSXImage.c
+++ b/macosx/tkMacOSXImage.c
@@ -144,25 +144,28 @@ TkMacOSXCreateCGImageWithXImage(
bitsPerComponent = 1;
bitsPerPixel = 1;
- if (image->bitmap_bit_order != MSBFirst) {
- char *srcPtr = image->data + image->xoffset;
- char *endPtr = srcPtr + len;
- char *destPtr = (data = (char *)ckalloc(len));
+ data = (char *)ckalloc(len);
+ if (data) {
+ if (image->bitmap_bit_order != MSBFirst) {
+ char *srcPtr = image->data + image->xoffset;
+ char *endPtr = srcPtr + len;
+ char *destPtr = data;
- while (srcPtr < endPtr) {
- *destPtr++ = xBitReverseTable[(unsigned char)(*(srcPtr++))];
+ while (srcPtr < endPtr) {
+ *destPtr++ = xBitReverseTable[(unsigned char)(*(srcPtr++))];
+ }
+ } else {
+ memcpy(data, image->data + image->xoffset, len);
}
- } else {
- data = (char *)memcpy(ckalloc(len), image->data + image->xoffset, len);
- }
- if (data) {
provider = CGDataProviderCreateWithData(data, data, len,
releaseData);
- }
- if (provider) {
+ if (!provider) {
+ ckfree(data);
+ }
img = CGImageMaskCreate(image->width, image->height,
bitsPerComponent, bitsPerPixel, image->bytes_per_line,
provider, decode, 0);
+ CGDataProviderRelease(provider);
}
} else if ((image->format == ZPixmap) && (image->bits_per_pixel == 32)) {
@@ -170,8 +173,6 @@ TkMacOSXCreateCGImageWithXImage(
* Color image
*/
- CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
-
if (image->width == 0 && image->height == 0) {
/*
@@ -180,19 +181,22 @@ TkMacOSXCreateCGImageWithXImage(
return NULL;
}
+ CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
bitsPerComponent = 8;
bitsPerPixel = 32;
bitmapInfo = kCGBitmapByteOrder32Big | alphaInfo;
- data = (char *)memcpy(ckalloc(len), image->data + image->xoffset, len);
+ data = (char *)ckalloc(len);
if (data) {
+ memcpy(data, image->data + image->xoffset, len);
provider = CGDataProviderCreateWithData(data, data, len,
releaseData);
- }
- if (provider) {
+ if (!provider) {
+ ckfree(data);
+ }
img = CGImageCreate(image->width, image->height, bitsPerComponent,
bitsPerPixel, image->bytes_per_line, colorspace, bitmapInfo,
provider, decode, 0, kCGRenderingIntentDefault);
- CFRelease(provider);
+ CGDataProviderRelease(provider);
}
if (colorspace) {
CFRelease(colorspace);
@@ -635,6 +639,7 @@ CreateCGImageFromDrawableRect(
CGImageRef cg_image = NULL, result = NULL;
if (mac_drawable->flags & TK_IS_PIXMAP) {
cg_context = TkMacOSXGetCGContextForDrawable(drawable);
+ CGContextRetain(cg_context);
} else {
NSView *view = TkMacOSXGetNSViewForDrawable(mac_drawable);
if (view == nil) {