diff options
| author | Manolo Gouy <Manolo> | 2017-06-29 09:44:35 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2017-06-29 09:44:35 +0000 |
| commit | 7dc496e97d3d9fbc71ffd75b6c4ceb5cfe93ffa5 (patch) | |
| tree | f1d72ac73196a8d05462f1b46a8d3888e2ae645b /src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx | |
| parent | c6c4e8d426bba89736d1fc79eb464c5b6d14935f (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.cxx | 18 |
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; |
