From 3f9f4debbba0527658ce09044fbff90e332235cc Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Mon, 18 Dec 2017 08:52:55 +0000 Subject: 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 --- src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 6 ++++-- src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H | 8 +++++++- src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx | 9 +++++---- 3 files changed, 16 insertions(+), 7 deletions(-) (limited to 'src/drivers/Cocoa') 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 #include #include +#include #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; } -- cgit v1.2.3