summaryrefslogtreecommitdiff
path: root/src/Fl_Screen_Driver.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2017-07-03 17:31:57 +0000
committerManolo Gouy <Manolo>2017-07-03 17:31:57 +0000
commit8dccfc88386561782d9b78900b283cedad2e59bb (patch)
treee241ec766008d154f32f1b3a313fd7233984606a /src/Fl_Screen_Driver.cxx
parentba10af9edb594f69e58e6f2ccb251e3bdff3e9c6 (diff)
HiDPI support under WIN32 platform: completed.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12285 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Screen_Driver.cxx')
-rw-r--r--src/Fl_Screen_Driver.cxx36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx
index 0332f59b3..41cffff03 100644
--- a/src/Fl_Screen_Driver.cxx
+++ b/src/Fl_Screen_Driver.cxx
@@ -364,18 +364,7 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
}
for (i = count - 1; i >= 0; i--) { // rescale all top-level windows, finishing with front one
win = win_array[i];
- int oldx = win->x(), oldy = win->y();
- fl_uintptr_t current = win->driver()->current_cursor();
- win->hide();
- win->driver()->screen_num(screen);
- win->position(oldx*old_f/f, oldy*old_f/f);
- win->driver()->force_position(1);
- if (win->fullscreen_active()) {
- win->size(win->w() * old_f/f, win->h() * old_f/f);
- }
- win->show();
- win->driver()->reuse_cursor(current);
- win->driver()->reuse_icons();
+ win->driver()->resize_after_scale_change(screen, old_f, f);
win->wait_for_expose();
}
delete[] win_array;
@@ -469,21 +458,23 @@ int Fl_Screen_Driver::scale_handler(int event)
}
-// determine the scaling value used at startup time (helps supporting HiDPI displays)
-float Fl_Screen_Driver::default_scale_factor()
+// use the startup time scaling value
+void Fl_Screen_Driver::use_startup_scale_factor()
{
- float factor = 1;
+ float factor;
char *p = 0;
if ((p = fl_getenv("FLTK_SCALING_FACTOR"))) {
sscanf(p, "%f", &factor);
+ // checks to prevent potential crash (factor <= 0) or very large factors
+ if (factor < 0.25) factor = 0.25;
+ else if (factor > 10.0) factor = 10.0;
}
else {
factor = desktop_scale_factor();
}
- // checks to prevent potential crash (factor <= 0) or very large factors
- if (factor < 0.25) factor = 0.25;
- else if (factor > 10.0) factor = 10.0;
- return factor;
+ if (factor) {
+ for (int i = 0; i < screen_count(); i++) scale(i, factor);
+ }
}
@@ -495,10 +486,11 @@ void Fl_Screen_Driver::open_display()
been_here = true;
int ns = screen_count();
if (rescalable()) {
- float factor = default_scale_factor();
- for (int i = 0; i < ns; i++) scale(i, factor);
+ use_startup_scale_factor();
Fl::add_handler(Fl_Screen_Driver::scale_handler);
- Fl_Graphics_Driver::default_driver().scale(factor);
+ int mx, my;
+ int ns = Fl::screen_driver()->get_mouse(mx, my);
+ Fl_Graphics_Driver::default_driver().scale(scale(ns));
}
}
}