summaryrefslogtreecommitdiff
path: root/src/Fl_Screen_Driver.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-01 11:11:15 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-01 11:11:15 +0100
commit0eef561e7b9bf54b764e7e7254b98530aac5384f (patch)
tree09755aca065c60ee7f7a2a1f430841f640221765 /src/Fl_Screen_Driver.cxx
parent5f2069871d00575717d998a2e1e3d398ec9137ef (diff)
Windows: make Ctrl/+/-/0/ scaling system-wide if all screens have same DPI
Diffstat (limited to 'src/Fl_Screen_Driver.cxx')
-rw-r--r--src/Fl_Screen_Driver.cxx14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx
index 623db30f6..fbb4aa4c2 100644
--- a/src/Fl_Screen_Driver.cxx
+++ b/src/Fl_Screen_Driver.cxx
@@ -386,8 +386,7 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
int i = 0, count = 0; // count top-level windows, except transient scale-displaying window
Fl_Window *win = Fl::first_window();
while (win) {
- if (!win->parent() &&
- (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
+ if (!win->parent() && (Fl_Window_Driver::driver(win)->screen_num() == screen) &&
win->user_data() != &Fl_Screen_Driver::transient_scale_display) {
count++;
}
@@ -398,8 +397,7 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
Fl_Window **win_array = new Fl_Window*[count];
win = Fl::first_window(); // memorize all top-level windows
while (win) {
- if (!win->parent() &&
- (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
+ if (!win->parent() && (Fl_Window_Driver::driver(win)->screen_num() == screen) &&
win->user_data() != &Fl_Screen_Driver::transient_scale_display) {
win_array[i++] = win;
}
@@ -541,7 +539,13 @@ int Fl_Screen_Driver::scale_handler(int event)
f = scaling_values[i];
}
if (f == old_f) return 1;
- screen_dr->rescale_all_windows_from_screen(screen, f * initial_scale);
+ if (screen_dr->rescalable() == SYSTEMWIDE_APP_SCALING) {
+ for (int i = 0; i < Fl::screen_count(); i++) {
+ screen_dr->rescale_all_windows_from_screen(i, f * initial_scale);
+ }
+ } else {
+ screen_dr->rescale_all_windows_from_screen(screen, f * initial_scale);
+ }
Fl_Screen_Driver::transient_scale_display(f, screen);
Fl::handle(FL_ZOOM_EVENT, NULL);
return 1;