diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 1e0ac10589e..aee02c400a8 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -1318,6 +1318,10 @@ UINT WINAPI GetBoundsRect(HDC hdc, LPRECT rect, UINT flags) { *rect = dc->BoundsRect; ret = is_rect_empty( rect ) ? DCB_RESET : DCB_SET; + rect->left = max( rect->left, 0 ); + rect->top = max( rect->top, 0 ); + rect->right = min( rect->right, dc->vis_rect.right - dc->vis_rect.left ); + rect->bottom = min( rect->bottom, dc->vis_rect.bottom - dc->vis_rect.top ); DPtoLP( hdc, (POINT *)rect, 2 ); } if (flags & DCB_RESET) diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c index e2ec28cc32a..5536abf27b3 100644 --- a/dlls/gdi32/tests/dc.c +++ b/dlls/gdi32/tests/dc.c @@ -930,7 +930,6 @@ static void test_boundsrect(void) ret = GetBoundsRect( hdc, &rect, 0 ); ok( ret == DCB_SET, "GetBoundsRect returned %x\n", ret ); SetRect( &expect, 6, 6, 1, 1 ); - todo_wine ok( EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n", rect.left, rect.top, rect.right, rect.bottom ); SetBoundsRect( hdc, NULL, DCB_ENABLE ); LineTo( hdc, 50, 40 );