summaryrefslogtreecommitdiff
path: root/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2017-06-29 09:44:35 +0000
committerManolo Gouy <Manolo>2017-06-29 09:44:35 +0000
commit7dc496e97d3d9fbc71ffd75b6c4ceb5cfe93ffa5 (patch)
treef1d72ac73196a8d05462f1b46a8d3888e2ae645b /src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
parentc6c4e8d426bba89736d1fc79eb464c5b6d14935f (diff)
HiDPI support for WIN32 platform: begin to support screen-specific scale factor.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12280 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx')
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
index e4a3361f5..236a33288 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
@@ -100,6 +100,7 @@ BOOL Fl_WinAPI_Screen_Driver::screen_cb(HMONITOR mon, HDC, LPRECT r)
screens[num_screens] = mi.rcMonitor;
// If we also want to record the work area, we would also store mi.rcWork at this point
work_area[num_screens] = mi.rcWork;
+ scale_of_screen[num_screens] = 1;
/*fl_alert("screen %d %d,%d,%d,%d work %d,%d,%d,%d",num_screens,
screens[num_screens].left,screens[num_screens].right,screens[num_screens].top,screens[num_screens].bottom,
work_area[num_screens].left,work_area[num_screens].right,work_area[num_screens].top,work_area[num_screens].bottom);
@@ -152,6 +153,7 @@ void Fl_WinAPI_Screen_Driver::init()
screens[0].right = GetSystemMetrics(SM_CXSCREEN);
screens[0].bottom = GetSystemMetrics(SM_CYSCREEN);
work_area[0] = screens[0];
+ scale_of_screen[0] = 1;
}
@@ -159,10 +161,10 @@ void Fl_WinAPI_Screen_Driver::screen_work_area(int &X, int &Y, int &W, int &H, i
{
if (num_screens < 0) init();
if (n < 0 || n >= num_screens) n = 0;
- X = work_area[n].left/scale_;
- Y = work_area[n].top/scale_;
- W = (work_area[n].right - X)/scale_;
- H = (work_area[n].bottom - Y)/scale_;
+ X = work_area[n].left/scale_of_screen[n];
+ Y = work_area[n].top/scale_of_screen[n];
+ W = (work_area[n].right - X)/scale_of_screen[n];
+ H = (work_area[n].bottom - Y)/scale_of_screen[n];
}
@@ -174,10 +176,10 @@ void Fl_WinAPI_Screen_Driver::screen_xywh(int &X, int &Y, int &W, int &H, int n)
n = 0;
if (num_screens > 0) {
- X = screens[n].left/scale_;
- Y = screens[n].top/scale_;
- W = (screens[n].right - screens[n].left)/scale_;
- H = (screens[n].bottom - screens[n].top)/scale_;
+ X = screens[n].left/scale_of_screen[n];
+ Y = screens[n].top/scale_of_screen[n];
+ W = (screens[n].right - screens[n].left)/scale_of_screen[n];
+ H = (screens[n].bottom - screens[n].top)/scale_of_screen[n];
} else {
/* Fallback if something is broken... */
X = 0;