summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-28 17:30:18 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-28 17:30:18 +0100
commit607689c890b266832387750954d4bed7392d7094 (patch)
tree128505cce4254477804ce8f6b98ea816335b3996 /src
parentd018aca37c8b822f25fccef5b68b7f72bc15c790 (diff)
macOS: More efficient window rescaling that rarely calls Fl_Group::resize()
Diffstat (limited to 'src')
-rw-r--r--src/Fl_cocoa.mm14
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();