It may be counterintuitive, but every version of Windows returns this.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/gdi32/tests/dc.c | 52 ++++++++++++-------------------------
dlls/gdi32/tests/metafile.c | 48 ++++++++++++----------------------
2 files changed, 32 insertions(+), 68 deletions(-)
diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c
index 9739b8f61d..e9fdb12f68 100644
--- a/dlls/gdi32/tests/dc.c
+++ b/dlls/gdi32/tests/dc.c
@@ -40,27 +40,6 @@
static DWORD (WINAPI *pSetLayout)(HDC hdc, DWORD layout);
-static void dump_region(HRGN hrgn)
-{
- DWORD i, size;
- RGNDATA *data = NULL;
- RECT *rect;
-
- if (!hrgn)
- {
- printf( "(null) region\n" );
- return;
- }
- if (!(size = GetRegionData( hrgn, 0, NULL ))) return;
- if (!(data = HeapAlloc( GetProcessHeap(), 0, size ))) return;
- GetRegionData( hrgn, size, data );
- printf( "%d rects:", data->rdh.nCount );
- for (i = 0, rect = (RECT *)data->Buffer; i < data->rdh.nCount; i++, rect++)
- printf( " (%d,%d)-(%d,%d)", rect->left, rect->top, rect->right, rect->bottom );
- printf( "\n" );
- HeapFree( GetProcessHeap(), 0, data );
-}
-
static void test_dc_values(void)
{
HDC hdc = CreateDCA("DISPLAY", NULL, NULL, NULL);
@@ -111,6 +90,8 @@ static void test_dc_values(void)
static void test_savedc_2(void)
{
+ char buffer[100];
+ RGNDATA *rgndata = (RGNDATA *)buffer;
HWND hwnd;
HDC hdc;
HRGN hrgn;
@@ -130,13 +111,15 @@ static void test_savedc_2(void)
ok(hdc != NULL, "GetDC failed\n");
ret = GetClipBox(hdc, &rc_clip);
- ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
+ ok(ret == SIMPLEREGION, "wrong region type %d\n", ret);
ret = GetClipRgn(hdc, hrgn);
ok(ret == 0, "GetClipRgn returned %d instead of 0\n", ret);
ret = GetRgnBox(hrgn, &rc);
ok(ret == NULLREGION, "GetRgnBox returned %d %s instead of NULLREGION\n",
ret, wine_dbgstr_rect(&rc));
- /*dump_region(hrgn);*/
+ ret = GetRegionData(hrgn, sizeof(buffer), rgndata);
+ ok(ret == sizeof(RGNDATAHEADER), "got %u\n", ret);
+ ok(!rgndata->rdh.nCount, "got %u rectangles\n", rgndata->rdh.nCount);
SetRect(&rc, 0, 0, 100, 100);
ok(EqualRect(&rc, &rc_clip), "rects are not equal: %s - %s\n", wine_dbgstr_rect(&rc),
wine_dbgstr_rect(&rc_clip));
@@ -145,20 +128,17 @@ static void test_savedc_2(void)
ok(ret == 1, "ret = %d\n", ret);
ret = IntersectClipRect(hdc, 0, 0, 50, 50);
- if (ret == COMPLEXREGION)
- {
- /* XP returns COMPLEXREGION although dump_region reports only 1 rect */
- trace("Windows BUG: IntersectClipRect returned %d instead of SIMPLEREGION\n", ret);
- /* let's make sure that it's a simple region */
- ret = GetClipRgn(hdc, hrgn);
- ok(ret == 1, "GetClipRgn returned %d instead of 1\n", ret);
- dump_region(hrgn);
- }
- else
- ok(ret == SIMPLEREGION, "IntersectClipRect returned %d instead of SIMPLEREGION\n", ret);
+ todo_wine ok(ret == COMPLEXREGION, "wrong region type %d\n", ret);
+ ret = GetClipRgn(hdc, hrgn);
+ ok(ret == 1, "GetClipRgn returned %d instead of 1\n", ret);
+ ret = GetRegionData(hrgn, sizeof(buffer), rgndata);
+ ok(ret == sizeof(RGNDATAHEADER) + sizeof(RECT), "got %u\n", ret);
+ ok(rgndata->rdh.nCount == 1, "got %u rectangles\n", rgndata->rdh.nCount);
+ SetRect(&rc, 0, 0, 50, 50);
+ ok(EqualRect((RECT *)rgndata->Buffer, &rc), "got rect %s\n", wine_dbgstr_rect((RECT *)rgndata->Buffer));
ret = GetClipBox(hdc, &rc_clip);
- ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
+ ok(ret == SIMPLEREGION, "wrong region type %d\n", ret);
SetRect(&rc, 0, 0, 50, 50);
ok(EqualRect(&rc, &rc_clip), "rects are not equal: %s - %s\n", wine_dbgstr_rect(&rc),
wine_dbgstr_rect(&rc_clip));
@@ -167,7 +147,7 @@ static void test_savedc_2(void)
ok(ret, "ret = %d\n", ret);
ret = GetClipBox(hdc, &rc_clip);
- ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
+ ok(ret == SIMPLEREGION, "wrong region type %d\n", ret);
SetRect(&rc, 0, 0, 100, 100);
ok(EqualRect(&rc, &rc_clip), "rects are not equal: %s - %s\n", wine_dbgstr_rect(&rc),
wine_dbgstr_rect(&rc_clip));
diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c
index 231d6a4d35..d1c18cdb29 100644
--- a/dlls/gdi32/tests/metafile.c
+++ b/dlls/gdi32/tests/metafile.c
@@ -60,20 +60,6 @@ static void init_function_pointers(void)
GDI_GET_PROC(SetDCPenColor);
}
-static DWORD rgn_rect_count(HRGN hrgn)
-{
- DWORD size;
- RGNDATA *data;
-
- if (!hrgn) return 0;
- if (!(size = GetRegionData(hrgn, 0, NULL))) return 0;
- if (!(data = HeapAlloc(GetProcessHeap(), 0, size))) return 0;
- GetRegionData(hrgn, size, data);
- size = data->rdh.nCount;
- HeapFree(GetProcessHeap(), 0, data);
- return size;
-}
-
static int CALLBACK eto_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
const ENHMETARECORD *emr, int n_objs, LPARAM param)
{
@@ -2716,6 +2702,8 @@ static int CALLBACK clip_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
static void test_emf_clipping(void)
{
+ char buffer[100];
+ RGNDATA *rgndata = (RGNDATA *)buffer;
static const RECT rc = { 0, 0, 100, 100 };
RECT rc_clip = { 100, 100, 1024, 1024 };
HWND hwnd;
@@ -2790,15 +2778,13 @@ static void test_emf_clipping(void)
wine_dbgstr_rect(&rc_res));
ret = IntersectClipRect(hdc, 0, 0, 100, 100);
- ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION) /* XP */, "got %d\n", ret);
- if (ret == COMPLEXREGION)
- {
- /* XP returns COMPLEXREGION although region contains only 1 rect */
- ret = GetClipRgn(hdc, hrgn);
- ok(ret == 1, "expected 1, got %d\n", ret);
- ret = rgn_rect_count(hrgn);
- ok(ret == 1, "expected 1, got %d\n", ret);
- }
+ todo_wine ok(ret == COMPLEXREGION, "wrong region type %d\n", ret);
+ ret = GetClipRgn(hdc, hrgn);
+ ok(ret == 1, "expected 1, got %d\n", ret);
+ ret = GetRegionData(hrgn, sizeof(buffer), rgndata);
+ ok(ret == sizeof(RGNDATAHEADER) + sizeof(RECT), "got %u\n", ret);
+ ok(rgndata->rdh.nCount == 1, "got %u rectangles\n", rgndata->rdh.nCount);
+ ok(EqualRect((RECT *)rgndata->Buffer, &rc), "got rect %s\n", wine_dbgstr_rect((RECT *)rgndata->Buffer));
SetRect(&rc_res, -1, -1, -1, -1);
ret = GetClipBox(hdc, &rc_res);
ok(ret == SIMPLEREGION, "got %d\n", ret);
@@ -2807,15 +2793,13 @@ static void test_emf_clipping(void)
SetRect(&rc_sclip, 0, 0, 100, 50);
ret = ExcludeClipRect(hdc, 0, 50, 100, 100);
- ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION) /* XP */, "got %d\n", ret);
- if (ret == COMPLEXREGION)
- {
- /* XP returns COMPLEXREGION although region contains only 1 rect */
- ret = GetClipRgn(hdc, hrgn);
- ok(ret == 1, "expected 1, got %d\n", ret);
- ret = rgn_rect_count(hrgn);
- ok(ret == 1, "expected 1, got %d\n", ret);
- }
+ todo_wine ok(ret == COMPLEXREGION, "wrong region type %d\n", ret);
+ ret = GetClipRgn(hdc, hrgn);
+ ok(ret == 1, "expected 1, got %d\n", ret);
+ ret = GetRegionData(hrgn, sizeof(buffer), rgndata);
+ ok(ret == sizeof(RGNDATAHEADER) + sizeof(RECT), "got %u\n", ret);
+ ok(rgndata->rdh.nCount == 1, "got %u rectangles\n", rgndata->rdh.nCount);
+ ok(EqualRect((RECT *)rgndata->Buffer, &rc_sclip), "got rect %s\n", wine_dbgstr_rect((RECT *)rgndata->Buffer));
SetRect(&rc_res, -1, -1, -1, -1);
ret = GetClipBox(hdc, &rc_res);
ok(ret == SIMPLEREGION, "got %d\n", ret);
--
2.24.1