Update to tk 8.5.19

This commit is contained in:
Zachary Ware
2017-11-24 17:53:51 -06:00
parent 27e7dfc7da
commit c67b328f06
325 changed files with 12511 additions and 12047 deletions

View File

@@ -9,6 +9,7 @@
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
* Copyright 2001-2009, Apple Inc.
* Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net>
* Copyright 2014 Marc Culler.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -141,7 +142,7 @@ TkpOpenDisplay(
static NSRect maxBounds = {{0, 0}, {0, 0}};
static char vendor[25] = "";
NSArray *cgVers;
NSAutoreleasePool *pool;
NSAutoreleasePool *pool = [NSAutoreleasePool new];
if (gMacDisplay != NULL) {
if (strcmp(gMacDisplay->display->display_name, display_name) == 0) {
@@ -165,7 +166,6 @@ TkpOpenDisplay(
display->default_screen = 0;
display->display_name = (char *) macScreenName;
pool = [NSAutoreleasePool new];
cgVers = [[[NSBundle bundleWithIdentifier:@"com.apple.CoreGraphics"]
objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
componentsSeparatedByString:@"."];
@@ -176,12 +176,25 @@ TkpOpenDisplay(
display->proto_minor_version = [[cgVers objectAtIndex:2] integerValue];
}
if (!vendor[0]) {
snprintf(vendor, sizeof(vendor), "Apple AppKit %s %g",
([NSGarbageCollector defaultCollector] ? "GC" : "RR"),
snprintf(vendor, sizeof(vendor), "Apple AppKit %g",
NSAppKitVersionNumber);
}
display->vendor = vendor;
Gestalt(gestaltSystemVersion, (SInt32 *) &display->release);
{
int major, minor, patch;
#if MAC_OS_X_VERSION_MIN_REQUIRED < 10100
Gestalt(gestaltSystemVersionMajor, (SInt32*)&major);
Gestalt(gestaltSystemVersionMinor, (SInt32*)&minor);
Gestalt(gestaltSystemVersionBugFix, (SInt32*)&patch);
#else
NSOperatingSystemVersion systemVersion = [[NSProcessInfo processInfo] operatingSystemVersion];
major = systemVersion.majorVersion;
minor = systemVersion.minorVersion;
patch = systemVersion.patchVersion;
#endif
display->release = major << 16 | minor << 8 | patch;
}
/*
* These screen bits never change
@@ -809,7 +822,6 @@ XCreateImage(
int bytes_per_line)
{
XImage *ximage;
display->request++;
ximage = (XImage *) ckalloc(sizeof(XImage));
@@ -819,6 +831,7 @@ XCreateImage(
ximage->xoffset = offset;
ximage->format = format;
ximage->data = data;
ximage->obdata = NULL;
if (format == ZPixmap) {
ximage->bits_per_pixel = 32;
@@ -850,7 +863,6 @@ XCreateImage(
ximage->red_mask = 0x00FF0000;
ximage->green_mask = 0x0000FF00;
ximage->blue_mask = 0x000000FF;
ximage->obdata = NULL;
ximage->f.create_image = NULL;
ximage->f.destroy_image = DestroyImage;
ximage->f.get_pixel = ImageGetPixel;
@@ -869,8 +881,9 @@ XCreateImage(
* This function copies data from a pixmap or window into an XImage.
*
* Results:
* Returns a newly allocated image containing the data from the given
* rectangle of the given drawable.
* Returns a newly allocated XImage containing the data from the given
* rectangle of the given drawable, or NULL if the XImage could not be
* constructed.
*
* Side effects:
* None.
@@ -889,60 +902,84 @@ XGetImage(
unsigned long plane_mask,
int format)
{
MacDrawable *macDraw = (MacDrawable *) d;
XImage * imagePtr = NULL;
Pixmap pixmap = (Pixmap) NULL;
Tk_Window win = (Tk_Window) macDraw->winPtr;
GC gc;
char * data = NULL;
int depth = 32;
int offset = 0;
int bitmap_pad = 0;
int bytes_per_line = 0;
NSBitmapImageRep *bitmap_rep;
NSUInteger bitmap_fmt;
XImage * imagePtr = NULL;
char * bitmap = NULL;
char * image_data=NULL;
int depth = 32;
int offset = 0;
int bitmap_pad = 0;
int bytes_per_row = 4*width;
int size;
TkMacOSXDbgMsg("XGetImage");
if (format == ZPixmap) {
if (width > 0 && height > 0) {
/*
* Tk_GetPixmap fails for zero width or height.
*/
pixmap = Tk_GetPixmap(display, d, width, height, depth);
if (width == 0 || height == 0) {
/* This happens all the time.
TkMacOSXDbgMsg("XGetImage: empty image requested");
*/
return NULL;
}
if (win) {
XGCValues values;
gc = Tk_GetGC(win, 0, &values);
} else {
gc = XCreateGC(display, pixmap, 0, NULL);
bitmap_rep = BitmapRepFromDrawableRect(d, x, y,width, height);
bitmap_fmt = [bitmap_rep bitmapFormat];
if ( bitmap_rep == Nil ||
(bitmap_fmt != 0 && bitmap_fmt != 1) ||
[bitmap_rep samplesPerPixel] != 4 ||
[bitmap_rep isPlanar] != 0 ) {
TkMacOSXDbgMsg("XGetImage: Failed to construct NSBitmapRep");
return NULL;
}
if (pixmap) {
CGContextRef context;
XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0);
context = ((MacDrawable *) pixmap)->context;
if (context) {
data = CGBitmapContextGetData(context);
bytes_per_line = CGBitmapContextGetBytesPerRow(context);
NSSize image_size = NSMakeSize(width, height);
NSImage* ns_image = [[NSImage alloc]initWithSize:image_size];
[ns_image addRepresentation:bitmap_rep];
/* Assume premultiplied nonplanar data with 4 bytes per pixel.*/
if ( [bitmap_rep isPlanar ] == 0 &&
[bitmap_rep samplesPerPixel] == 4 ) {
bytes_per_row = [bitmap_rep bytesPerRow];
size = bytes_per_row*height;
image_data = (char*)[bitmap_rep bitmapData];
if ( image_data ) {
int row, n, m;
bitmap = ckalloc(size);
/*
Oddly enough, the bitmap has the top row at the beginning,
and the pixels are in BGRA or ABGR format.
*/
if (bitmap_fmt == 0) {
/* BGRA */
for (row=0, n=0; row<height; row++, n+=bytes_per_row) {
for (m=n; m<n+bytes_per_row; m+=4) {
*(bitmap+m) = *(image_data+m+2);
*(bitmap+m+1) = *(image_data+m+1);
*(bitmap+m+2) = *(image_data+m);
*(bitmap+m+3) = *(image_data+m+3);
}
}
} else {
/* ABGR */
for (row=0, n=0; row<height; row++, n+=bytes_per_row) {
for (m=n; m<n+bytes_per_row; m+=4) {
*(bitmap+m) = *(image_data+m+3);
*(bitmap+m+1) = *(image_data+m+2);
*(bitmap+m+2) = *(image_data+m+1);
*(bitmap+m+3) = *(image_data+m);
}
}
}
}
}
if (data) {
if (bitmap) {
imagePtr = XCreateImage(display, NULL, depth, format, offset,
data, width, height, bitmap_pad, bytes_per_line);
/*
* Track Pixmap underlying the XImage in the unused obdata field
* so that we can treat XImages coming from XGetImage specially.
*/
imagePtr->obdata = (XPointer) pixmap;
} else if (pixmap) {
Tk_FreePixmap(display, pixmap);
}
if (!win) {
XFreeGC(display, gc);
(char*)bitmap, width, height, bitmap_pad, bytes_per_row);
[ns_image removeRepresentation:bitmap_rep]; /*releases the rep*/
[ns_image release];
}
} else {
TkMacOSXDbgMsg("Invalid image format");
TkMacOSXDbgMsg("Could not extract image from drawable.");
}
return imagePtr;
}
@@ -968,9 +1005,7 @@ DestroyImage(
XImage *image)
{
if (image) {
if (image->obdata) {
Tk_FreePixmap((Display*) gMacDisplay, (Pixmap) image->obdata);
} else if (image->data) {
if (image->data) {
ckfree(image->data);
}
ckfree((char*) image);