Fix Scaling window up/down also scales X/Y position on secondary displays only (#925)
This commit is contained in:
parent
7777a503ad
commit
a0ff3f6f5c
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user