win32u: Directly use sysparams in nulldrv_GetDeviceCaps.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2021-12-06 03:16:10 +01:00 committed by Alexandre Julliard
parent fdf3015816
commit 4ca8d676fb
5 changed files with 30 additions and 74 deletions

View file

@ -83,28 +83,6 @@ const struct gdi_dc_funcs *get_display_driver(void)
return &user_driver->dc_funcs;
}
struct monitor_info
{
const WCHAR *name;
RECT rect;
};
static BOOL CALLBACK monitor_enum_proc( HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM lparam )
{
struct monitor_info *info = (struct monitor_info *)lparam;
MONITORINFOEXW mi;
mi.cbSize = sizeof(mi);
user_callbacks->pGetMonitorInfoW( monitor, (MONITORINFO *)&mi );
if (!wcsicmp( info->name, mi.szDevice ))
{
info->rect = mi.rcMonitor;
return FALSE;
}
return TRUE;
}
static INT CDECL nulldrv_AbortDoc( PHYSDEV dev )
{
return 0;
@ -224,41 +202,31 @@ static INT CDECL nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
case HORZRES:
{
DC *dc = get_nulldrv_dc( dev );
struct monitor_info info;
RECT rect;
int ret;
if (!user_callbacks) return 640;
if (dc->display[0])
{
info.name = dc->display;
SetRectEmpty( &info.rect );
user_callbacks->pEnumDisplayMonitors( NULL, NULL, monitor_enum_proc, (LPARAM)&info );
if (!IsRectEmpty( &info.rect ))
return info.rect.right - info.rect.left;
rect = get_display_rect( dc->display );
if (!IsRectEmpty( &rect )) return rect.right - rect.left;
}
ret = user_callbacks->pGetSystemMetrics( SM_CXSCREEN );
ret = get_system_metrics( SM_CXSCREEN );
return ret ? ret : 640;
}
case VERTRES:
{
DC *dc = get_nulldrv_dc( dev );
struct monitor_info info;
RECT rect;
int ret;
if (!user_callbacks) return 480;
if (dc->display[0] && user_callbacks)
if (dc->display[0])
{
info.name = dc->display;
SetRectEmpty( &info.rect );
user_callbacks->pEnumDisplayMonitors( NULL, NULL, monitor_enum_proc, (LPARAM)&info );
if (!IsRectEmpty( &info.rect ))
return info.rect.bottom - info.rect.top;
rect = get_display_rect( dc->display );
if (!IsRectEmpty( &rect )) return rect.bottom - rect.top;
}
ret = user_callbacks->pGetSystemMetrics( SM_CYSCREEN );
ret = get_system_metrics( SM_CYSCREEN );
return ret ? ret : 480;
}
case BITSPIXEL:

View file

@ -372,7 +372,6 @@ extern void GDI_ReleaseObj( HGDIOBJ ) DECLSPEC_HIDDEN;
extern UINT GDI_get_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
extern HGDIOBJ GDI_inc_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
extern BOOL GDI_dec_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
extern DWORD get_system_dpi(void) DECLSPEC_HIDDEN;
extern HGDIOBJ get_stock_object( INT obj ) DECLSPEC_HIDDEN;
extern DWORD get_gdi_object_type( HGDIOBJ obj ) DECLSPEC_HIDDEN;

View file

@ -1462,6 +1462,24 @@ RECT get_virtual_screen_rect( UINT dpi )
return rect;
}
RECT get_display_rect( const WCHAR *display )
{
struct monitor *monitor;
RECT rect = {0};
if (!lock_display_devices()) return rect;
LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry )
{
if (!monitor->adapter || wcsicmp( monitor->adapter->dev.device_name, display )) continue;
rect = monitor->rc_monitor;
break;
}
unlock_display_devices();
return map_dpi_rect( rect, system_dpi, get_thread_dpi() );
}
static RECT get_primary_monitor_rect(void)
{
struct monitor *monitor;
@ -3907,7 +3925,7 @@ BOOL WINAPI NtUserSystemParametersInfo( UINT action, UINT val, void *ptr, UINT w
#undef WINE_SPI_WARN
}
static int get_system_metrics( int index )
int get_system_metrics( int index )
{
NONCLIENTMETRICSW ncm;
MINIMIZEDMETRICS mm;

View file

@ -33,10 +33,7 @@
struct user_callbacks
{
HWND (WINAPI *pGetDesktopWindow)(void);
BOOL (WINAPI *pGetMonitorInfoW)( HMONITOR, LPMONITORINFO );
INT (WINAPI *pGetSystemMetrics)(INT);
BOOL (WINAPI *pGetWindowRect)( HWND hwnd, LPRECT rect );
BOOL (WINAPI *pEnumDisplayMonitors)( HDC, LPRECT, MONITORENUMPROC, LPARAM );
BOOL (WINAPI *pRedrawWindow)( HWND, const RECT*, HRGN, UINT );
LRESULT (WINAPI *pSendMessageTimeoutW)( HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR );
HWND (WINAPI *pWindowFromDC)( HDC );
@ -245,7 +242,9 @@ struct unix_funcs
struct window_surface *surface );
};
extern RECT get_display_rect( const WCHAR *display ) DECLSPEC_HIDDEN;
extern UINT get_system_dpi(void) DECLSPEC_HIDDEN;
extern int get_system_metrics( int index ) DECLSPEC_HIDDEN;
extern RECT get_virtual_screen_rect( UINT dpi ) DECLSPEC_HIDDEN;
extern void wrappers_init( unixlib_handle_t handle ) DECLSPEC_HIDDEN;

View file

@ -958,22 +958,6 @@ static HWND WINAPI call_GetDesktopWindow(void)
return pGetDesktopWindow ? pGetDesktopWindow() : NULL;
}
static BOOL WINAPI call_GetMonitorInfoW( HMONITOR monitor, MONITORINFO *info )
{
static BOOL (WINAPI *pGetMonitorInfoW)( HMONITOR, LPMONITORINFO );
if (!pGetMonitorInfoW)
pGetMonitorInfoW = get_user_proc( "GetMonitorInfoW", FALSE );
return pGetMonitorInfoW && pGetMonitorInfoW( monitor, info );
}
static INT WINAPI call_GetSystemMetrics( INT metric )
{
static INT (WINAPI *pGetSystemMetrics)(INT);
if (!pGetSystemMetrics)
pGetSystemMetrics = get_user_proc( "GetSystemMetrics", FALSE );
return pGetSystemMetrics ? pGetSystemMetrics( metric ) : 0;
}
static BOOL WINAPI call_GetWindowRect( HWND hwnd, LPRECT rect )
{
static BOOL (WINAPI *pGetWindowRect)( HWND hwnd, LPRECT rect );
@ -982,15 +966,6 @@ static BOOL WINAPI call_GetWindowRect( HWND hwnd, LPRECT rect )
return pGetWindowRect && pGetWindowRect( hwnd, rect );
}
static BOOL WINAPI call_EnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc,
LPARAM lparam )
{
static BOOL (WINAPI *pEnumDisplayMonitors)( HDC, LPRECT, MONITORENUMPROC, LPARAM );
if (!pEnumDisplayMonitors)
pEnumDisplayMonitors = get_user_proc( "EnumDisplayMonitors", FALSE );
return pEnumDisplayMonitors && pEnumDisplayMonitors( hdc, rect, proc, lparam );
}
static BOOL WINAPI call_RedrawWindow( HWND hwnd, const RECT *rect, HRGN rgn, UINT flags )
{
static BOOL (WINAPI *pRedrawWindow)( HWND, const RECT*, HRGN, UINT );
@ -1019,10 +994,7 @@ static HWND WINAPI call_WindowFromDC( HDC hdc )
static const struct user_callbacks user_funcs =
{
call_GetDesktopWindow,
call_GetMonitorInfoW,
call_GetSystemMetrics,
call_GetWindowRect,
call_EnumDisplayMonitors,
call_RedrawWindow,
call_SendMessageTimeoutW,
call_WindowFromDC,