From 0766d375bc29874d11a813f82622fc6984240b2d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 8 Sep 2010 13:21:18 +0200 Subject: [PATCH] gdi32: Mirror the returned rectangle in GetClipBox for RTL layout. --- dlls/gdi32/clipping.c | 6 ++++++ dlls/gdi32/tests/mapping.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/dlls/gdi32/clipping.c b/dlls/gdi32/clipping.c index b8d9ed5f360..7be7650839a 100644 --- a/dlls/gdi32/clipping.c +++ b/dlls/gdi32/clipping.c @@ -400,6 +400,12 @@ INT WINAPI GetClipBox( HDC hdc, LPRECT rect ) DeleteObject( hrgn ); } else ret = GetRgnBox( dc->hVisRgn, rect ); + if (dc->layout & LAYOUT_RTL) + { + int tmp = rect->left; + rect->left = rect->right - 1; + rect->right = tmp - 1; + } DPtoLP( hdc, (LPPOINT)rect, 2 ); release_dc_ptr( dc ); return ret; diff --git a/dlls/gdi32/tests/mapping.c b/dlls/gdi32/tests/mapping.c index c4a97acb5dd..fba0abfa3c8 100644 --- a/dlls/gdi32/tests/mapping.c +++ b/dlls/gdi32/tests/mapping.c @@ -311,6 +311,9 @@ static void test_dc_layout(void) SetRect( &rc, 15, 10, 20, 20 ); GetClipRgn( hdc, hrgn ); GetRgnBox( hrgn, &ret_rc ); + ok( EqualRect( &rc, &ret_rc ), "wrong clip box %d,%d - %d,%d\n", + ret_rc.left, ret_rc.top, ret_rc.right, ret_rc.bottom ); + GetClipBox( hdc, &ret_rc ); ok( EqualRect( &rc, &ret_rc ), "wrong clip box %d,%d - %d,%d\n", ret_rc.left, ret_rc.top, ret_rc.right, ret_rc.bottom ); SetRectRgn( hrgn, 60, 10, 80, 20 ); @@ -320,6 +323,9 @@ static void test_dc_layout(void) SetRect( &rc, 15, 10, 40, 20 ); GetClipRgn( hdc, hrgn ); GetRgnBox( hrgn, &ret_rc ); + ok( EqualRect( &rc, &ret_rc ), "wrong clip box %d,%d - %d,%d\n", + ret_rc.left, ret_rc.top, ret_rc.right, ret_rc.bottom ); + GetClipBox( hdc, &ret_rc ); ok( EqualRect( &rc, &ret_rc ), "wrong clip box %d,%d - %d,%d\n", ret_rc.left, ret_rc.top, ret_rc.right, ret_rc.bottom );