user32: Implement GetDpiForSystem().
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
e9000b4e8b
commit
ca878114cb
|
@ -625,19 +625,6 @@ void release_display_dc( HDC hdc )
|
||||||
LeaveCriticalSection( &display_dc_section );
|
LeaveCriticalSection( &display_dc_section );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int get_display_dpi(void)
|
|
||||||
{
|
|
||||||
static int display_dpi;
|
|
||||||
HDC hdc;
|
|
||||||
if (!display_dpi)
|
|
||||||
{
|
|
||||||
hdc = get_display_dc();
|
|
||||||
display_dpi = GetDeviceCaps( hdc, LOGPIXELSY );
|
|
||||||
release_display_dc( hdc );
|
|
||||||
}
|
|
||||||
return display_dpi;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INT CALLBACK real_fontname_proc(const LOGFONTW *lf, const TEXTMETRICW *ntm, DWORD type, LPARAM lparam)
|
static INT CALLBACK real_fontname_proc(const LOGFONTW *lf, const TEXTMETRICW *ntm, DWORD type, LPARAM lparam)
|
||||||
{
|
{
|
||||||
const ENUMLOGFONTW *elf = (const ENUMLOGFONTW *)lf;
|
const ENUMLOGFONTW *elf = (const ENUMLOGFONTW *)lf;
|
||||||
|
@ -768,7 +755,7 @@ static BOOL get_twips_entry( union sysparam_all_entry *entry, UINT int_param, vo
|
||||||
* Technical Reference to the Windows 2000 Registry ->
|
* Technical Reference to the Windows 2000 Registry ->
|
||||||
* HKEY_CURRENT_USER -> Control Panel -> Desktop -> WindowMetrics
|
* HKEY_CURRENT_USER -> Control Panel -> Desktop -> WindowMetrics
|
||||||
*/
|
*/
|
||||||
if (val < 0) val = (-val * get_display_dpi() + 720) / 1440;
|
if (val < 0) val = (-val * GetDpiForSystem() + 720) / 1440;
|
||||||
entry->uint.val = val;
|
entry->uint.val = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -952,13 +939,13 @@ static BOOL get_font_entry( union sysparam_all_entry *entry, UINT int_param, voi
|
||||||
{
|
{
|
||||||
case sizeof(font):
|
case sizeof(font):
|
||||||
if (font.lfHeight > 0) /* positive height value means points ( inch/72 ) */
|
if (font.lfHeight > 0) /* positive height value means points ( inch/72 ) */
|
||||||
font.lfHeight = -MulDiv( font.lfHeight, get_display_dpi(), 72 );
|
font.lfHeight = -MulDiv( font.lfHeight, GetDpiForSystem(), 72 );
|
||||||
entry->font.val = font;
|
entry->font.val = font;
|
||||||
break;
|
break;
|
||||||
case sizeof(LOGFONT16): /* win9x-winME format */
|
case sizeof(LOGFONT16): /* win9x-winME format */
|
||||||
SYSPARAMS_LogFont16To32W( (LOGFONT16 *)&font, &entry->font.val );
|
SYSPARAMS_LogFont16To32W( (LOGFONT16 *)&font, &entry->font.val );
|
||||||
if (entry->font.val.lfHeight > 0)
|
if (entry->font.val.lfHeight > 0)
|
||||||
entry->font.val.lfHeight = -MulDiv( entry->font.val.lfHeight, get_display_dpi(), 72 );
|
entry->font.val.lfHeight = -MulDiv( entry->font.val.lfHeight, GetDpiForSystem(), 72 );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN( "Unknown format in key %s value %s\n",
|
WARN( "Unknown format in key %s value %s\n",
|
||||||
|
@ -1509,9 +1496,7 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
|
||||||
ret = get_entry( &entry_ICONHORIZONTALSPACING, uiParam, pvParam );
|
ret = get_entry( &entry_ICONHORIZONTALSPACING, uiParam, pvParam );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int min_val = 32;
|
int min_val = MulDiv( 32, GetDpiForSystem(), USER_DEFAULT_SCREEN_DPI );
|
||||||
if (IsProcessDPIAware())
|
|
||||||
min_val = MulDiv( min_val, get_display_dpi(), USER_DEFAULT_SCREEN_DPI );
|
|
||||||
ret = set_entry( &entry_ICONHORIZONTALSPACING, max( min_val, uiParam ), pvParam, fWinIni );
|
ret = set_entry( &entry_ICONHORIZONTALSPACING, max( min_val, uiParam ), pvParam, fWinIni );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1552,9 +1537,7 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
|
||||||
ret = get_entry( &entry_ICONVERTICALSPACING, uiParam, pvParam );
|
ret = get_entry( &entry_ICONVERTICALSPACING, uiParam, pvParam );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int min_val = 32;
|
int min_val = MulDiv( 32, GetDpiForSystem(), USER_DEFAULT_SCREEN_DPI );
|
||||||
if (IsProcessDPIAware())
|
|
||||||
min_val = MulDiv( min_val, get_display_dpi(), USER_DEFAULT_SCREEN_DPI );
|
|
||||||
ret = set_entry( &entry_ICONVERTICALSPACING, max( min_val, uiParam ), pvParam, fWinIni );
|
ret = set_entry( &entry_ICONVERTICALSPACING, max( min_val, uiParam ), pvParam, fWinIni );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2435,18 +2418,12 @@ INT WINAPI GetSystemMetrics( INT index )
|
||||||
return max( 8, ret );
|
return max( 8, ret );
|
||||||
case SM_CXICON:
|
case SM_CXICON:
|
||||||
case SM_CYICON:
|
case SM_CYICON:
|
||||||
ret = 32;
|
return MulDiv( 32, GetDpiForSystem(), USER_DEFAULT_SCREEN_DPI );
|
||||||
if (IsProcessDPIAware())
|
|
||||||
ret = MulDiv( ret, get_display_dpi(), USER_DEFAULT_SCREEN_DPI );
|
|
||||||
return ret;
|
|
||||||
case SM_CXCURSOR:
|
case SM_CXCURSOR:
|
||||||
case SM_CYCURSOR:
|
case SM_CYCURSOR:
|
||||||
if (IsProcessDPIAware())
|
ret = MulDiv( 32, GetDpiForSystem(), USER_DEFAULT_SCREEN_DPI );
|
||||||
{
|
if (ret >= 64) return 64;
|
||||||
ret = MulDiv( 32, get_display_dpi(), USER_DEFAULT_SCREEN_DPI );
|
if (ret >= 48) return 48;
|
||||||
if (ret >= 64) return 64;
|
|
||||||
if (ret >= 48) return 48;
|
|
||||||
}
|
|
||||||
return 32;
|
return 32;
|
||||||
case SM_CYMENU:
|
case SM_CYMENU:
|
||||||
return GetSystemMetrics(SM_CYMENUSIZE) + 1;
|
return GetSystemMetrics(SM_CYMENUSIZE) + 1;
|
||||||
|
@ -2537,10 +2514,7 @@ INT WINAPI GetSystemMetrics( INT index )
|
||||||
return GetSystemMetrics(SM_CYMINIMIZED) + max( 0, (INT)ret );
|
return GetSystemMetrics(SM_CYMINIMIZED) + max( 0, (INT)ret );
|
||||||
case SM_CXSMICON:
|
case SM_CXSMICON:
|
||||||
case SM_CYSMICON:
|
case SM_CYSMICON:
|
||||||
ret = 16;
|
return MulDiv( 16, GetDpiForSystem(), USER_DEFAULT_SCREEN_DPI ) & ~1;
|
||||||
if (IsProcessDPIAware())
|
|
||||||
ret = MulDiv( ret, get_display_dpi(), USER_DEFAULT_SCREEN_DPI ) & ~1;
|
|
||||||
return ret;
|
|
||||||
case SM_CYSMCAPTION:
|
case SM_CYSMCAPTION:
|
||||||
return GetSystemMetrics(SM_CYSMSIZE) + 1;
|
return GetSystemMetrics(SM_CYSMSIZE) + 1;
|
||||||
case SM_CXSMSIZE:
|
case SM_CXSMSIZE:
|
||||||
|
@ -2963,6 +2937,24 @@ BOOL WINAPI IsProcessDPIAware(void)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetDpiForSystem (USER32.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI GetDpiForSystem(void)
|
||||||
|
{
|
||||||
|
static int display_dpi;
|
||||||
|
|
||||||
|
if (!IsProcessDPIAware()) return USER_DEFAULT_SCREEN_DPI;
|
||||||
|
|
||||||
|
if (!display_dpi)
|
||||||
|
{
|
||||||
|
HDC hdc = get_display_dc();
|
||||||
|
display_dpi = GetDeviceCaps( hdc, LOGPIXELSY );
|
||||||
|
release_display_dc( hdc );
|
||||||
|
}
|
||||||
|
return display_dpi;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* SetThreadDpiAwarenessContext (USER32.@)
|
* SetThreadDpiAwarenessContext (USER32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -292,6 +292,7 @@
|
||||||
@ stdcall GetDlgItemTextA(long long ptr long)
|
@ stdcall GetDlgItemTextA(long long ptr long)
|
||||||
@ stdcall GetDlgItemTextW(long long ptr long)
|
@ stdcall GetDlgItemTextW(long long ptr long)
|
||||||
@ stdcall GetDoubleClickTime()
|
@ stdcall GetDoubleClickTime()
|
||||||
|
@ stdcall GetDpiForSystem()
|
||||||
@ stdcall GetFocus()
|
@ stdcall GetFocus()
|
||||||
@ stdcall GetForegroundWindow()
|
@ stdcall GetForegroundWindow()
|
||||||
@ stdcall GetGestureConfig(long long long ptr ptr long)
|
@ stdcall GetGestureConfig(long long long ptr ptr long)
|
||||||
|
|
|
@ -3675,6 +3675,7 @@ WINUSERAPI UINT WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT);
|
||||||
WINUSERAPI UINT WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);
|
WINUSERAPI UINT WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);
|
||||||
#define GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
|
#define GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
|
||||||
WINUSERAPI UINT WINAPI GetDoubleClickTime(void);
|
WINUSERAPI UINT WINAPI GetDoubleClickTime(void);
|
||||||
|
WINUSERAPI UINT WINAPI GetDpiForSystem(void);
|
||||||
WINUSERAPI HWND WINAPI GetFocus(void);
|
WINUSERAPI HWND WINAPI GetFocus(void);
|
||||||
WINUSERAPI HWND WINAPI GetForegroundWindow(void);
|
WINUSERAPI HWND WINAPI GetForegroundWindow(void);
|
||||||
WINUSERAPI BOOL WINAPI GetGestureConfig(HWND,DWORD,DWORD,UINT*,GESTURECONFIG*,UINT);
|
WINUSERAPI BOOL WINAPI GetGestureConfig(HWND,DWORD,DWORD,UINT*,GESTURECONFIG*,UINT);
|
||||||
|
|
Loading…
Reference in New Issue