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