diff options
author | dgp <dgp@users.sourceforge.net> | 2016-07-21 20:09:34 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2016-07-21 20:09:34 (GMT) |
commit | dda0e48150cae61a711f1a8a75da978aa56d5534 (patch) | |
tree | 164f0fe443fc6ace33eb3be6a779fd4c27348d53 /generic | |
parent | 17498b240fd03ad8198212885715ae2e527e769a (diff) | |
parent | e75fd830b02a67926d8f07b3f778864edba1703c (diff) | |
download | tk-dda0e48150cae61a711f1a8a75da978aa56d5534.zip tk-dda0e48150cae61a711f1a8a75da978aa56d5534.tar.gz tk-dda0e48150cae61a711f1a8a75da978aa56d5534.tar.bz2 |
merge 8.6
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkBusy.c | 4 | ||||
-rw-r--r-- | generic/tkImgPhInstance.c | 25 | ||||
-rw-r--r-- | generic/tkWindow.c | 3 |
3 files changed, 30 insertions, 2 deletions
diff --git a/generic/tkBusy.c b/generic/tkBusy.c index 65248a2..b36d453 100644 --- a/generic/tkBusy.c +++ b/generic/tkBusy.c @@ -433,6 +433,10 @@ MakeTransparentWindowExist( TkpMakeTransparentWindowExist(tkwin, parent); + if (winPtr->window == None) { + return; /* Platform didn't make Window. */ + } + dispPtr = winPtr->dispPtr; hPtr = Tcl_CreateHashEntry(&dispPtr->winTable, (char *) winPtr->window, ¬Used); diff --git a/generic/tkImgPhInstance.c b/generic/tkImgPhInstance.c index 666a9b0..bd152f2 100644 --- a/generic/tkImgPhInstance.c +++ b/generic/tkImgPhInstance.c @@ -404,6 +404,9 @@ TkImgPhotoGet( * * Note that Win32 pre-defines those operations that we really need. * + * Note that on MacOS, if the background comes from a Retina display + * then it will be twice as wide and twice as high as the photoimage. + * *---------------------------------------------------------------------- */ @@ -433,7 +436,16 @@ BlendComplexAlpha( unsigned long pixel; unsigned char r, g, b, alpha, unalpha, *masterPtr; unsigned char *alphaAr = iPtr->masterPtr->pix32; - +#if defined(MAC_OSX_TK) + /* Background "pixels" are actually 2^pp x 2^pp blocks of subpixels. Each + * block gets blended with the color of one image pixel. Since we iterate + * over the background subpixels, we reset the width and height to the + * subpixel dimensions of the background image we are using. + */ + int pp = bgImg->pixelpower; + width = width << pp; + height = height << pp; +#endif /* * This blending is an integer version of the Source-Over compositing rule * (see Porter&Duff, "Compositing Digital Images", proceedings of SIGGRAPH @@ -532,9 +544,16 @@ BlendComplexAlpha( #endif /* !_WIN32 && !MAC_OSX_TK */ for (y = 0; y < height; y++) { +# if !defined(MAC_OSX_TK) line = (y + yOffset) * iPtr->masterPtr->width; for (x = 0; x < width; x++) { masterPtr = alphaAr + ((line + x + xOffset) * 4); +#else + /* Repeat each image row and column 2^pp times. */ + line = ((y>>pp) + yOffset) * iPtr->masterPtr->width; + for (x = 0; x < width; x++) { + masterPtr = alphaAr + ((line + (x>>pp) + xOffset) * 4); +#endif alpha = masterPtr[3]; /* @@ -635,7 +654,9 @@ TkImgPhotoDisplay( (unsigned int)width, (unsigned int)height, AllPlanes, ZPixmap); if (bgImg == NULL) { Tk_DeleteErrorHandler(handler); - /* We failed to get the image so draw without blending alpha. It's the best we can do */ + /* We failed to get the image, so draw without blending alpha. + * It's the best we can do. + */ goto fallBack; } diff --git a/generic/tkWindow.c b/generic/tkWindow.c index 7afb031..0c60321 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -2351,6 +2351,9 @@ Tk_IdToWindow( break; } } + if (window == None) { + return NULL; + } hPtr = Tcl_FindHashEntry(&dispPtr->winTable, (char *) window); if (hPtr == NULL) { |