On 12/30/19 8:12 PM, Dmitry Timoshkov wrote:
Zebediah Figura z.figura12@gmail.com wrote:
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);
Even if every Windows version returns broken result doesn't make it legitimate to return COMPLEXREGION when the region contains only 1 rectangle. This is clearly broken.
Windows does many things that are nonsensical, buggy, or contradicting their own documentation or other parts of the code. This seems nothing new. If sufficiently motivated one could even argue that a simple region is a special case of a complex region (I wouldn't actually be that surprised if such reasoning led a Windows programmer to just always return COMPLEXREGION because it was easier for them). Are we abandoning the idea of bug-for-bug compatibility now?
I'm not arguing that we have to return COMPLEXREGION to satisfy the test (I certainly have no intention of writing such a patch), but our tests document the behaviour of Windows functions, not their documentation; that's why they exist.