diff options
| -rw-r--r-- | src/Fl_cocoa.mm | 17 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 2 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx | 4 | ||||
| -rw-r--r-- | src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx | 2 |
5 files changed, 21 insertions, 6 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index c7f4e41cc..f70cc62ec 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -4382,7 +4382,22 @@ void Fl_Cocoa_Window_Driver::draw_layer_to_context(CALayer *layer, CGContextRef CGContextFillRect(gc, CGRectMake(0, 0, w, h)); } CGContextSetShouldAntialias(gc, true); - [layer renderInContext:gc]; // 10.5 + if (fl_mac_os_version >= 101500) { + FLWindow *flwin = fl_xid(pWindow); + [flwin makeMainWindow]; + [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:NO]; + NSInteger win_id = [flwin windowNumber]; + CFArrayRef array = CFArrayCreate(NULL, (const void**)&win_id, 1, NULL); + NSRect rr = [flwin frame]; + rr.origin.y += rr.size.height - h; + rr.size.height = h; + rr.origin.y = CGDisplayBounds(CGMainDisplayID()).size.height - (rr.origin.y + rr.size.height); + CGImageRef img = CGWindowListCreateImageFromArray(rr, array, kCGWindowImageBoundsIgnoreFraming); // 10.5 + CFRelease(array); + CGContextDrawImage(gc, CGRectMake(0, 0, w, h), img); + CGImageRelease(img); + } else + [layer renderInContext:gc]; // 10.5 CGContextRestoreGState(gc); #endif } diff --git a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm index 2a0955622..9cf95a24a 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm +++ b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm @@ -405,7 +405,7 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset CGContextSaveGState(gc); CGContextTranslateCTM(gc, x_offset - 0.5, y_offset + bt - 0.5); CGContextScaleCTM(gc, 1/s, -1/s); - Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w() * s, bt); + Fl_Cocoa_Window_Driver::driver(win)->draw_layer_to_context(layer, gc, win->w() * s, bt); CGContextRestoreGState(gc); bool clip_corners = fl_mac_os_version >= 100600 && !win->parent(); if (clip_corners) { diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index dedc7bb34..2b485490a 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -140,7 +140,7 @@ public: virtual void capture_titlebar_and_borders(Fl_RGB_Image*& top, Fl_RGB_Image*& left, Fl_RGB_Image*& bottom, Fl_RGB_Image*& right); virtual void wait_for_expose(); CALayer *get_titlebar_layer(); - static void draw_layer_to_context(CALayer *layer, CGContextRef gc, int w, int h); + void draw_layer_to_context(CALayer *layer, CGContextRef gc, int w, int h); virtual int scroll(int src_x, int src_y, int src_w, int src_h, int dest_x, int dest_y, void (*draw_area)(void*, int,int,int,int), void* data); // these functions are OpenGL-related and use objective-c diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx index 652585502..cec8e0b58 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx @@ -328,8 +328,8 @@ void Fl_Cocoa_Window_Driver::capture_titlebar_and_borders(Fl_RGB_Image*& top, Fl CGContextClearRect(auxgc, CGRectMake(0,0,data_w,data_h)); CGContextScaleCTM(auxgc, factor, factor); if (layer) { - Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, auxgc, scaled_w, htop); - if (fl_mac_os_version >= 101300) { + draw_layer_to_context(layer, auxgc, scaled_w, htop); + if (fl_mac_os_version >= 101300 && fl_mac_os_version < 101500) { // drawn layer is left transparent and alpha-premultiplied: demultiply it and set it opaque. uchar *p = rgba; uchar *last = rgba + data_w * data_h * 4; diff --git a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx index a1377a556..5f3735567 100644 --- a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx @@ -97,7 +97,7 @@ void Fl_Quartz_Copy_Surface_Driver::draw_decorated_window(Fl_Window *win, int x_ CGContextTranslateCTM(gc, x_offset - 0.5, y_offset + bt - 0.5); float s = Fl::screen_scale(win->screen_num()); CGContextScaleCTM(gc, 1/s, s >= 1 ? -1/s : -1); - Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w() * s, bt*s); + Fl_Cocoa_Window_Driver::driver(win)->draw_layer_to_context(layer, gc, win->w() * s, bt*s); CGContextRestoreGState(gc); draw(win, x_offset, y_offset + bt); // print the window inner part } |
