From a0ff3f6f5c6994f4260685d70cc5f8349a8fdb69 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:25:45 +0100 Subject: Fix Scaling window up/down also scales X/Y position on secondary displays only (#925) --- src/Fl_Screen_Driver.cxx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/Fl_Screen_Driver.cxx') diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx index 12453b89e..f975195ba 100644 --- a/src/Fl_Screen_Driver.cxx +++ b/src/Fl_Screen_Driver.cxx @@ -376,10 +376,8 @@ int Fl_Screen_Driver::input_widget_handle_key(int key, unsigned mods, unsigned s } -void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f) +void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f, float old_f) { - float old_f = this->scale(screen); - //if (f == old_f) return; this->scale(screen, f); Fl_Graphics_Driver *d = Fl_Display_Device::display_device()->driver(); d->scale(f); @@ -542,11 +540,12 @@ int Fl_Screen_Driver::scale_handler(int event) } if (f == old_f) return 1; if (screen_dr->rescalable() == SYSTEMWIDE_APP_SCALING) { + float old_f = screen_dr->scale(0); for (int i = 0; i < Fl::screen_count(); i++) { - screen_dr->rescale_all_windows_from_screen(i, f * initial_scale); + screen_dr->rescale_all_windows_from_screen(i, f * initial_scale, old_f); } } else { - screen_dr->rescale_all_windows_from_screen(screen, f * initial_scale); + screen_dr->rescale_all_windows_from_screen(screen, f * initial_scale, screen_dr->scale(screen)); } Fl_Screen_Driver::transient_scale_display(f, screen); Fl::handle(FL_ZOOM_EVENT, NULL); -- cgit v1.2.3