1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for CreateDIBPatternBrush 5 * PROGRAMMERS: Timo Kreuzer 6 */ 7 8 #include "precomp.h" 9 10 #include "init.h" 11 12 /* New color use parameter. See support.microsoft.com/kb/kbview/108497 */ 13 #define DIB_PAL_INDICES 2 14 15 void Test_CreateDIBPatternBrush() 16 { 17 18 } 19 20 void Test_CreateDIBPatternBrushPt() 21 { 22 struct 23 { 24 BITMAPINFOHEADER bmiHeader; 25 WORD wColors[4]; 26 BYTE ajBuffer[16]; 27 } PackedDIB = 28 { 29 {sizeof(BITMAPINFOHEADER), 4, -4, 1, 8, BI_RGB, 0, 1, 1, 4, 0}, 30 {0, 1, 2, 7}, 31 {0,1,2,3, 1,2,3,0, 2,3,0,1, 3,0,1,2}, 32 }; 33 HBRUSH hbr, hbrOld; 34 HPALETTE hpalOld; 35 LOGBRUSH logbrush; 36 37 SetLastError(0); 38 ok_hdl(CreateDIBPatternBrushPt(NULL, 0), NULL); 39 ok_hdl(CreateDIBPatternBrushPt(NULL, DIB_PAL_COLORS), NULL); 40 ok_hdl(CreateDIBPatternBrushPt(NULL, 2), NULL); 41 ok_hdl(CreateDIBPatternBrushPt(NULL, 3), NULL); 42 ok_err(0); 43 44 hbr = CreateDIBPatternBrushPt(&PackedDIB, 0); 45 ok(hbr != 0, "Expected success\n"); 46 DeleteObject(hbr); 47 hbr = CreateDIBPatternBrushPt(&PackedDIB, 2); 48 ok(hbr != 0, "Expected success\n"); 49 DeleteObject(hbr); 50 51 SetLastError(0); 52 hbr = CreateDIBPatternBrushPt(&PackedDIB, 3); 53 ok(hbr == 0, "Expected failure\n"); 54 ok_err(ERROR_INVALID_PARAMETER); 55 SetLastError(0); 56 hbr = CreateDIBPatternBrushPt(&PackedDIB, 10); 57 ok(hbr == 0, "Expected failure\n"); 58 ok_err(ERROR_INVALID_PARAMETER); 59 60 /* Create a DIB brush with palette indices */ 61 hbr = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_COLORS); 62 ok(hbr != 0, "CreateDIBPatternBrushPt failed, skipping tests.\n"); 63 if (!hbr) return; 64 65 /* Check the logbrush */ 66 ok(GetObject(hbr, sizeof(logbrush), &logbrush), "GetObject() failed\n"); 67 ok_int(logbrush.lbStyle, BS_DIBPATTERN); 68 ok_hex(logbrush.lbColor, 0); 69 ok(logbrush.lbHatch == (ULONG_PTR)&PackedDIB, 70 "invalid lbHatch. Got %p, expected %p\n", (PVOID)logbrush.lbHatch, &PackedDIB); 71 72 /* Select the brush into the dc */ 73 hbrOld = SelectObject(ghdcDIB32, hbr); 74 75 /* Copy it on the dib section */ 76 ok_long(PatBlt(ghdcDIB32, 0, 0, 4, 4, PATCOPY), 1); 77 ok_long((*gpDIB32)[0][0], 0x000000); // 0 78 ok_long((*gpDIB32)[0][1], 0x800000); // 1 79 ok_long((*gpDIB32)[0][2], 0x008000); // 2 80 ok_long((*gpDIB32)[0][3], 0xc0c0c0); // 7 81 82 /* Select a logical palette into the DC */ 83 hpalOld = SelectPalette(ghdcDIB32, ghpal, FALSE); 84 ok(hpalOld != 0, "Expected success, error %ld\n", GetLastError()); 85 86 /* Copy it on the dib section */ 87 ok_long(PatBlt(ghdcDIB32, 0, 0, 4, 4, PATCOPY), 1); 88 ok_long((*gpDIB32)[0][0], 0x102030); // 0 89 ok_long((*gpDIB32)[0][1], 0x203040); // 1 90 ok_long((*gpDIB32)[0][2], 0x304050); // 2 91 ok_long((*gpDIB32)[0][3], 0x8090a0); // 7 92 93 /* Select back old palette and destroy the DIB data */ 94 SelectPalette(ghdcDIB32, hpalOld, FALSE); 95 memset(gpDIB32, 0x77, sizeof(*gpDIB32)); 96 97 /* Copy it on the dib section */ 98 ok_long(PatBlt(ghdcDIB32, 0, 0, 4, 4, PATCOPY), 1); 99 ok_long((*gpDIB32)[0][0], 0x000000); // 0 100 ok_long((*gpDIB32)[0][1], 0x800000); // 1 101 ok_long((*gpDIB32)[0][2], 0x008000); // 2 102 ok_long((*gpDIB32)[0][3], 0xc0c0c0); // 7 103 104 SelectObject(ghdcDIB32, hbrOld); 105 DeleteObject(hbr); 106 107 /* Set some different values */ 108 PackedDIB.ajBuffer[0] = 3; 109 PackedDIB.ajBuffer[1] = 2; 110 PackedDIB.ajBuffer[2] = 1; 111 PackedDIB.ajBuffer[3] = 0; 112 113 /* Create a DIB brush with DIB_PAL_INDICES */ 114 hbr = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_INDICES); 115 ok(hbr != 0, "CreateSolidBrush failed, skipping tests.\n"); 116 if (!hbr) return; 117 118 /* Check the logbrush */ 119 ok(GetObject(hbr, sizeof(logbrush), &logbrush), "GetObject() failed\n"); 120 ok_int(logbrush.lbStyle, BS_DIBPATTERN); 121 ok_hex(logbrush.lbColor, 0); 122 ok(logbrush.lbHatch == (ULONG_PTR)&PackedDIB, 123 "invalid lbHatch. Got %p, expected %p\n", (PVOID)logbrush.lbHatch, &PackedDIB); 124 125 /* Select the brush into the dc */ 126 hbrOld = SelectObject(ghdcDIB32, hbr); 127 ok(hbrOld != 0, "CreateSolidBrush failed, skipping tests.\n"); 128 129 /* Copy it on a dib section */ 130 memset(gpDIB32, 0x77, sizeof(*gpDIB32)); 131 ok_long(PatBlt(ghdcDIB32, 0, 0, 4, 4, PATCOPY), 1); 132 ok_long((*gpDIB32)[0][0], 0x77777777); 133 ok_long((*gpDIB32)[0][1], 0x77777777); 134 ok_long((*gpDIB32)[0][2], 0x77777777); 135 ok_long((*gpDIB32)[0][3], 0x77777777); 136 137 /* Select a logical palette into the DC */ 138 hpalOld = SelectPalette(ghdcDIB32, ghpal, FALSE); 139 ok(hpalOld != 0, "Expected success, error %ld\n", GetLastError()); 140 141 /* Copy it on a dib section */ 142 ok_long(PatBlt(ghdcDIB32, 0, 0, 4, 4, PATCOPY), 1); 143 ok_long((*gpDIB32)[0][0], 0x77777777); 144 ok_long((*gpDIB32)[0][1], 0x77777777); 145 ok_long((*gpDIB32)[0][2], 0x77777777); 146 ok_long((*gpDIB32)[0][3], 0x77777777); 147 148 SelectPalette(ghdcDIB32, hpalOld, FALSE); 149 SelectObject(ghdcDIB32, hbrOld); 150 DeleteObject(hbr); 151 152 } 153 154 void Test_CreateDIBPatternBrushPt_RLE8() 155 { 156 struct 157 { 158 BITMAPINFOHEADER bmiHeader; 159 WORD wColors[4]; 160 BYTE ajBuffer[20]; 161 } PackedDIB = 162 { 163 {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RLE8, 20, 1, 1, 4, 0}, 164 {0, 1, 2, 7}, 165 {4,0, 0,2,0,1,0,2,3,1, 2,1, 2,2, 1,3,1,0,1,2, }, 166 }; 167 HBRUSH hbr; 168 169 HDC hdc = CreateCompatibleDC(0); 170 HBITMAP hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS); 171 ok(hbmp != 0, "CreateDIBitmap failed, skipping tests.\n"); 172 173 /* Create a DIB brush with palette indices */ 174 hbr = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_COLORS); 175 ok(hbr == 0, "CreateDIBPatternBrushPt should fail.\n"); 176 177 178 } 179 180 181 START_TEST(CreateDIBPatternBrush) 182 { 183 InitStuff(); 184 185 Test_CreateDIBPatternBrush(); 186 Test_CreateDIBPatternBrushPt(); 187 //Test_CreateDIBPatternBrushPt_RLE8(); broken 188 } 189 190