Time to commit some Work-In-Progress stuff before my diff gets too large..
[reactos.git] / rostests / apitests / gdi32 / FrameRgn.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for FrameRgn
5 * PROGRAMMERS: Timo Kreuzer
6 */
7
8 #include <apitest.h>
9 #include <windows.h>
10 #include <stdio.h>
11 #include "init.h"
12
13 #if 0
14 BOOL
15 MyFrameRgn(
16 HDC hdc,
17 HRGN hrgn,
18 HBRUSH hbr,
19 INT cx,
20 INT cy)
21 {
22 HRGN hrgnTemp;
23
24 hrgnTemp = CreateRectRgn(0, 0, 0, 0);
25 if (hrgnTemp == NULL)
26 {
27 return FALSE;
28 }
29
30 if (CombineRgn(hrgnTemp, hrgn, NULL, RGN_COPY) == ERROR)
31 goto Failure;
32
33 if (OffsetRgn(hrgn, cx, cy) == ERROR)
34 goto Failure;
35
36 if (CombineRgn(hrgnTemp, hrgnTemp, hrgn, RGN_AND) == ERROR)
37 goto Failure;
38
39 if (OffsetRgn(hrgn, -2 * cx, 0) == ERROR)
40 goto Failure;
41
42 if (CombineRgn(hrgnTemp, hrgnTemp, hrgn, RGN_AND) == ERROR)
43 goto Failure;
44
45 if (OffsetRgn(hrgn, 0, -2 * cy) == ERROR)
46 goto Failure;
47
48 if (CombineRgn(hrgnTemp, hrgnTemp, hrgn, RGN_AND) == ERROR)
49 goto Failure;
50
51 if (OffsetRgn(hrgn, 2 * cx, 0) == ERROR)
52 goto Failure;
53
54 if (CombineRgn(hrgnTemp, hrgnTemp, hrgn, RGN_AND) == ERROR)
55 goto Failure;
56
57 if (OffsetRgn(hrgn, -cx, cy) == ERROR)
58 goto Failure;
59
60 if (CombineRgn(hrgnTemp, hrgn, hrgnTemp, RGN_DIFF) == ERROR)
61 goto Failure;
62
63 if (!FillRgn(hdc, hrgnTemp, hbr))
64 goto Failure;
65
66 DeleteObject(hrgnTemp);
67 return TRUE;
68
69 Failure:
70 DeleteObject(hrgnTemp);
71 return FALSE;
72 }
73 #endif // 0
74
75 static
76 void
77 CheckBitmapBitsWithLine(
78 ULONG Line,
79 HDC hdc,
80 UINT cx,
81 UINT cy,
82 PUCHAR pjBits,
83 COLORREF *pcrColors)
84 {
85 UINT x, y, i;
86
87 for (y = 0; y < cy; y++)
88 {
89 for (x = 0; x < cy; x++)
90 {
91 i = y * cx + x;
92 ok(GetPixel(hdc, x, y) == pcrColors[pjBits[i]],
93 "Wrong pixel at (%u,%u): expected 0x%08lx, got 0x%08lx\n",
94 x, y, pcrColors[pjBits[i]], GetPixel(hdc, x, y));
95 }
96 }
97 }
98
99 #define CheckBitmapBits(hdc,cx,cy,pj,pcr) \
100 CheckBitmapBitsWithLine(__LINE__, hdc,cx,cy,pj,pcr)
101
102 void Test_FrameRgn()
103 {
104 RECT rc = {0, 0, 8, 8 };
105 HRGN hrgn1, hrgn2;
106 BOOL bRet;
107 UCHAR ajBits[64] = {
108 0, 0, 0, 0, 0, 0, 0, 0, // 0000000
109 0, 1, 1, 1, 1, 0, 0, 0, // 0****00
110 0, 1, 2, 2, 1, 0, 0, 0, // 0*xx**0
111 0, 1, 2, 2, 1, 1, 1, 0, // 0*xxx*0
112 0, 1, 1, 1, 2, 2, 1, 0, // 0**xx*0
113 0, 0, 0, 1, 2, 2, 1, 0, // 00****0
114 0, 0, 0, 1, 1, 1, 1, 0, // 0000000
115 0, 0, 0, 0, 0, 0, 0, 0 // 0000000
116 };
117 COLORREF acrColors[16] = {RGB(0,0,0), RGB(255,255,255), RGB(128,128,128), 0};
118
119 FillRect(ghdcDIB32, &rc, GetStockObject(BLACK_BRUSH));
120
121 hrgn1 = CreateRectRgn(1, 1, 5, 5);
122 ok(hrgn1 != NULL, "failed to create region\n");
123
124 hrgn2 = CreateRectRgn(3, 3, 7, 7);
125 ok(hrgn1 != NULL, "failed to create region\n");
126
127 CombineRgn(hrgn1, hrgn1, hrgn2, RGN_OR);
128
129 bRet = FillRgn(ghdcDIB32, hrgn1, GetStockObject(GRAY_BRUSH));
130 ok(bRet != 0, "FrameRgn failed\n");
131
132 bRet = FrameRgn(ghdcDIB32, hrgn1, GetStockObject(WHITE_BRUSH), 1, 1);
133 ok(bRet != 0, "FrameRgn failed\n");
134
135 CheckBitmapBits(ghdcDIB32, 8, 8, ajBits, acrColors);
136
137 }
138
139
140
141 START_TEST(FrameRgn)
142 {
143 InitStuff();
144 Test_FrameRgn();
145 }
146