diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl.cxx | 4 | ||||
| -rw-r--r-- | src/Fl_Screen_Driver.H | 2 | ||||
| -rw-r--r-- | src/Fl_Screen_Driver.cxx | 9 | ||||
| -rw-r--r-- | src/Fl_x.cxx | 4 |
4 files changed, 9 insertions, 10 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx index 43115cc6a..0501483a6 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -2274,9 +2274,9 @@ void Fl::screen_scale(int n, float factor) { if (!capability || n < 0 || n >= Fl::screen_count()) return; if (capability == Fl_Screen_Driver::SYSTEMWIDE_APP_SCALING) { for (int s = 0; s < Fl::screen_count(); s++) { - Fl::screen_driver()->rescale_all_windows_from_screen(s, factor); + Fl::screen_driver()->rescale_all_windows_from_screen(s, factor, factor); } - } else Fl::screen_driver()->rescale_all_windows_from_screen(n, factor); + } else Fl::screen_driver()->rescale_all_windows_from_screen(n, factor, factor); } /** diff --git a/src/Fl_Screen_Driver.H b/src/Fl_Screen_Driver.H index 6371e57e9..e57aadcc8 100644 --- a/src/Fl_Screen_Driver.H +++ b/src/Fl_Screen_Driver.H @@ -219,7 +219,7 @@ public: // compute dimensions of an Fl_Offscreen virtual void offscreen_size(Fl_Offscreen, int &/*width*/, int &/*height*/) {} - void rescale_all_windows_from_screen(int screen, float f); + void rescale_all_windows_from_screen(int screen, float f, float old_f); static void transient_scale_display(float f, int nscreen); // need export to fltk_gl.so because used in glut_compatibility.cxx static FL_EXPORT int scale_handler(int event); 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); diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index 50777e67e..67ed872dc 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -1205,7 +1205,7 @@ static void react_to_screen_reconfiguration() { float new_scale = Fl::screen_driver()->scale(0); for (int screen = 0; screen < Fl::screen_count(); screen++) { Fl::screen_driver()->scale(screen, 1); - Fl::screen_driver()->rescale_all_windows_from_screen(screen, new_scale); + Fl::screen_driver()->rescale_all_windows_from_screen(screen, new_scale, 1); } } delete[] scales; @@ -1227,7 +1227,7 @@ static void after_display_rescale(float *p_current_xft_dpi) { *p_current_xft_dpi = dpi; float f = dpi/96.; for (int i = 0; i < Fl::screen_count(); i++) - Fl::screen_driver()->rescale_all_windows_from_screen(i, f); + Fl::screen_driver()->rescale_all_windows_from_screen(i, f, f); } } break; |
