2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for ExtCeateRegion
5 * PROGRAMMERS: Timo Kreuzer
32 void Test_ExtCreateRegion_Parameters()
34 hrgn
= ExtCreateRegion(NULL
, 1, pRgnData
);
35 ok(hrgn
!= NULL
, "ExtCreateRegion failed \n");
39 #define CheckRect(prect, _left, _top, _right, _bottom) \
41 ok(((prect)->left == _left) && ((prect)->top == _top) && \
42 ((prect)->right == _right) && ((prect)->bottom == _bottom), \
43 "Region does not match, expected (%ld,%ld,%ld,%ld) got (%ld,%ld,%ld,%ld)\n", \
44 _left, _top, _right, _bottom, \
45 (prect)->left, (prect)->top, (prect)->right, (prect)->bottom); \
48 #define CheckRectRegion(hrgn, _left, _top, _right, _bottom) \
50 HRGN hrgnTemp = CreateRectRgn(_left, _top, _right, _bottom); \
52 ok(GetRgnBox(hrgn, &rcTemp) == SIMPLEREGION, "Region is not SIMPLEREGION\n"); \
53 CheckRect(&rcTemp, _left, _top, _right, _bottom); \
54 ok(EqualRgn(hrgn, hrgnTemp), "Region does not match\n"); \
55 DeleteObject(hrgnTemp); \
58 void Test_ExtCreateRegion_Transform()
63 CHAR data
[sizeof(RECT
) - 1];
65 PRECT prect
= (PRECT
)&RgnDataBuffer
.rgndata
.Buffer
;
66 const RGNDATA
*pRgnData
= (const RGNDATA
*)&RgnDataBuffer
;
72 RgnDataBuffer
.rgndata
.rdh
.dwSize
= sizeof(RGNDATAHEADER
);
73 RgnDataBuffer
.rgndata
.rdh
.iType
= RDH_RECTANGLES
;
74 RgnDataBuffer
.rgndata
.rdh
.nCount
= 1;
75 RgnDataBuffer
.rgndata
.rdh
.nRgnSize
= sizeof(RGNDATAHEADER
) + sizeof(RECT
);
76 RgnDataBuffer
.rgndata
.rdh
.rcBound
.left
= 0;
77 RgnDataBuffer
.rgndata
.rdh
.rcBound
.top
= 0;
78 RgnDataBuffer
.rgndata
.rdh
.rcBound
.right
= 10;
79 RgnDataBuffer
.rgndata
.rdh
.rcBound
.bottom
= 10;
85 SetRectEmpty(&RgnDataBuffer
.rgndata
.rdh
.rcBound
);
87 hrgn
= ExtCreateRegion(NULL
, sizeof(RgnDataBuffer
), pRgnData
);
88 ok(hrgn
!= NULL
, "ExtCreateRegion failed with without transform\n");
89 CheckRectRegion(hrgn
, 0, 0, 10, 10);
91 InitXFORM(&xform
, 1., 0., 0., 1., 0., 0.);
92 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
93 ok(hrgn
!= NULL
, "ExtCreateRegion failed with identity transform\n");
94 CheckRectRegion(hrgn
, 0, 0, 10, 10);
96 InitXFORM(&xform
, 1., 0., 0., 1., 10., 10.);
97 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
98 ok(hrgn
!= NULL
, "ExtCreateRegion failed with offset transform\n");
99 CheckRectRegion(hrgn
, 10, 10, 20, 20);
101 InitXFORM(&xform
, 2.5, 0., 0., 1.5, 0., 0.);
102 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
103 ok(hrgn
!= NULL
, "ExtCreateRegion failed with scaling transform\n");
104 CheckRectRegion(hrgn
, 0, 0, 25, 15);
106 InitXFORM(&xform
, 2.5, 0., 0., 1.5, 20., 40.);
107 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
108 ok(hrgn
!= NULL
, "ExtCreateRegion failed with scaling+offset transform\n");
109 CheckRectRegion(hrgn
, 20, 40, 45, 55);
111 InitXFORM(&xform
, 1., 10., 0., 1., 0., 0.);
112 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
113 ok(hrgn
!= NULL
, "ExtCreateRegion failed with shearing transform\n");
114 ok(GetRgnBox(hrgn
, &rcTemp
) == COMPLEXREGION
, "not a complex region\n");
115 CheckRect(&rcTemp
, 0, 1, 10, 101);
118 InitXFORM(&xform
, cosf(eAngle
), -sinf(eAngle
), sinf(eAngle
), cosf(eAngle
), 10., 10.);
119 hrgn
= ExtCreateRegion(&xform
, sizeof(RgnDataBuffer
), pRgnData
);
120 ok(hrgn
!= NULL
, "ExtCreateRegion failed with rotating transform\n");
121 CheckRectRegion(hrgn
, 0, 10, 10, 20);
125 START_TEST(ExtCreateRegion
)
127 Test_ExtCreateRegion_Transform();