summaryrefslogtreecommitdiff
path: root/src/drivers/Cocoa
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2017-12-18 08:52:55 +0000
committerManolo Gouy <Manolo>2017-12-18 08:52:55 +0000
commit3f9f4debbba0527658ce09044fbff90e332235cc (patch)
treea3a4852ab786012432666a1fe07fdca9f05387dc /src/drivers/Cocoa
parent31f16205cb31d724ee93444f5b9b17e7fa3ae3b1 (diff)
STR#3444: Add MacOS support for application rescaling (not quite complete)
With this, most MacOS FLTK app can be scaled with command/+/-/0/ keystrokes. A scaling problem remains, visible in test/cube, where the "Test" string is not positioned correctly. GLUT apps can also be scaled (across platforms). SVG images are re-rasterized after app scaling for optimal drawing. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12594 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Cocoa')
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm6
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H8
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx9
3 files changed, 16 insertions, 7 deletions
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
index 38c3075c5..607aed8fc 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
+++ b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
@@ -19,6 +19,7 @@
#include <FL/Fl_Printer.H>
#include <FL/Fl_Shared_Image.H>
#include <FL/Fl_Window_Driver.H>
+#include <FL/Fl_Screen_Driver.H>
#include "../Quartz/Fl_Quartz_Graphics_Driver.H"
#include "../Darwin/Fl_Darwin_System_Driver.H"
#include "Fl_Cocoa_Window_Driver.H"
@@ -401,8 +402,9 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset
CGContextRef gc = (CGContextRef)driver()->gc();
CGContextSaveGState(gc);
CGContextTranslateCTM(gc, x_offset - 0.5, y_offset + bt - 0.5);
- CGContextScaleCTM(gc, 1, -1);
- Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w(), bt);
+ float s = Fl::screen_driver()->scale(win->driver()->screen_num());
+ CGContextScaleCTM(gc, 1/s, -1/s);
+ Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w() * s, bt);
CGContextRestoreGState(gc);
}
else {
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
index 3335a39ff..5e318a2e3 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
+++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
@@ -4,7 +4,7 @@
// Definition of Apple Cocoa Screen interface
// for the Fast Light Tool Kit (FLTK).
//
-// Copyright 2010-2016 by Bill Spitzak and others.
+// Copyright 2010-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@@ -97,6 +97,12 @@ public:
// --- compute dimensions of an Fl_Offscreen
virtual void offscreen_size(Fl_Offscreen o, int &width, int &height);
virtual float retina_factor() { return 2; }
+
+ virtual APP_SCALING_CAPABILITY rescalable() { return SYSTEMWIDE_APP_SCALING; }
+ virtual float scale(int n) {return scale_;}
+ virtual void scale(int n, float f) { scale_ = f;}
+private:
+ float scale_;
};
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
index 7c8119ca1..e4f86aa90 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
@@ -99,10 +99,11 @@ void Fl_Cocoa_Screen_Driver::screen_xywh(int &X, int &Y, int &W, int &H, int n)
if ((n < 0) || (n >= num_screens))
n = 0;
- X = screens[n].x;
- Y = screens[n].y;
- W = screens[n].width;
- H = screens[n].height;
+ float s = scale(0);
+ X = screens[n].x/s;
+ Y = screens[n].y/s;
+ W = screens[n].width/s;
+ H = screens[n].height/s;
}