summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-10-11 10:42:51 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-10-11 10:43:01 +0200
commit5830226aab4428e77e7aa4078e0f544aef92f326 (patch)
treedabe68c4b460f676f8a212652cd105b8e55b7644 /src/drivers
parent1a841795d1bd6580cb696c21a22d3815b0b3f09a (diff)
Change procedure to capture window titlebar for macOS ≥ 10.15
That is necessary to support macOS Big Sur because previous procedure did not work for tabbed windows. The new procedure is potentially usable from macOS 10.5, but tested at this stage for macOS ≥ 10.15.
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm2
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H2
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx4
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx2
4 files changed, 5 insertions, 5 deletions
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
}