diff options
| author | Manolo Gouy <Manolo> | 2017-06-18 16:01:53 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2017-06-18 16:01:53 +0000 |
| commit | 701fa00c7c54a1260f05ef41ee11592059d9f652 (patch) | |
| tree | e256811b8842ac1376e8b3730c42478162849eb0 /src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | |
| parent | 2cda5a4fa682372f294a7a8e9e2b90a9fdb15610 (diff) | |
Advancing HiDPI support for the WIN32 platform - still incomplete.
It's still necessary to compile with -DFLTK_HIDPI_SUPPORT
to activate the new HiDPI support.
Default builds get the same HiDPI support as in FLTK 1.3
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12265 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx')
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx index 1d496edff..e39a2ed5a 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx @@ -59,14 +59,11 @@ Fl_WinAPI_Window_Driver::~Fl_WinAPI_Window_Driver() } -// --- private - RECT // frame of the decorated window in screen coordinates Fl_WinAPI_Window_Driver::border_width_title_bar_height( int &bx, // left and right border width int &by, // bottom border height (=bx) - int &bt, // height of window title bar - float *pscaling // display scaling factor + int &bt // height of window title bar ) { Fl_Window *win = pWindow; @@ -83,14 +80,12 @@ RECT // frame of the decorated window in screen coordinates const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9; if ( DwmGetWindowAttribute(fl_xid(win), DWMWA_EXTENDED_FRAME_BOUNDS, &r, sizeof(RECT)) == S_OK ) { need_r = 0; - scaling = Fl_WinAPI_Screen_Driver::desktop_scaling_factor(); + scaling = ((Fl_WinAPI_Screen_Driver*)Fl::screen_driver())->DWM_scaling_factor(screen_num()); } } if (need_r) { GetWindowRect(fl_xid(win), &r); } - if (pscaling) *pscaling = scaling; - bx = (r.right - r.left - int(win->w() * scaling))/2; if (bx < 1) bx = 1; by = bx; @@ -105,16 +100,24 @@ RECT // frame of the decorated window in screen coordinates int Fl_WinAPI_Window_Driver::decorated_w() { int bt, bx, by; + float s = Fl::screen_driver()->scale(screen_num()); border_width_title_bar_height(bx, by, bt); - return w() + 2 * bx; + int mini_bx = bx/s; if (mini_bx < 1) mini_bx = 1; + return w() + 2 * mini_bx; } int Fl_WinAPI_Window_Driver::decorated_h() { int bt, bx, by; - float scaling = 1; - border_width_title_bar_height(bx, by, bt, &scaling); - return h() + bt/scaling + 2 * by; + border_width_title_bar_height(bx, by, bt); +#ifdef FLTK_HIDPI_SUPPORT + float s = Fl::screen_driver()->scale(screen_num()); + int mini_by = by/s; if (mini_by < 1) mini_by = 1; + return h() + (bt + by)/s + mini_by; +#else + float scaling = ((Fl_WinAPI_Screen_Driver*)Fl::screen_driver())->DWM_scaling_factor(0); + return h() + bt/scaling + 2 * by +1; +#endif } @@ -596,7 +599,7 @@ int Fl_WinAPI_Window_Driver::scroll(int src_x, int src_y, int src_w, int src_h, static fl_GetRandomRgn_func fl_GetRandomRgn = 0L; static char first_time = 1; // We will have to do some Region magic now, so let's see if the - // required function is available (and it should be staring w/Win95) + // required function is available (and it should be starting w/Win95) if (first_time) { HMODULE hMod = GetModuleHandle("GDI32.DLL"); if (hMod) { @@ -604,6 +607,8 @@ int Fl_WinAPI_Window_Driver::scroll(int src_x, int src_y, int src_w, int src_h, } first_time = 0; } + float s = Fl::screen_driver()->scale(screen_num()); + src_x *= s; src_y *= s; src_w *= s; src_h *= s; dest_x *= s; dest_y *= s; // Now check if the source scrolling area is fully visible. // If it is, we will do a quick scroll and just update the // newly exposed area. If it is not, we go the safe route and |
