From 7cb0c2311cf014df7d640b250a0b177b26dc2a00 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Thu, 6 Feb 2020 16:00:41 +0100 Subject: Fix computation of Fl_Window::decorated_h() on macOS when screen is scaled. --- src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 3 ++- src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx | 3 ++- src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm index fcd0deff9..afa595f5b 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm +++ b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm @@ -372,7 +372,8 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset this->print_widget(win, x_offset, y_offset); return; } - int bt = win->decorated_h() - win->h(); + int bt, hleft, hright, hbottom; + Fl_Cocoa_Window_Driver::driver(win)->decoration_sizes(&bt, &hleft, &hright, &hbottom); float s = Fl::screen_scale(win->screen_num()); if (s < 1) y_offset += bt*(1/s-1); CALayer *layer = Fl_Cocoa_Window_Driver::driver(win)->get_titlebar_layer(); diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx index 35daffd22..ca09e91b3 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx @@ -314,7 +314,8 @@ const Fl_Image* Fl_Cocoa_Window_Driver::shape() { void Fl_Cocoa_Window_Driver::capture_titlebar_and_borders(Fl_RGB_Image*& top, Fl_RGB_Image*& left, Fl_RGB_Image*& bottom, Fl_RGB_Image*& right) { left = bottom = right = NULL; - int htop = pWindow->decorated_h() - h(); + int htop, hleft, hright, hbottom; + Fl_Cocoa_Window_Driver::decoration_sizes(&htop, &hleft, &hright, &hbottom); CALayer *layer = get_titlebar_layer(); CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB(); float s = Fl::screen_driver()->scale(screen_num()); diff --git a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx index 85fab361b..bf8efceb6 100644 --- a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx @@ -99,7 +99,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); + Fl_Cocoa_Window_Driver::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 } -- cgit v1.2.3