diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-28 17:30:18 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-28 17:30:18 +0100 |
| commit | 607689c890b266832387750954d4bed7392d7094 (patch) | |
| tree | 128505cce4254477804ce8f6b98ea816335b3996 /src | |
| parent | d018aca37c8b822f25fccef5b68b7f72bc15c790 (diff) | |
macOS: More efficient window rescaling that rarely calls Fl_Group::resize()
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_cocoa.mm | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 462d2fa3c..bb3747f5a 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3310,11 +3310,21 @@ void Fl_Cocoa_Window_Driver::show() { } } +static void rescale_top_window(Fl_Window *win, int X, int Y, int W, int H) { + int bx, by, bt = 0; + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num()); + if (win->border()) get_window_frame_sizes(bx, by, bt, win); + NSRect r = NSMakeRect(round(X*s), main_screen_height - round((Y + H)*s), round(W*s), round(H*s) + bt); + [fl_xid(win) setFrame:r display:YES]; +} /* * resize a window */ -void Fl_Cocoa_Window_Driver::resize(int X,int Y,int W,int H) { +void Fl_Cocoa_Window_Driver::resize(int X, int Y, int W, int H) { + if (is_a_rescale() && !pWindow->parent() && !resize_from_system ) { + return rescale_top_window(pWindow, X, Y, W, H); + } int bx, by, bt; Fl_Window *parent; if (W<=0) W = 1; // OS X does not like zero width windows @@ -3366,7 +3376,7 @@ void Fl_Cocoa_Window_Driver::resize(int X,int Y,int W,int H) { } else { resize_from_system = 0; - if (is_a_resize) { + if (is_a_resize && !is_a_rescale()) { pWindow->Fl_Group::resize(X,Y,W,H); if (shown()) { pWindow->redraw(); |
