MacOS: fix capture of window titlebar under MacOS 10.13 "High Sierra"

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12547 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Manolo Gouy 2017-11-07 17:01:20 +00:00
parent 660f4160af
commit 9aaf6df90c

View File

@ -4335,9 +4335,25 @@ void Fl_Cocoa_Window_Driver::capture_titlebar_and_borders(Fl_Shared_Image*& top,
uchar *rgba = new uchar[4 * w() * htop * 4];
CGContextRef auxgc = CGBitmapContextCreate(rgba, 2 * w(), 2 * htop, 8, 8 * w(), cspace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(cspace);
memset(rgba, 0xff, 4 * w() * htop * 4); // initialize to opaque white
CGContextScaleCTM(auxgc, 2, 2);
if (layer) {
Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, auxgc, w(), htop);
if (fl_mac_os_version >= 101300) {
// drawn layer is left transparent and alpha-premultiplied: demultiply it and set it opaque.
uchar *p = rgba;
uchar *last = rgba + 4 * w() * htop * 4;
while (p < last) {
uchar q = *(p+3);
if (q) {
float m = 255./q;
*p++ *= m;
*p++ *= m;
*p++ *= m;
*p++ = 0xff;
} else p += 4;
}
}
} else {
CGImageRef img = CGImage_from_window_rect(0, -htop, w(), htop);
CGContextSaveGState(auxgc);