[GDI32_APITEST]
[reactos.git] / rostests / apitests / gdi32 / MaskBlt.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for GdiReleaseLocalDC
5 * PROGRAMMERS: Timo Kreuzer
6 */
7
8 #include <stdio.h>
9 #include <wine/test.h>
10 #include <windows.h>
11
12 void Test_MaskBlt_1bpp()
13 {
14 HDC hdcDst, hdcSrc;
15 BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 1, BI_RGB, 0, 10, 10, 0,0}};
16 HBITMAP hbmDst, hbmSrc, hbmMsk;
17 PUCHAR pjBitsDst, pjBitsSrc, pjBitsMsk;
18 BOOL ret;
19
20 /* Create a dest dc and bitmap */
21 hdcDst = CreateCompatibleDC(NULL);
22 hbmDst = CreateDIBSection(hdcDst, &bmi, DIB_RGB_COLORS, (PVOID*)&pjBitsDst, NULL, 0);
23 SelectObject(hdcDst, hbmDst);
24
25 /* Create a source dc and bitmap */
26 hdcSrc = CreateCompatibleDC(NULL);
27 hbmSrc = CreateDIBSection(hdcSrc, &bmi, DIB_RGB_COLORS, (PVOID*)&pjBitsSrc, NULL, 0);
28 SelectObject(hdcSrc, hbmSrc);
29
30 /* Create a 1 bpp mask bitmap */
31 hbmMsk = CreateDIBSection(hdcDst, &bmi, DIB_RGB_COLORS, (PVOID*)&pjBitsMsk, NULL, 0);
32
33 /* Do the masking */
34 pjBitsDst[0] = 0xAA;
35 pjBitsSrc[0] = 0xCC;
36 pjBitsMsk[0] = 0xF0;
37 ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000));
38 ok(ret == 1, "MaskBlt failed (%d)\n", ret);
39 ok (pjBitsDst[0] == 0xCA, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]);
40
41 pjBitsDst[0] = 0x00;
42 pjBitsSrc[0] = 0xFF;
43 pjBitsMsk[0] = 0xF0;
44 ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000));
45 ok(ret == 1, "MaskBlt failed (%d)\n", ret);
46 ok (pjBitsDst[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]);
47
48
49
50 }
51
52 void Test_MaskBlt_RGBA()
53 {
54 HDC hdcDst, hdcSrc;
55 BITMAPINFO bmi1 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 1, BI_RGB, 0, 10, 10, 0,0}};
56 BITMAPINFO bmi32 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 32, BI_RGB, 0, 10, 10, 0,0}};
57 HBITMAP hbmDst, hbmSrc, hbmMsk;
58 PUCHAR pjBitsDst, pjBitsSrc, pjBitsMsk;
59 BOOL ret;
60
61 /* Create a dest dc and bitmap */
62 hdcDst = CreateCompatibleDC(NULL);
63 hbmDst = CreateDIBSection(hdcDst, &bmi32, DIB_RGB_COLORS, (PVOID*)&pjBitsDst, NULL, 0);
64 SelectObject(hdcDst, hbmDst);
65
66 /* Create a source dc and bitmap */
67 hdcSrc = CreateCompatibleDC(NULL);
68 hbmSrc = CreateDIBSection(hdcSrc, &bmi32, DIB_RGB_COLORS, (PVOID*)&pjBitsSrc, NULL, 0);
69 SelectObject(hdcSrc, hbmSrc);
70
71 /* Create a 1 bpp mask bitmap */
72 hbmMsk = CreateDIBSection(hdcDst, &bmi1, DIB_RGB_COLORS, (PVOID*)&pjBitsMsk, NULL, 0);
73
74 /* Do the masking */
75 pjBitsDst[0] = 0xAA;
76 pjBitsSrc[0] = 0xCC;
77 pjBitsMsk[0] = 0xF0;
78 ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000));
79 ok(ret == 1, "MaskBlt failed (%d)\n", ret);
80 ok (pjBitsDst[0] == 0xCA, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]);
81
82 pjBitsDst[0] = 0x00;
83 pjBitsSrc[0] = 0xFF;
84 pjBitsMsk[0] = 0xF0;
85 ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000));
86 ok(ret == 1, "MaskBlt failed (%d)\n", ret);
87 ok (pjBitsDst[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]);
88
89 }
90
91 START_TEST(MaskBlt)
92 {
93 Test_MaskBlt_1bpp();
94 }
95