diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-03-01 11:11:15 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-03-01 11:11:15 +0100 |
| commit | 0eef561e7b9bf54b764e7e7254b98530aac5384f (patch) | |
| tree | 09755aca065c60ee7f7a2a1f430841f640221765 /src/Fl_Screen_Driver.cxx | |
| parent | 5f2069871d00575717d998a2e1e3d398ec9137ef (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.cxx | 14 |
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; |
