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

@@ -8,6 +8,7 @@
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
* Copyright 2001-2009, Apple Inc.
* Copyright (c) 2006-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.
@@ -16,6 +17,7 @@
#include "tkMacOSXPrivate.h"
#include "tkMacOSXDebug.h"
#include "xbytes.h"
#include "tkButton.h"
/*
#ifdef TK_MAC_DEBUG
@@ -99,24 +101,88 @@ TkMacOSXInitCGDrawing(
(char *) &useThemedFrame, TCL_LINK_BOOLEAN) != TCL_OK) {
Tcl_ResetResult(interp);
}
#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS
if (Tcl_LinkVar(interp, "::tk::mac::useCompatibilityMetrics",
(char *) &tkMacOSXUseCompatibilityMetrics, TCL_LINK_BOOLEAN)
!= TCL_OK) {
Tcl_ResetResult(interp);
}
#endif
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* BitmapRepFromDrawableRect
*
* Extract bitmap data from a MacOSX drawable as an NSBitmapImageRep.
*
* Results:
* Returns an autoreleased NSBitmapRep representing the image of the given
* rectangle of the given drawable.
*
* NOTE: The x,y coordinates should be relative to a coordinate system with
* origin at the top left, as used by XImage and CGImage, not bottom
* left as used by NSView.
*
* Side effects:
* None
*
*----------------------------------------------------------------------
*/
NSBitmapImageRep*
BitmapRepFromDrawableRect(
Drawable drawable,
int x,
int y,
unsigned int width,
unsigned int height)
{
MacDrawable *mac_drawable = (MacDrawable *) drawable;
CGContextRef cg_context=NULL;
CGImageRef cg_image=NULL, sub_cg_image=NULL;
NSBitmapImageRep *bitmap_rep=NULL;
NSView *view=NULL;
if ( mac_drawable->flags & TK_IS_PIXMAP ) {
/*
This means that the MacDrawable is functioning as a Tk Pixmap, so its view
field is NULL.
*/
cg_context = GetCGContextForDrawable(drawable);
CGRect image_rect = CGRectMake(x, y, width, height);
cg_image = CGBitmapContextCreateImage( (CGContextRef) cg_context);
sub_cg_image = CGImageCreateWithImageInRect(cg_image, image_rect);
if ( sub_cg_image ) {
/*This can be dealloc'ed prematurely if set for autorelease, causing crashes.*/
bitmap_rep = [NSBitmapImageRep alloc];
[bitmap_rep initWithCGImage:sub_cg_image];
}
if ( cg_image ) {
CGImageRelease(cg_image);
}
} else if ( (view = TkMacOSXDrawableView(mac_drawable)) ) {
/* convert top-left coordinates to NSView coordinates */
int view_height = [view bounds].size.height;
NSRect view_rect = NSMakeRect(x + mac_drawable->xOff,
view_height - height - y - mac_drawable->yOff,
width,height);
if ( [view lockFocusIfCanDraw] ) {
/*This can be dealloc'ed prematurely if set for autorelease, causing crashes.*/
bitmap_rep = [NSBitmapImageRep alloc];
bitmap_rep = [bitmap_rep initWithFocusedViewRect:view_rect];
[view unlockFocus];
} else {
TkMacOSXDbgMsg("Could not lock focus on view.");
}
} else {
TkMacOSXDbgMsg("Invalid source drawable");
}
return bitmap_rep;
}
/*
*----------------------------------------------------------------------
*
* XCopyArea --
*
* Copies data from one drawable to another using block transfer
* routines.
* Copies data from one drawable to another.
*
* Results:
* None.
@@ -133,86 +199,63 @@ XCopyArea(
Display *display, /* Display. */
Drawable src, /* Source drawable. */
Drawable dst, /* Destination drawable. */
GC gc, /* GC to use. */
GC gc, /* GC to use. */
int src_x, /* X & Y, width & height */
int src_y, /* define the source rectangle */
unsigned int width, /* that will be copied. */
unsigned int width, /* that will be copied. */
unsigned int height,
int dest_x, /* Dest X & Y on dest rect. */
int dest_y)
{
TkMacOSXDrawingContext dc;
MacDrawable *srcDraw = (MacDrawable *) src;
NSBitmapImageRep *bitmap_rep = NULL;
CGImageRef img = NULL;
display->request++;
if (!width || !height) {
/* TkMacOSXDbgMsg("Drawing of emtpy area requested"); */
/* This happens all the time.
TkMacOSXDbgMsg("Drawing of empty area requested");
*/
return;
}
if (srcDraw->flags & TK_IS_PIXMAP) {
if (!TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) {
return;
}
if (dc.context) {
CGImageRef img = TkMacOSXCreateCGImageWithDrawable(src);
if (img) {
DrawCGImage(dst, gc, dc.context, img, gc->foreground,
gc->background, CGRectMake(0, 0,
srcDraw->size.width, srcDraw->size.height),
if (!TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) {
return;
/*TkMacOSXDbgMsg("Failed to setup drawing context.");*/
}
if ( dc.context ) {
if (srcDraw->flags & TK_IS_PIXMAP) {
img = TkMacOSXCreateCGImageWithDrawable(src);
}else if (TkMacOSXDrawableWindow(src)) {
bitmap_rep = BitmapRepFromDrawableRect(src, src_x, src_y, width, height);
if ( bitmap_rep ) {
img = [bitmap_rep CGImage];
}
} else {
TkMacOSXDbgMsg("Invalid source drawable - neither window nor pixmap.");
}
if (img) {
DrawCGImage(dst, gc, dc.context, img, gc->foreground, gc->background,
CGRectMake(0, 0, srcDraw->size.width, srcDraw->size.height),
CGRectMake(src_x, src_y, width, height),
CGRectMake(dest_x, dest_y, width, height));
CFRelease(img);
} else {
TkMacOSXDbgMsg("Invalid source drawable");
}
} else {
TkMacOSXDbgMsg("Invalid destination drawable");
}
TkMacOSXRestoreDrawingContext(&dc);
} else if (TkMacOSXDrawableWindow(src)) {
NSView *view = TkMacOSXDrawableView(srcDraw);
NSWindow *w = [view window];
NSInteger gs = [w windowNumber] > 0 ? [w gState] : 0;
/* // alternative using per-view gState:
NSInteger gs = [view gState];
if (!gs) {
[view allocateGState];
if ([view lockFocusIfCanDraw]) {
[view unlockFocus];
}
gs = [view gState];
}
*/
if (!gs || !TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) {
return;
}
if (dc.context) {
NSGraphicsContext *gc = nil;
CGFloat boundsH = [view bounds].size.height;
NSRect srcRect = NSMakeRect(srcDraw->xOff + src_x, boundsH -
height - (srcDraw->yOff + src_y), width, height);
CFRelease(img);
if (((MacDrawable *) dst)->flags & TK_IS_PIXMAP) {
gc = [NSGraphicsContext graphicsContextWithGraphicsPort:
dc.context flipped:NO];
if (gc) {
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:gc];
}
}
NSCopyBits(gs, srcRect, NSMakePoint(dest_x,
dc.portBounds.size.height - dest_y));
if (gc) {
[NSGraphicsContext restoreGraphicsState];
}
} else {
TkMacOSXDbgMsg("Invalid destination drawable");
TkMacOSXDbgMsg("Failed to construct CGImage.");
}
TkMacOSXRestoreDrawingContext(&dc);
} else {
TkMacOSXDbgMsg("Invalid source drawable");
TkMacOSXDbgMsg("Invalid destination drawable - no context.");
return;
}
TkMacOSXRestoreDrawingContext(&dc);
}
/*
@@ -239,10 +282,10 @@ XCopyPlane(
Display *display, /* Display. */
Drawable src, /* Source drawable. */
Drawable dst, /* Destination drawable. */
GC gc, /* GC to use. */
GC gc, /* GC to use. */
int src_x, /* X & Y, width & height */
int src_y, /* define the source rectangle */
unsigned int width, /* that will be copied. */
unsigned int width, /* that will be copied. */
unsigned int height,
int dest_x, /* Dest X & Y on dest rect. */
int dest_y,
@@ -250,10 +293,11 @@ XCopyPlane(
{
TkMacOSXDrawingContext dc;
MacDrawable *srcDraw = (MacDrawable *) src;
MacDrawable *dstDraw = (MacDrawable *) dst;
display->request++;
if (!width || !height) {
/* TkMacOSXDbgMsg("Drawing of emtpy area requested"); */
/* TkMacOSXDbgMsg("Drawing of empty area requested"); */
return;
}
if (plane != 1) {
@@ -263,33 +307,47 @@ XCopyPlane(
if (!TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) {
return;
}
if (dc.context) {
CGContextRef context = dc.context;
if (context) {
CGImageRef img = TkMacOSXCreateCGImageWithDrawable(src);
if (img) {
TkpClipMask *clipPtr = (TkpClipMask *) gc->clip_mask;
unsigned long imageBackground = gc->background;
if (clipPtr && clipPtr->type == TKP_CLIP_PIXMAP &&
clipPtr->value.pixmap == src) {
imageBackground = TRANSPARENT_PIXEL << 24;
if (clipPtr && clipPtr->type == TKP_CLIP_PIXMAP){
CGImageRef mask = TkMacOSXCreateCGImageWithDrawable(clipPtr->value.pixmap);
CGRect rect = CGRectMake(dest_x, dest_y, width, height);
rect = CGRectOffset(rect, dstDraw->xOff, dstDraw->yOff);
CGContextSaveGState(context);
/* Move the origin of the destination to top left. */
CGContextTranslateCTM(context, 0, rect.origin.y + CGRectGetMaxY(rect));
CGContextScaleCTM(context, 1, -1);
/* Fill with the background color, clipping to the mask. */
CGContextClipToMask(context, rect, mask);
TkMacOSXSetColorInContext(gc, gc->background, dc.context);
CGContextFillRect(dc.context, rect);
/* Fill with the foreground color, clipping to the intersection of img and mask. */
CGContextClipToMask(context, rect, img);
TkMacOSXSetColorInContext(gc, gc->foreground, context);
CGContextFillRect(context, rect);
CGContextRestoreGState(context);
CGImageRelease(mask);
CGImageRelease(img);
} else {
DrawCGImage(dst, gc, dc.context, img, gc->foreground, imageBackground,
CGRectMake(0, 0, srcDraw->size.width, srcDraw->size.height),
CGRectMake(src_x, src_y, width, height),
CGRectMake(dest_x, dest_y, width, height));
CGImageRelease(img);
}
DrawCGImage(dst, gc, dc.context, img, gc->foreground,
imageBackground, CGRectMake(0, 0,
srcDraw->size.width, srcDraw->size.height),
CGRectMake(src_x, src_y, width, height),
CGRectMake(dest_x, dest_y, width, height));
CFRelease(img);
} else {
} else { /* no image */
TkMacOSXDbgMsg("Invalid source drawable");
}
} else {
TkMacOSXDbgMsg("Invalid destination drawable");
TkMacOSXDbgMsg("Invalid destination drawable - could not get a bitmap context.");
}
TkMacOSXRestoreDrawingContext(&dc);
} else {
XCopyArea(display, src, dst, gc, src_x, src_y, width, height, dest_x,
dest_y);
} else { /* source drawable is a window, not a Pixmap */
XCopyArea(display, src, dst, gc, src_x, src_y, width, height, dest_x, dest_y);
}
}
@@ -313,16 +371,16 @@ XCopyPlane(
int
TkPutImage(
unsigned long *colors, /* Unused on Macintosh. */
int ncolors, /* Unused on Macintosh. */
int ncolors, /* Unused on Macintosh. */
Display* display, /* Display. */
Drawable d, /* Drawable to place image on. */
GC gc, /* GC to use. */
GC gc, /* GC to use. */
XImage* image, /* Image to place. */
int src_x, /* Source X & Y. */
int src_y,
int dest_x, /* Destination X & Y. */
int dest_y,
unsigned int width, /* Same width & height for both */
unsigned int width, /* Same width & height for both */
unsigned int height) /* distination and source. */
{
TkMacOSXDrawingContext dc;
@@ -383,22 +441,17 @@ CreateCGImageWithXImage(
char *data = NULL;
CGDataProviderReleaseDataCallback releaseData = ReleaseData;
if (image->obdata) {
/*
* Image from XGetImage
*/
img = TkMacOSXCreateCGImageWithDrawable((Pixmap) image->obdata);
} else if (image->bits_per_pixel == 1) {
if (image->bits_per_pixel == 1) {
/*
* BW image
*/
/* Reverses the sense of the bits */
static const CGFloat decodeWB[2] = {1, 0};
decode = decodeWB;
bitsPerComponent = 1;
bitsPerPixel = 1;
decode = decodeWB;
if (image->bitmap_bit_order != MSBFirst) {
char *srcPtr = image->data + image->xoffset;
char *endPtr = srcPtr + len;
@@ -408,29 +461,27 @@ CreateCGImageWithXImage(
*destPtr++ = xBitReverseTable[(unsigned char)(*(srcPtr++))];
}
} else {
data = memcpy(ckalloc(len), image->data + image->xoffset,
len);
data = memcpy(ckalloc(len), image->data + image->xoffset, len);
}
if (data) {
provider = CGDataProviderCreateWithData(data, data, len, releaseData);
}
if (provider) {
img = CGImageMaskCreate(image->width, image->height, bitsPerComponent,
bitsPerPixel, image->bytes_per_line,
provider, decode, 0);
bitsPerPixel, image->bytes_per_line, provider, decode, 0);
}
} else if (image->format == ZPixmap && image->bits_per_pixel == 32) {
/*
* Color image
*/
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
bitsPerComponent = 8;
bitsPerPixel = 32;
bitmapInfo = (image->byte_order == MSBFirst ?
kCGBitmapByteOrder32Big : kCGBitmapByteOrder32Little) |
kCGImageAlphaNoneSkipFirst;
kCGImageAlphaNoneSkipFirst;
data = memcpy(ckalloc(len), image->data + image->xoffset, len);
if (data) {
provider = CGDataProviderCreateWithData(data, data, len, releaseData);
@@ -439,6 +490,7 @@ CreateCGImageWithXImage(
img = CGImageCreate(image->width, image->height, bitsPerComponent,
bitsPerPixel, image->bytes_per_line, colorspace, bitmapInfo,
provider, decode, 0, kCGRenderingIntentDefault);
CFRelease(provider);
}
if (colorspace) {
CFRelease(colorspace);
@@ -446,10 +498,6 @@ CreateCGImageWithXImage(
} else {
TkMacOSXDbgMsg("Unsupported image type");
}
if (provider) {
CFRelease(provider);
}
return img;
}
@@ -618,17 +666,16 @@ GetCGContextForDrawable(
CGColorSpaceRef colorspace = NULL;
CGBitmapInfo bitmapInfo =
#ifdef __LITTLE_ENDIAN__
kCGBitmapByteOrder32Host;
kCGBitmapByteOrder32Host;
#else
kCGBitmapByteOrderDefault;
kCGBitmapByteOrderDefault;
#endif
char *data;
CGRect bounds = CGRectMake(0, 0, macDraw->size.width,
macDraw->size.height);
CGRect bounds = CGRectMake(0, 0, macDraw->size.width, macDraw->size.height);
if (macDraw->flags & TK_IS_BW_PIXMAP) {
bitsPerPixel = 8;
bitmapInfo = kCGImageAlphaOnly;
bitmapInfo = (CGBitmapInfo)kCGImageAlphaOnly;
} else {
colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
bitsPerPixel = 32;
@@ -697,9 +744,11 @@ DrawCGImage(
}
}
dstBounds = CGRectOffset(dstBounds, macDraw->xOff, macDraw->yOff);
if (CGImageIsMask(image)) {
/*CGContextSaveGState(context);*/
if (macDraw->flags & TK_IS_BW_PIXMAP) {
/* Set fill color to black, background comes from the context, or is transparent. */
if (imageBackground != TRANSPARENT_PIXEL << 24) {
CGContextClearRect(context, dstBounds);
}
@@ -712,6 +761,7 @@ DrawCGImage(
TkMacOSXSetColorInContext(gc, imageForeground, context);
}
}
#ifdef TK_MAC_DEBUG_IMAGE_DRAWING
CGContextSaveGState(context);
CGContextSetLineWidth(context, 1.0);
@@ -1439,43 +1489,94 @@ TkScrollWindow(
int dx, int dy, /* Distance rectangle should be moved. */
TkRegion damageRgn) /* Region to accumulate damage in. */
{
MacDrawable *macDraw = (MacDrawable *) Tk_WindowId(tkwin);
NSView *view = TkMacOSXDrawableView(macDraw);
CGRect visRect, srcRect, dstRect;
CGFloat boundsH;
HIShapeRef dmgRgn, dstRgn;
int result;
Drawable drawable = Tk_WindowId(tkwin);
MacDrawable *macDraw = (MacDrawable *) drawable;
TKContentView *view = (TKContentView *)TkMacOSXDrawableView(macDraw);
CGRect srcRect, dstRect;
HIShapeRef dmgRgn = NULL, extraRgn = NULL;
NSRect bounds, visRect, scrollSrc, scrollDst;
int result = 0;
if (view && !CGRectIsEmpty(visRect = NSRectToCGRect([view visibleRect]))) {
boundsH = [view bounds].size.height;
srcRect = CGRectMake(macDraw->xOff + x, boundsH - height -
(macDraw->yOff + y), width, height);
dstRect = CGRectIntersection(CGRectOffset(srcRect, dx, -dy), visRect);
srcRect = CGRectIntersection(srcRect, visRect);
if (!CGRectIsEmpty(srcRect) && !CGRectIsEmpty(dstRect)) {
/*
CGRect sRect = CGRectIntersection(CGRectOffset(dstRect, -dx, dy),
srcRect);
NSCopyBits(0, NSRectFromCGRect(sRect),
NSPointFromCGPoint(CGRectOffset(sRect, dx, -dy).origin));
*/
[view scrollRect:NSRectFromCGRect(srcRect) by:NSMakeSize(dx, -dy)];
}
srcRect.origin.y = boundsH - srcRect.size.height - srcRect.origin.y;
dstRect.origin.y = boundsH - dstRect.size.height - dstRect.origin.y;
srcRect = CGRectUnion(srcRect, dstRect);
dmgRgn = HIShapeCreateMutableWithRect(&srcRect);
dstRgn = HIShapeCreateWithRect(&dstRect);
ChkErr(HIShapeDifference, dmgRgn, dstRgn, (HIMutableShapeRef) dmgRgn);
CFRelease(dstRgn);
TkMacOSXInvalidateViewRegion(view, dmgRgn);
if ( view ) {
/* Get the scroll area in NSView coordinates (origin at bottom left). */
bounds = [view bounds];
scrollSrc = NSMakeRect(
macDraw->xOff + x,
bounds.size.height - height - (macDraw->yOff + y),
width, height);
scrollDst = NSOffsetRect(scrollSrc, dx, -dy);
/* Limit scrolling to the window content area. */
visRect = [view visibleRect];
scrollSrc = NSIntersectionRect(scrollSrc, visRect);
scrollDst = NSIntersectionRect(scrollDst, visRect);
if ( !NSIsEmptyRect(scrollSrc) && !NSIsEmptyRect(scrollDst) ) {
/*
* Mark the difference between source and destination as damaged.
* This region is described in NSView coordinates (y=0 at the bottom)
* and converted to Tk coordinates later.
*/
srcRect = CGRectMake(x, y, width, height);
dstRect = CGRectOffset(srcRect, dx, dy);
/* Expand the rectangles slightly to avoid degeneracies. */
srcRect.origin.y -= 1;
srcRect.size.height += 2;
dstRect.origin.y += 1;
dstRect.size.height -= 2;
/* Compute the damage. */
dmgRgn = HIShapeCreateMutableWithRect(&srcRect);
extraRgn = HIShapeCreateWithRect(&dstRect);
ChkErr(HIShapeDifference, dmgRgn, extraRgn, (HIMutableShapeRef) dmgRgn);
result = HIShapeIsEmpty(dmgRgn) ? 0 : 1;
/* Convert to Tk coordinates. */
TkMacOSXSetWithNativeRegion(damageRgn, dmgRgn);
if (extraRgn) {
CFRelease(extraRgn);
}
/* Scroll the rectangle. */
[view scrollRect:scrollSrc by:NSMakeSize(dx, -dy)];
/* Shift the Tk children which meet the source rectangle. */
TkWindow *winPtr = (TkWindow *)tkwin;
TkWindow *childPtr;
CGRect childBounds;
for (childPtr = winPtr->childList; childPtr != NULL; childPtr = childPtr->nextPtr) {
if (Tk_IsMapped(childPtr) && !Tk_IsTopLevel(childPtr)) {
TkMacOSXWinCGBounds(childPtr, &childBounds);
if (CGRectIntersectsRect(srcRect, childBounds)) {
MacDrawable *macChild = childPtr->privatePtr;
if (macChild) {
macChild->yOff += dy;
macChild->xOff += dx;
childPtr->changes.y = macChild->yOff;
childPtr->changes.x = macChild->xOff;
}
}
}
}
/* Queue up Expose events for the damage region. */
int oldMode = Tcl_SetServiceMode(TCL_SERVICE_NONE);
[view generateExposeEvents:dmgRgn childrenOnly:1];
Tcl_SetServiceMode(oldMode);
/* Belt and suspenders: make the AppKit request a redraw
when it gets control again. */
}
} else {
dmgRgn = HIShapeCreateEmpty();
TkMacOSXSetWithNativeRegion(damageRgn, dmgRgn);
}
TkMacOSXSetWithNativeRegion(damageRgn, dmgRgn);
result = HIShapeIsEmpty(dmgRgn) ? 0 : 1;
CFRelease(dmgRgn);
if (dmgRgn) {
CFRelease(dmgRgn);
}
return result;
}
@@ -1688,6 +1789,7 @@ TkMacOSXRestoreDrawingContext(
{
if (dcPtr->context) {
CGContextSynchronize(dcPtr->context);
[[dcPtr->view window] setViewsNeedDisplay:YES];
[[dcPtr->view window] enableFlushWindow];
if (dcPtr->focusLocked) {
[dcPtr->view unlockFocus];
@@ -1726,7 +1828,7 @@ TkMacOSXGetClipRgn(
{
MacDrawable *macDraw = (MacDrawable *) drawable;
HIShapeRef clipRgn = NULL;
if (macDraw->winPtr && macDraw->flags & TK_CLIP_INVALID) {
TkMacOSXUpdateClipRgn(macDraw->winPtr);
#ifdef TK_MAC_DEBUG_DRAWING
@@ -1751,7 +1853,6 @@ TkMacOSXGetClipRgn(
} else if (macDraw->visRgn) {
clipRgn = HIShapeCreateCopy(macDraw->visRgn);
}
return clipRgn;
}
@@ -1804,15 +1905,16 @@ TkpClipDrawableToRect(
{
MacDrawable *macDraw = (MacDrawable *) d;
NSView *view = TkMacOSXDrawableView(macDraw);
if (macDraw->drawRgn) {
CFRelease(macDraw->drawRgn);
macDraw->drawRgn = NULL;
}
if (width >= 0 && height >= 0) {
CGRect drawRect = CGRectMake(x + macDraw->xOff, y + macDraw->yOff,
CGRect clipRect = CGRectMake(x + macDraw->xOff, y + macDraw->yOff,
width, height);
HIShapeRef drawRgn = HIShapeCreateWithRect(&drawRect);
HIShapeRef drawRgn = HIShapeCreateWithRect(&clipRect);
if (macDraw->winPtr && macDraw->flags & TK_CLIP_INVALID) {
TkMacOSXUpdateClipRgn(macDraw->winPtr);
@@ -1825,9 +1927,9 @@ TkpClipDrawableToRect(
macDraw->drawRgn = drawRgn;
}
if (view && view != [NSView focusView] && [view lockFocusIfCanDraw]) {
drawRect.origin.y = [view bounds].size.height -
(drawRect.origin.y + drawRect.size.height);
NSRectClip(NSRectFromCGRect(drawRect));
clipRect.origin.y = [view bounds].size.height -
(clipRect.origin.y + clipRect.size.height);
NSRectClip(NSRectFromCGRect(clipRect));
macDraw->flags |= TK_FOCUSED_VIEW;
}
} else {
@@ -1956,7 +2058,7 @@ TkpDrawHighlightBorder (
* TkpDrawFrame --
*
* This procedure draws the rectangular frame area. If the user
* has request themeing, it draws with a the background theme.
* has requested themeing, it draws with the background theme.
*
* Results:
* None.
@@ -1986,6 +2088,7 @@ TkpDrawFrame(
border = themedBorder;
}
}
Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin),
border, highlightWidth, highlightWidth,
Tk_Width(tkwin) - 2 * highlightWidth,