HiDPI support under WIN32 platform: fix Fl_WinAPI_Window_Driver::capture_titlebar_and_borders() under XP.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12266 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
701fa00c7c
commit
4e72aac792
@ -2498,7 +2498,7 @@ void Fl_WinAPI_Window_Driver::capture_titlebar_and_borders(Fl_Shared_Image*& top
|
|||||||
if (htop) {
|
if (htop) {
|
||||||
r_top = dr->read_win_rectangle_unscaled(NULL, r.left, r.top, r.right - r.left, htop, 0);
|
r_top = dr->read_win_rectangle_unscaled(NULL, r.left, r.top, r.right - r.left, htop, 0);
|
||||||
top = Fl_Shared_Image::get(r_top);
|
top = Fl_Shared_Image::get(r_top);
|
||||||
if (DWMscaling >= 1.1) top->scale(ww, htop/DWMscaling, 0, 1);
|
if (DWMscaling != 1) top->scale(ww, htop/DWMscaling, 0, 1);
|
||||||
}
|
}
|
||||||
if (wsides) {
|
if (wsides) {
|
||||||
r_left = dr->read_win_rectangle_unscaled(NULL, r.left, r.top + htop, wsides, h()*scaling, 0);
|
r_left = dr->read_win_rectangle_unscaled(NULL, r.left, r.top + htop, wsides, h()*scaling, 0);
|
||||||
@ -2507,7 +2507,7 @@ void Fl_WinAPI_Window_Driver::capture_titlebar_and_borders(Fl_Shared_Image*& top
|
|||||||
right = Fl_Shared_Image::get(r_right);
|
right = Fl_Shared_Image::get(r_right);
|
||||||
r_bottom = dr->read_win_rectangle_unscaled(NULL, r.left, r.bottom-hbottom, ww, hbottom, 0);
|
r_bottom = dr->read_win_rectangle_unscaled(NULL, r.left, r.bottom-hbottom, ww, hbottom, 0);
|
||||||
bottom = Fl_Shared_Image::get(r_bottom);
|
bottom = Fl_Shared_Image::get(r_bottom);
|
||||||
if (scaling >= 1.1) {
|
if (scaling != 1) {
|
||||||
left->scale(wsides, h(), 0, 1);
|
left->scale(wsides, h(), 0, 1);
|
||||||
right->scale(wsides, h(), 0, 1);
|
right->scale(wsides, h(), 0, 1);
|
||||||
bottom->scale(ww, hbottom, 0, 1);
|
bottom->scale(ww, hbottom, 0, 1);
|
||||||
|
@ -75,12 +75,11 @@ RECT // frame of the decorated window in screen coordinates
|
|||||||
static DwmGetWindowAttribute_type DwmGetWindowAttribute = dwmapi_dll ?
|
static DwmGetWindowAttribute_type DwmGetWindowAttribute = dwmapi_dll ?
|
||||||
(DwmGetWindowAttribute_type)GetProcAddress(dwmapi_dll, "DwmGetWindowAttribute") : NULL;
|
(DwmGetWindowAttribute_type)GetProcAddress(dwmapi_dll, "DwmGetWindowAttribute") : NULL;
|
||||||
int need_r = 1;
|
int need_r = 1;
|
||||||
float scaling = 1;
|
float scaling = ((Fl_WinAPI_Screen_Driver*)Fl::screen_driver())->DWM_scaling_factor(screen_num());
|
||||||
if (DwmGetWindowAttribute) {
|
if (DwmGetWindowAttribute) {
|
||||||
const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9;
|
const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9;
|
||||||
if ( DwmGetWindowAttribute(fl_xid(win), DWMWA_EXTENDED_FRAME_BOUNDS, &r, sizeof(RECT)) == S_OK ) {
|
if ( DwmGetWindowAttribute(fl_xid(win), DWMWA_EXTENDED_FRAME_BOUNDS, &r, sizeof(RECT)) == S_OK ) {
|
||||||
need_r = 0;
|
need_r = 0;
|
||||||
scaling = ((Fl_WinAPI_Screen_Driver*)Fl::screen_driver())->DWM_scaling_factor(screen_num());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (need_r) {
|
if (need_r) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user