From: "Anna (navi) Figueiredo Gomes" <navi@vlhl.dev> --- dlls/user32/tests/monitor.c | 26 +++++++++++++------------- dlls/win32u/input.c | 21 ++++++++++++++++++--- dlls/win32u/tests/win32u.c | 13 +++++-------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c index d781bcde815..6c386bd1e39 100644 --- a/dlls/user32/tests/monitor.c +++ b/dlls/user32/tests/monitor.c @@ -3281,16 +3281,16 @@ static void test_monitor_dpi_awareness( const struct monitor_info *infos, UINT c check_logical_physical_dpi( unaware_hwnd, monitor.left + 2 * scale + 1, monitor.top + 2 * scale + 1, monitor.left + 2 * scale + 1, monitor.top + 2 * scale + 1, FALSE ); - todo_wine ret = GetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &rect ); - todo_wine ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); - todo_wine ok( EqualRect( &rect, &scaled_virtual ), "got %s\n", wine_dbgstr_rect(&rect) ); + ret = GetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &rect ); + ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); + ok( EqualRect( &rect, &scaled_virtual ), "got %s\n", wine_dbgstr_rect(&rect) ); SetRect( &expect_device, 0, 0, virtual.right * HIMETRIC_PER_INCH / system_dpi, virtual.bottom * HIMETRIC_PER_INCH / system_dpi ); scaled_device = expect_device; scaled_device.right = MulDiv( scaled_device.right, 100, scale ); scaled_device.bottom = MulDiv( scaled_device.bottom, 100, scale ); - todo_wine ok( EqualRect( &device, &expect_device ) /* w10 */ || EqualRect( &device, &scaled_device ) /* w11 */, + ok( EqualRect( &device, &expect_device ) /* w10 */ || EqualRect( &device, &scaled_device ) /* w11 */, "got %s vs %s\n", wine_dbgstr_rect(&device), wine_dbgstr_rect(&expect_device) ); for (i = 0; i < ARRAY_SIZE(tests); i++) @@ -3580,9 +3580,9 @@ static void test_monitor_dpi_awareness( const struct monitor_info *infos, UINT c primary.left + 4 * scale + 1, primary.top + 4 * scale + 1, FALSE ); ret = GetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &rect ); - todo_wine ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); - todo_wine ok( EqualRect( &rect, monitor_aware ? &virtual : &scaled_virtual ), "got %s\n", wine_dbgstr_rect(&rect) ); - todo_wine ok( EqualRect( &device, &expect_device ) /* w10 */ || EqualRect( &device, &scaled_device ) /* w11 */, + ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); + ok( EqualRect( &rect, monitor_aware ? &virtual : &scaled_virtual ), "got %s\n", wine_dbgstr_rect(&rect) ); + ok( EqualRect( &device, &expect_device ) /* w10 */ || EqualRect( &device, &scaled_device ) /* w11 */, "got %s vs %s\n", wine_dbgstr_rect(&device), wine_dbgstr_rect(&expect_device) ); DestroyWindow( primary_hwnd ); @@ -3729,11 +3729,11 @@ static void test_monitor_dpi(void) } ret = GetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &display ); - todo_wine ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); - todo_wine ok( EqualRect( &display, &virtual ), "got %s\n", wine_dbgstr_rect( &display ) ); + ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); + ok( EqualRect( &display, &virtual ), "got %s\n", wine_dbgstr_rect( &display ) ); SetRect( &expect_rect, 0, 0, virtual.right * HIMETRIC_PER_INCH / system_dpi, virtual.bottom * HIMETRIC_PER_INCH / system_dpi ); - todo_wine ok( EqualRect( &device, &expect_rect ), "got %s\n", wine_dbgstr_rect( &device ) ); + ok( EqualRect( &device, &expect_rect ), "got %s\n", wine_dbgstr_rect( &device ) ); pSetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ); @@ -3776,11 +3776,11 @@ static void test_monitor_dpi(void) } ret = GetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &display ); - todo_wine ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); - todo_wine ok( EqualRect( &display, &virtual ), "got %s\n", wine_dbgstr_rect( &display ) ); + ok( ret, "GetPointerDeviceRects failed, error %lu.\n", GetLastError() ); + ok( EqualRect( &display, &virtual ), "got %s\n", wine_dbgstr_rect( &display ) ); SetRect( &expect_rect, 0, 0, virtual.right * HIMETRIC_PER_INCH / system_dpi, virtual.bottom * HIMETRIC_PER_INCH / system_dpi ); - todo_wine ok( EqualRect( &device, &expect_rect ), "got %s\n", wine_dbgstr_rect( &device ) ); + ok( EqualRect( &device, &expect_rect ), "got %s\n", wine_dbgstr_rect( &device ) ); pSetThreadDpiAwarenessContext( old_ctx ); } diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 41d871958f6..048950345b3 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -40,6 +40,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(win); WINE_DECLARE_DEBUG_CHANNEL(keyboard); +#define HIMETRIC_PER_INCH 2540 + static const WCHAR keyboard_layouts_keyW[] = { '\\','R','e','g','i','s','t','r','y', @@ -2892,7 +2894,20 @@ BOOL WINAPI NtUserGetPointerType( UINT32 id, POINTER_INPUT_TYPE *type ) */ BOOL WINAPI NtUserGetPointerDeviceRects( HANDLE handle, RECT *device_rect, RECT *display_rect ) { - FIXME( "handle %p, device_rect %p, display_rect %p stub!\n", handle, device_rect, display_rect ); - RtlSetLastWin32Error( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; + RECT rect; + + if (handle != INVALID_HANDLE_VALUE) + { + FIXME( "Pointer devices are not implemented!\n" ); + RtlSetLastWin32Error( ERROR_NO_DATA ); + return FALSE; + } + + rect = get_virtual_screen_rect( 0, MDT_DEFAULT ); + SetRect( device_rect, 0, 0, (rect.right - rect.left) * HIMETRIC_PER_INCH / get_system_dpi(), + (rect.bottom - rect.top) * HIMETRIC_PER_INCH / get_system_dpi() ); + *display_rect = get_virtual_screen_rect( get_thread_dpi(), MDT_DEFAULT ); + + TRACE( "returning device %s, display %s\n", wine_dbgstr_rect(device_rect), wine_dbgstr_rect(display_rect) ); + return TRUE; } diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 479d0532461..a67b918626d 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -3047,14 +3047,11 @@ void test_NtUserGetPointerDeviceRects( const char *arg ) SetThreadDpiAwarenessContext( ctx ); ret = NtUserGetPointerDeviceRects( INVALID_HANDLE_VALUE, &device, &display ); - todo_wine - { - ok( ret, "NtUserGetPointerDeviceRects failed, error %lu.\n", GetLastError() ); - ok( EqualRect( &device, &himetric_dev ), "device %s, expected %s\n", - wine_dbgstr_rect( &device ), wine_dbgstr_rect( &himetric_dev ) ); - ok( EqualRect( &display, &screen ), "display %s, expected %s\n", - wine_dbgstr_rect( &display ), wine_dbgstr_rect( &screen ) ); - } + ok( ret, "NtUserGetPointerDeviceRects failed, error %lu.\n", GetLastError() ); + ok( EqualRect( &device, &himetric_dev ), "device %s, expected %s\n", + wine_dbgstr_rect( &device ), wine_dbgstr_rect( &himetric_dev ) ); + ok( EqualRect( &display, &screen ), "display %s, expected %s\n", + wine_dbgstr_rect( &display ), wine_dbgstr_rect( &screen ) ); } START_TEST(win32u) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11166