Module: wine Branch: master Commit: f57d5305035049e8d738ee7b757b1030bc06a3c7 URL: https://gitlab.winehq.org/wine/wine/-/commit/f57d5305035049e8d738ee7b757b103...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Jun 3 20:07:02 2024 +0200
win32u: Use get_monitor_rect in more places.
---
dlls/win32u/sysparams.c | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 006c8820b7b..56410cbf48c 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -2102,9 +2102,10 @@ UINT get_monitor_dpi( HMONITOR monitor ) return system_dpi; }
-static RECT get_monitor_rect( struct monitor *monitor, UINT dpi ) +static RECT get_monitor_rect( struct monitor *monitor, BOOL work, UINT dpi ) { - return map_dpi_rect( monitor->rc_monitor, get_monitor_dpi( monitor->handle ), dpi ); + RECT rect = work ? monitor->rc_work : monitor->rc_monitor; + return map_dpi_rect( rect, get_monitor_dpi( monitor->handle ), dpi ); }
/********************************************************************** @@ -2285,13 +2286,14 @@ RECT get_virtual_screen_rect( UINT dpi )
LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) { + RECT monitor_rect; if (!is_monitor_active( monitor ) || monitor->is_clone) continue; - union_rect( &rect, &rect, &monitor->rc_monitor ); + monitor_rect = get_monitor_rect( monitor, FALSE, dpi ); + union_rect( &rect, &rect, &monitor_rect ); }
unlock_display_devices();
- if (dpi) rect = map_dpi_rect( rect, system_dpi, dpi ); return rect; }
@@ -2308,7 +2310,7 @@ static BOOL is_window_rect_full_screen( const RECT *rect, UINT dpi )
if (!is_monitor_active( monitor ) || monitor->is_clone) continue;
- monrect = get_monitor_rect( monitor, dpi ); + monrect = get_monitor_rect( monitor, FALSE, dpi ); if (rect->left <= monrect.left && rect->right >= monrect.right && rect->top <= monrect.top && rect->bottom >= monrect.bottom) { @@ -2338,7 +2340,7 @@ RECT get_display_rect( const WCHAR *display ) struct monitor *monitor; UNICODE_STRING name; RECT rect = {0}; - UINT index; + UINT index, dpi = get_thread_dpi();
RtlInitUnicodeString( &name, display ); if (!(index = get_display_index( &name ))) return rect; @@ -2347,12 +2349,12 @@ RECT get_display_rect( const WCHAR *display ) LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) { if (!monitor->source || monitor->source->id + 1 != index) continue; - rect = monitor->rc_monitor; + rect = get_monitor_rect( monitor, FALSE, dpi ); break; }
unlock_display_devices(); - return map_dpi_rect( rect, system_dpi, get_thread_dpi() ); + return rect; }
RECT get_primary_monitor_rect( UINT dpi ) @@ -2365,12 +2367,12 @@ RECT get_primary_monitor_rect( UINT dpi ) LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) { if (!is_monitor_primary( monitor )) continue; - rect = monitor->rc_monitor; + rect = get_monitor_rect( monitor, FALSE, dpi ); break; }
unlock_display_devices(); - return map_dpi_rect( rect, system_dpi, dpi ); + return rect; }
/********************************************************************** @@ -3505,7 +3507,7 @@ static BOOL should_enumerate_monitor( struct monitor *monitor, const POINT *orig if (!is_monitor_active( monitor )) return FALSE; if (monitor->is_clone) return FALSE;
- *rect = get_monitor_rect( monitor, get_thread_dpi() ); + *rect = get_monitor_rect( monitor, FALSE, get_thread_dpi() ); OffsetRect( rect, -origin->x, -origin->y ); return intersect_rect( rect, rect, limit ); } @@ -3595,7 +3597,7 @@ BOOL WINAPI NtUserEnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc BOOL get_monitor_info( HMONITOR handle, MONITORINFO *info ) { struct monitor *monitor; - UINT dpi_from, dpi_to; + UINT dpi = get_thread_dpi();
if (info->cbSize != sizeof(MONITORINFOEXW) && info->cbSize != sizeof(MONITORINFO)) return FALSE;
@@ -3606,9 +3608,8 @@ BOOL get_monitor_info( HMONITOR handle, MONITORINFO *info ) if (monitor->handle != handle) continue; if (!is_monitor_active( monitor )) continue;
- /* FIXME: map dpi */ - info->rcMonitor = monitor->rc_monitor; - info->rcWork = monitor->rc_work; + info->rcMonitor = get_monitor_rect( monitor, FALSE, dpi ); + info->rcWork = get_monitor_rect( monitor, TRUE, dpi ); info->dwFlags = is_monitor_primary( monitor ) ? MONITORINFOF_PRIMARY : 0; if (info->cbSize >= sizeof(MONITORINFOEXW)) { @@ -3619,12 +3620,6 @@ BOOL get_monitor_info( HMONITOR handle, MONITORINFO *info ) } unlock_display_devices();
- if ((dpi_to = get_thread_dpi())) - { - dpi_from = get_monitor_dpi( handle ); - info->rcMonitor = map_dpi_rect( info->rcMonitor, dpi_from, dpi_to ); - info->rcWork = map_dpi_rect( info->rcWork, dpi_from, dpi_to ); - } TRACE( "flags %04x, monitor %s, work %s\n", (int)info->dwFlags, wine_dbgstr_rect(&info->rcMonitor), wine_dbgstr_rect(&info->rcWork)); return TRUE; @@ -3658,7 +3653,7 @@ HMONITOR monitor_from_rect( const RECT *rect, UINT flags, UINT dpi )
if (!is_monitor_active( monitor ) || monitor->is_clone) continue;
- monitor_rect = get_monitor_rect( monitor, system_dpi ); + monitor_rect = get_monitor_rect( monitor, FALSE, system_dpi ); if (intersect_rect( &intersect, &monitor_rect, &r )) { /* check for larger intersecting area */ @@ -5244,6 +5239,8 @@ BOOL WINAPI NtUserSystemParametersInfo( UINT action, UINT val, void *ptr, UINT w } case SPI_GETWORKAREA: { + UINT dpi = get_thread_dpi(); + if (!ptr) return FALSE;
spi_idx = SPI_SETWORKAREA_IDX; @@ -5256,14 +5253,14 @@ BOOL WINAPI NtUserSystemParametersInfo( UINT action, UINT val, void *ptr, UINT w LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) { if (!is_monitor_primary( monitor )) continue; - work_area = monitor->rc_work; + work_area = get_monitor_rect( monitor, TRUE, dpi ); break; }
unlock_display_devices(); spi_loaded[spi_idx] = TRUE; } - *(RECT *)ptr = map_dpi_rect( work_area, system_dpi, get_thread_dpi() ); + *(RECT *)ptr = work_area; ret = TRUE; TRACE("work area %s\n", wine_dbgstr_rect( &work_area )); break;