Module: wine Branch: master Commit: 8d004d5151d66ae4215ef7b176b6f4b573b36bc4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8d004d5151d66ae4215ef7b176...
Author: Andrew Eikum aeikum@codeweavers.com Date: Thu Nov 9 11:25:35 2017 -0600
shell32: Scale explorer browser sizes by DPI.
Signed-off-by: Andrew Eikum aeikum@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/ebrowser.c | 54 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 16 deletions(-)
diff --git a/dlls/shell32/ebrowser.c b/dlls/shell32/ebrowser.c index 07046502..45c62c8 100644 --- a/dlls/shell32/ebrowser.c +++ b/dlls/shell32/ebrowser.c @@ -38,6 +38,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
#define SPLITTER_WIDTH 2 #define NP_MIN_WIDTH 60 +#define NP_DEFAULT_WIDTH 150 #define SV_MIN_WIDTH 150
typedef struct _event_client { @@ -83,6 +84,8 @@ typedef struct _ExplorerBrowserImpl { travellog_entry *travellog_cursor; int travellog_count;
+ int dpix; + IShellView *psv; RECT sv_rc; LPITEMIDLIST current_pidl; @@ -274,6 +277,8 @@ static void update_layout(ExplorerBrowserImpl *This) RECT rc; INT navpane_width_actual; INT shellview_width_actual; + int np_min_width = MulDiv(NP_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + int sv_min_width = MulDiv(SV_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); TRACE("%p (navpane: %d, EBO_SHOWFRAMES: %d)\n", This, This->navpane.show, This->eb_options & EBO_SHOWFRAMES);
@@ -285,10 +290,10 @@ static void update_layout(ExplorerBrowserImpl *This) navpane_width_actual = 0;
shellview_width_actual = rc.right - navpane_width_actual; - if(shellview_width_actual < SV_MIN_WIDTH && navpane_width_actual) + if(shellview_width_actual < sv_min_width && navpane_width_actual) { - INT missing_width = SV_MIN_WIDTH - shellview_width_actual; - if(missing_width < (navpane_width_actual - NP_MIN_WIDTH)) + INT missing_width = sv_min_width - shellview_width_actual; + if(missing_width < (navpane_width_actual - np_min_width)) { /* Shrink the navpane */ navpane_width_actual -= missing_width; @@ -327,9 +332,10 @@ static void update_layout(ExplorerBrowserImpl *This)
static void size_panes(ExplorerBrowserImpl *This) { + int splitter_width = MulDiv(SPLITTER_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); MoveWindow(This->navpane.hwnd_splitter, - This->navpane.rc.right - SPLITTER_WIDTH, This->navpane.rc.top, - SPLITTER_WIDTH, This->navpane.rc.bottom - This->navpane.rc.top, + This->navpane.rc.right - splitter_width, This->navpane.rc.top, + splitter_width, This->navpane.rc.bottom - This->navpane.rc.top, TRUE);
MoveWindow(This->hwnd_sv, @@ -494,12 +500,14 @@ static void splitter_draw(HWND hwnd, RECT *rc) */ static LRESULT navpane_splitter_beginresize(ExplorerBrowserImpl *This, HWND hwnd, LPARAM lParam) { + int splitter_width = MulDiv(SPLITTER_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + TRACE("\n");
SetCapture(hwnd);
This->splitter_rc = This->navpane.rc; - This->splitter_rc.left = This->splitter_rc.right - SPLITTER_WIDTH; + This->splitter_rc.left = This->splitter_rc.right - splitter_width;
splitter_draw(GetParent(hwnd), &This->splitter_rc);
@@ -510,6 +518,9 @@ static LRESULT navpane_splitter_resizing(ExplorerBrowserImpl *This, HWND hwnd, L { int new_width, dx; RECT rc; + int splitter_width = MulDiv(SPLITTER_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + int np_min_width = MulDiv(NP_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + int sv_min_width = MulDiv(SV_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI);
if(GetCapture() != hwnd) return FALSE;
@@ -518,10 +529,10 @@ static LRESULT navpane_splitter_resizing(ExplorerBrowserImpl *This, HWND hwnd, L
rc = This->navpane.rc; new_width = This->navpane.width + dx; - if(new_width > NP_MIN_WIDTH && This->sv_rc.right - new_width > SV_MIN_WIDTH) + if(new_width > np_min_width && This->sv_rc.right - new_width > sv_min_width) { rc.right = new_width; - rc.left = rc.right - SPLITTER_WIDTH; + rc.left = rc.right - splitter_width; splitter_draw(GetParent(hwnd), &This->splitter_rc); splitter_draw(GetParent(hwnd), &rc); This->splitter_rc = rc; @@ -533,6 +544,8 @@ static LRESULT navpane_splitter_resizing(ExplorerBrowserImpl *This, HWND hwnd, L static LRESULT navpane_splitter_endresize(ExplorerBrowserImpl *This, HWND hwnd, LPARAM lParam) { int new_width, dx; + int np_min_width = MulDiv(NP_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + int sv_min_width = MulDiv(SV_MIN_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI);
if(GetCapture() != hwnd) return FALSE;
@@ -542,10 +555,10 @@ static LRESULT navpane_splitter_endresize(ExplorerBrowserImpl *This, HWND hwnd, splitter_draw(GetParent(hwnd), &This->splitter_rc);
new_width = This->navpane.width + dx; - if(new_width < NP_MIN_WIDTH) - new_width = NP_MIN_WIDTH; - else if(This->sv_rc.right - new_width < SV_MIN_WIDTH) - new_width = This->sv_rc.right - SV_MIN_WIDTH; + if(new_width < np_min_width) + new_width = np_min_width; + else if(This->sv_rc.right - new_width < sv_min_width) + new_width = This->sv_rc.right - sv_min_width;
This->navpane.width = new_width;
@@ -649,9 +662,11 @@ static LRESULT navpane_on_wm_create(HWND hwnd, CREATESTRUCTW *crs) static LRESULT navpane_on_wm_size_move(ExplorerBrowserImpl *This) { UINT height, width; + int splitter_width = MulDiv(SPLITTER_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + TRACE("%p\n", This);
- width = This->navpane.rc.right - This->navpane.rc.left - SPLITTER_WIDTH; + width = This->navpane.rc.right - This->navpane.rc.left - splitter_width; height = This->navpane.rc.bottom - This->navpane.rc.top;
MoveWindow(This->navpane.hwnd_nstc, @@ -692,6 +707,7 @@ static void initialize_navpane(ExplorerBrowserImpl *This, HWND hwnd_parent, RECT { WNDCLASSW wc; HWND splitter; + int splitter_width = MulDiv(SPLITTER_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); static const WCHAR navpane_classname[] = {'e','b','_','n','a','v','p','a','n','e',0};
if( !GetClassInfoW(shell32_hInstance, navpane_classname, &wc) ) @@ -712,8 +728,8 @@ static void initialize_navpane(ExplorerBrowserImpl *This, HWND hwnd_parent, RECT
splitter = CreateWindowExW(0, navpane_classname, NULL, WS_CHILD | WS_TABSTOP | WS_VISIBLE, - rc->right - SPLITTER_WIDTH, rc->top, - SPLITTER_WIDTH, rc->bottom - rc->top, + rc->right - splitter_width, rc->top, + splitter_width, rc->bottom - rc->top, hwnd_parent, 0, shell32_hInstance, This); if(!splitter) ERR("Failed to create navpane : %d.\n", GetLastError()); @@ -849,6 +865,7 @@ static HRESULT WINAPI IExplorerBrowser_fnInitialize(IExplorerBrowser *iface, ExplorerBrowserImpl *This = impl_from_IExplorerBrowser(iface); WNDCLASSW wc; LONG style; + HDC parent_dc; static const WCHAR EB_CLASS_NAME[] = {'E','x','p','l','o','r','e','r','B','r','o','w','s','e','r','C','o','n','t','r','o','l',0};
@@ -876,6 +893,12 @@ static HRESULT WINAPI IExplorerBrowser_fnInitialize(IExplorerBrowser *iface, if (!RegisterClassW(&wc)) return E_FAIL; }
+ parent_dc = GetDC(hwndParent); + This->dpix = GetDeviceCaps(parent_dc, LOGPIXELSX); + ReleaseDC(hwndParent, parent_dc); + + This->navpane.width = MulDiv(NP_DEFAULT_WIDTH, This->dpix, USER_DEFAULT_SCREEN_DPI); + style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS; if (!(This->eb_options & EBO_NOBORDER)) style |= WS_BORDER; @@ -2066,7 +2089,6 @@ HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, voi eb->IInputObject_iface.lpVtbl = &vt_IInputObject;
/* Default settings */ - eb->navpane.width = 150; eb->navpane.show = TRUE;
list_init(&eb->event_clients);