Alexandre Julliard : user32: Add partial stub for GetDpiForMonitorInternal ().

Alexandre Julliard julliard at winehq.org
Thu Apr 19 16:54:19 CDT 2018


Module: wine
Branch: master
Commit: 8b7ed3630729e77766cc524d27540eac72f3b02a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8b7ed3630729e77766cc524d27540eac72f3b02a

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Apr 19 10:46:43 2018 +0200

user32: Add partial stub for GetDpiForMonitorInternal().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 .../ext-ms-win-rtcore-ntuser-dpi-l1-1-0.spec       |  2 +-
 .../ext-ms-win-rtcore-ntuser-dpi-l1-2-0.spec       |  2 +-
 dlls/shcore/main.c                                 | 12 ++------
 dlls/user32/sysparams.c                            | 32 ++++++++++++++++------
 dlls/user32/user32.spec                            |  1 +
 include/winuser.h                                  |  1 +
 6 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-1-0/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.spec b/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-1-0/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.spec
index ca1fe1c..336d8ce 100644
--- a/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-1-0/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.spec
+++ b/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-1-0/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.spec
@@ -1,3 +1,3 @@
-@ stub GetDpiForMonitorInternal
+@ stdcall GetDpiForMonitorInternal(long long ptr ptr) user32.GetDpiForMonitorInternal
 @ stdcall GetProcessDpiAwarenessInternal(long ptr) user32.GetProcessDpiAwarenessInternal
 @ stdcall SetProcessDpiAwarenessInternal(long) user32.SetProcessDpiAwarenessInternal
diff --git a/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-2-0/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.spec b/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-2-0/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.spec
index 67c40ab..cd546c2 100644
--- a/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-2-0/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.spec
+++ b/dlls/ext-ms-win-rtcore-ntuser-dpi-l1-2-0/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.spec
@@ -1 +1 @@
-@ stub GetDpiForMonitorInternal
+@ stdcall GetDpiForMonitorInternal(long long ptr ptr) user32.GetDpiForMonitorInternal
diff --git a/dlls/shcore/main.c b/dlls/shcore/main.c
index 17d4b68..07918bc 100644
--- a/dlls/shcore/main.c
+++ b/dlls/shcore/main.c
@@ -58,14 +58,6 @@ HRESULT WINAPI SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value)
 
 HRESULT WINAPI GetDpiForMonitor(HMONITOR monitor, MONITOR_DPI_TYPE type, UINT *x, UINT *y)
 {
-    HDC hDC;
-
-    FIXME("(%p, %u, %p, %p): semi-stub\n", monitor, type, x, y);
-
-    hDC = GetDC(0);
-    if (x) *x = GetDeviceCaps(hDC, LOGPIXELSX);
-    if (y) *y = GetDeviceCaps(hDC, LOGPIXELSY);
-    ReleaseDC(0, hDC);
-
-    return S_OK;
+    if (GetDpiForMonitorInternal( monitor, type, x, y )) return S_OK;
+    return HRESULT_FROM_WIN32( GetLastError() );
 }
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 425acae..8c5dd0a 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -630,11 +630,17 @@ static UINT get_system_dpi(void)
     static const WCHAR dpi_key_name[] = {'C','o','n','t','r','o','l',' ','P','a','n','e','l','\\','D','e','s','k','t','o','p','\0'};
     static const WCHAR def_dpi_key_name[] = {'S','o','f','t','w','a','r','e','\\','F','o','n','t','s','\0'};
     static const WCHAR dpi_value_name[] = {'L','o','g','P','i','x','e','l','s','\0'};
-    DWORD dpi;
+    static UINT system_dpi;
+    UINT dpi;
 
-    if ((dpi = get_reg_dword( HKEY_CURRENT_USER, dpi_key_name, dpi_value_name ))) return dpi;
-    if ((dpi = get_reg_dword( HKEY_CURRENT_CONFIG, def_dpi_key_name, dpi_value_name ))) return dpi;
-    return USER_DEFAULT_SCREEN_DPI;
+    if (!system_dpi)
+    {
+        if (!(dpi = get_reg_dword( HKEY_CURRENT_USER, dpi_key_name, dpi_value_name )) &&
+            !(dpi = get_reg_dword( HKEY_CURRENT_CONFIG, def_dpi_key_name, dpi_value_name )))
+            dpi = USER_DEFAULT_SCREEN_DPI;
+        system_dpi = dpi;
+    }
+    return system_dpi;
 }
 
 HDC get_display_dc(void)
@@ -3284,12 +3290,22 @@ BOOL WINAPI IsProcessDPIAware(void)
  */
 UINT WINAPI GetDpiForSystem(void)
 {
-    static int display_dpi;
-
     if (!IsProcessDPIAware()) return USER_DEFAULT_SCREEN_DPI;
+    return get_system_dpi();
+}
+
+/***********************************************************************
+ *              GetDpiForMonitorInternal   (USER32.@)
+ */
+BOOL WINAPI GetDpiForMonitorInternal( HMONITOR monitor, UINT type, UINT *x, UINT *y )
+{
+    UINT dpi = get_system_dpi();
 
-    if (!display_dpi) display_dpi = get_system_dpi();
-    return display_dpi;
+    WARN( "(%p, %u, %p, %p): semi-stub\n", monitor, type, x, y );
+
+    if (x) *x = dpi;
+    if (y) *y = dpi;
+    return TRUE;
 }
 
 /***********************************************************************
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 8d9058b..8556502 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -296,6 +296,7 @@
 @ stdcall GetDlgItemTextA(long long ptr long)
 @ stdcall GetDlgItemTextW(long long ptr long)
 @ stdcall GetDoubleClickTime()
+@ stdcall GetDpiForMonitorInternal(long long ptr ptr)
 @ stdcall GetDpiForSystem()
 @ stdcall GetDpiForWindow(long)
 @ stdcall GetFocus()
diff --git a/include/winuser.h b/include/winuser.h
index 86cdbf6..c2055e9 100644
--- a/include/winuser.h
+++ b/include/winuser.h
@@ -3678,6 +3678,7 @@ WINUSERAPI UINT        WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT);
 WINUSERAPI UINT        WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);
 #define                       GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
 WINUSERAPI UINT        WINAPI GetDoubleClickTime(void);
+WINUSERAPI BOOL        WINAPI GetDpiForMonitorInternal(HMONITOR,UINT,UINT*,UINT*);
 WINUSERAPI UINT        WINAPI GetDpiForWindow(HWND);
 WINUSERAPI UINT        WINAPI GetDpiForSystem(void);
 WINUSERAPI HWND        WINAPI GetFocus(void);




More information about the wine-cvs mailing list