From: Thomas Csovcsity <thc.fr13nd@gmail.com> --- dlls/user32/tests/uitools.c | 4 ++-- dlls/user32/uitools.c | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dlls/user32/tests/uitools.c b/dlls/user32/tests/uitools.c index 3f262f7ab7f..298066bff8d 100644 --- a/dlls/user32/tests/uitools.c +++ b/dlls/user32/tests/uitools.c @@ -40,10 +40,10 @@ static void test_FillRect(void) const BOOL todo_flag; } test[] = { - { 5, 5, 0x0, TRUE }, + { 5, 5, 0x0, FALSE }, { 5, 6, 0xffffff, FALSE }, { 6, 5, 0xffffff, FALSE }, - { 6, 6, 0xffffff, TRUE }, + { 6, 6, 0xffffff, FALSE }, }; /* fill bitmap data with white */ diff --git a/dlls/user32/uitools.c b/dlls/user32/uitools.c index a8f3a0af84b..9a863cf4bcd 100644 --- a/dlls/user32/uitools.c +++ b/dlls/user32/uitools.c @@ -1435,12 +1435,34 @@ BOOL WINAPI SubtractRect( LPRECT dest, const RECT *src1, const RECT *src2 ) INT WINAPI FillRect( HDC hdc, const RECT *rect, HBRUSH hbrush ) { HBRUSH prev_brush; + RECT tmpRect; + + if (rect->bottom < rect->top) + { + tmpRect.bottom = rect->top; + tmpRect.top = rect->bottom; + } + else + { + tmpRect.bottom = rect->bottom; + tmpRect.top = rect->top; + } + if (rect->right < rect->left) + { + tmpRect.right = rect->left; + tmpRect.left = rect->right; + } + else + { + tmpRect.right = rect->right; + tmpRect.left = rect->left; + } if (hbrush <= (HBRUSH) (COLOR_MAX + 1)) hbrush = GetSysColorBrush( HandleToULong(hbrush) - 1 ); prev_brush = SelectObject( hdc, hbrush ); - PatBlt( hdc, rect->left, rect->top, - rect->right - rect->left, rect->bottom - rect->top, PATCOPY ); + PatBlt( hdc, tmpRect.left, tmpRect.top, + tmpRect.right - tmpRect.left, tmpRect.bottom - tmpRect.top, PATCOPY ); if (prev_brush) SelectObject( hdc, prev_brush ); return 1; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10341