summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-04 16:25:45 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-04 16:25:45 +0100
commita0ff3f6f5c6994f4260685d70cc5f8349a8fdb69 (patch)
treeddf7d19a45efc422aa0eeef16bdf2336163d8018 /src
parent7777a503ada1d7d7ae2e30897efa52bcd0b36df6 (diff)
Fix Scaling window up/down also scales X/Y position on secondary displays only (#925)
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx4
-rw-r--r--src/Fl_Screen_Driver.H2
-rw-r--r--src/Fl_Screen_Driver.cxx9
-rw-r--r--src/Fl_x.cxx4
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;