4 * Copyright 2011 Huw Davies
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
31 #include "wine/test.h"
33 static HCRYPTPROV crypt_prov
;
34 static BOOL (WINAPI
*pGdiAlphaBlend
)(HDC
,int,int,int,int,HDC
,int,int,int,int,BLENDFUNCTION
);
35 static DWORD (WINAPI
*pSetLayout
)(HDC hdc
, DWORD layout
);
37 static const DWORD rop3
[256] =
39 0x000042, 0x010289, 0x020C89, 0x0300AA, 0x040C88, 0x0500A9, 0x060865, 0x0702C5,
40 0x080F08, 0x090245, 0x0A0329, 0x0B0B2A, 0x0C0324, 0x0D0B25, 0x0E08A5, 0x0F0001,
41 0x100C85, 0x1100A6, 0x120868, 0x1302C8, 0x140869, 0x1502C9, 0x165CCA, 0x171D54,
42 0x180D59, 0x191CC8, 0x1A06C5, 0x1B0768, 0x1C06CA, 0x1D0766, 0x1E01A5, 0x1F0385,
43 0x200F09, 0x210248, 0x220326, 0x230B24, 0x240D55, 0x251CC5, 0x2606C8, 0x271868,
44 0x280369, 0x2916CA, 0x2A0CC9, 0x2B1D58, 0x2C0784, 0x2D060A, 0x2E064A, 0x2F0E2A,
45 0x30032A, 0x310B28, 0x320688, 0x330008, 0x3406C4, 0x351864, 0x3601A8, 0x370388,
46 0x38078A, 0x390604, 0x3A0644, 0x3B0E24, 0x3C004A, 0x3D18A4, 0x3E1B24, 0x3F00EA,
47 0x400F0A, 0x410249, 0x420D5D, 0x431CC4, 0x440328, 0x450B29, 0x4606C6, 0x47076A,
48 0x480368, 0x4916C5, 0x4A0789, 0x4B0605, 0x4C0CC8, 0x4D1954, 0x4E0645, 0x4F0E25,
49 0x500325, 0x510B26, 0x5206C9, 0x530764, 0x5408A9, 0x550009, 0x5601A9, 0x570389,
50 0x580785, 0x590609, 0x5A0049, 0x5B18A9, 0x5C0649, 0x5D0E29, 0x5E1B29, 0x5F00E9,
51 0x600365, 0x6116C6, 0x620786, 0x630608, 0x640788, 0x650606, 0x660046, 0x6718A8,
52 0x6858A6, 0x690145, 0x6A01E9, 0x6B178A, 0x6C01E8, 0x6D1785, 0x6E1E28, 0x6F0C65,
53 0x700CC5, 0x711D5C, 0x720648, 0x730E28, 0x740646, 0x750E26, 0x761B28, 0x7700E6,
54 0x7801E5, 0x791786, 0x7A1E29, 0x7B0C68, 0x7C1E24, 0x7D0C69, 0x7E0955, 0x7F03C9,
55 0x8003E9, 0x810975, 0x820C49, 0x831E04, 0x840C48, 0x851E05, 0x8617A6, 0x8701C5,
56 0x8800C6, 0x891B08, 0x8A0E06, 0x8B0666, 0x8C0E08, 0x8D0668, 0x8E1D7C, 0x8F0CE5,
57 0x900C45, 0x911E08, 0x9217A9, 0x9301C4, 0x9417AA, 0x9501C9, 0x960169, 0x97588A,
58 0x981888, 0x990066, 0x9A0709, 0x9B07A8, 0x9C0704, 0x9D07A6, 0x9E16E6, 0x9F0345,
59 0xA000C9, 0xA11B05, 0xA20E09, 0xA30669, 0xA41885, 0xA50065, 0xA60706, 0xA707A5,
60 0xA803A9, 0xA90189, 0xAA0029, 0xAB0889, 0xAC0744, 0xAD06E9, 0xAE0B06, 0xAF0229,
61 0xB00E05, 0xB10665, 0xB21974, 0xB30CE8, 0xB4070A, 0xB507A9, 0xB616E9, 0xB70348,
62 0xB8074A, 0xB906E6, 0xBA0B09, 0xBB0226, 0xBC1CE4, 0xBD0D7D, 0xBE0269, 0xBF08C9,
63 0xC000CA, 0xC11B04, 0xC21884, 0xC3006A, 0xC40E04, 0xC50664, 0xC60708, 0xC707AA,
64 0xC803A8, 0xC90184, 0xCA0749, 0xCB06E4, 0xCC0020, 0xCD0888, 0xCE0B08, 0xCF0224,
65 0xD00E0A, 0xD1066A, 0xD20705, 0xD307A4, 0xD41D78, 0xD50CE9, 0xD616EA, 0xD70349,
66 0xD80745, 0xD906E8, 0xDA1CE9, 0xDB0D75, 0xDC0B04, 0xDD0228, 0xDE0268, 0xDF08C8,
67 0xE003A5, 0xE10185, 0xE20746, 0xE306EA, 0xE40748, 0xE506E5, 0xE61CE8, 0xE70D79,
68 0xE81D74, 0xE95CE6, 0xEA02E9, 0xEB0849, 0xEC02E8, 0xED0848, 0xEE0086, 0xEF0A08,
69 0xF00021, 0xF10885, 0xF20B05, 0xF3022A, 0xF40B0A, 0xF50225, 0xF60265, 0xF708C5,
70 0xF802E5, 0xF90845, 0xFA0089, 0xFB0A09, 0xFC008A, 0xFD0A0A, 0xFE02A9, 0xFF0062
73 static inline BOOL
rop_uses_src(DWORD rop
)
75 return (((rop
& 0xcc0000) >> 2) != (rop
& 0x330000));
78 static const char *sha1_graphics_a8r8g8b8
[] =
80 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
81 "2426172d9e8fec27d9228088f382ef3c93717da9",
82 "9e8f27ca952cdba01dbf25d07c34e86a7820c012",
83 "664fac17803859a4015c6ae29e5538e314d5c827",
84 "17b2c177bdce5e94433574a928bda5c94a8cdfa5",
85 "fe6cc678fb13a3ead67839481bf22348adc69f52",
86 "d51bd330cec510cdccf5394328bd8e5411901e9e",
87 "df4aebf98d91f11be560dd232123b3ae327303d7",
88 "f2af53dd073a09b1031d0032d28da35c82adc566",
89 "eb5a963a6f7b25533ddfb8915e70865d037bd156",
90 "c387917268455017aa0b28bed73aa6554044bbb3",
91 "dcae44fee010dbf7a107797a503923fd8b1abe2e",
92 "6c530622a025d872a642e8f950867884d7b136cb",
93 "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
94 "b2261353decda2712b83538ab434a49ce21f3172",
95 "35f731c0f6356b8f30651bb3cbe0d922c49deba5",
96 "9b9874c1c1d92afa554137e191d34ea33acc322f",
97 "c311dd74325e8cebfc8529a6d24a6fa4ecb7137e",
98 "d7398de15b2837a58a62a701ca1b3384625afec4",
99 "a78b28472bb7ff480ddedd06b9cf2daa775fa7ae",
100 "5246ef357e7317b9d141a3294d300c195da76cb7",
101 "87f6b6a19f021ca5912d285e14ce2ff9474d79f3",
102 "e2a8eef4aeda3a0f6c950075acba38f1f9e0814d",
103 "8b66f14d51ecdeea12bc993302bb9b7d3ec085a1",
104 "7da9dd3d40d44d92deb9883fb7110443c2d5769a",
105 "e358efb1c11172e40855de620bdb8a8e545cd790",
106 "9e0c2596c6ecb4f1bc97b18ec3ca493d37626608",
107 "58806549380c964e7a53ad54821d2eb86fa5b9ce",
108 "7fc30d3058c235ce39088de0a598b8c7fe7ca61f",
109 "52a6c769c227f2bb1949097c4c87fed5ee0cbcb1",
110 "8a010d4c5af51fcc34d51be3197878782bdf63e7",
111 "c84c2c33e22eb7e5c4a2faad3b3b99a359d77528",
112 "41bcc1f57c60bdec3c4d1e749084a12867f91224",
113 "94645300d6eb51020a7ef8261dee2941cd51b5df",
114 "c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2",
115 "21cdfde38ac7edbb241ec83d82f31286e90c4629",
116 "1fd2f4dcb62f8522171872e43fd4a35041d68100",
117 "68c18db6abfda626cab12d198298d4c39264bfbc",
118 "6b59ae6c20749020ad43175e05110dc33b6a59b5",
119 "39c31de73aafcfcadf0bf414da4495be9de54417",
120 "132949f59bfeb88dc2047e6eaecb8512aea3d9ab",
121 "f6a6d765bf23726329f96020ba8c5e3c0897aafa",
122 "a7aa311cdc6137f15b9ef9cb1a92ac54ec02f058",
123 "e71d6bb9bd38eea5719f8ba57177997910e2d841",
124 "3d2ccbe51408232a04769546b1bdd74f84558a41",
125 "a1fe9aa885584a0f713d7c6f76c89830fbf28563",
126 "d7085333becdec7759a5229e5fe9ba1e11db0c22",
127 "aaf62842bb98d8a2945c4f643baf50afaeea9307",
128 "287b2f2f2fb5a1d7ee4a29b43342103d78a7a8ab",
129 "d7dd4700f49808541bba99244b7eb5840e0a2439",
130 "af99228aa4cfbd1f61bd824db046144a3c6c2ed7",
131 "568f87f0194ca19b69a5b2bcdef795d89c5721ce",
135 static const char *sha1_graphics_a8b8g8r8
[] =
137 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
138 "e0bc877697093ed440e125154e247ca9d65e933c",
139 "c6d7faf5a502299f99d59eef3f7650bd63dbe108",
140 "9d8c05c3ebd786e7d052418e905a80a64bf7853d",
141 "3da12af0a810fd993fa3dbe23328a4fcd2b6c92a",
142 "b91c8f21cc4d7994abc551feff5b6927d267a9db",
143 "d49dd2c6a37e975b6dc3d201ccc217a788b30284",
144 "ca6753f9eb44529cf8c67cd6abcd4ed1ef758904",
145 "18c3ae944e0afb6c43c21cde093ddb22a27611e4",
146 "b753ebb39d90210cc717f57b53dd439f7de6b077",
147 "38c017dd1fff26b492a57e09f3ce2c4370faf225",
148 "94368cea5033b435454daa56d55546310675131e",
149 "bf57a6a37fb107d29ed3d45695919887abcb7902",
150 "3db0f8bcca3d94920aa57be6321202b8c3c08822",
151 "1f1fc165a4dae7ba118ddccb58a279bfe3876b0a",
152 "8e09abb108e137c99527ab4c9bd07d95b9254bbb",
153 "b0178632775d29bec2b16de7b9b8287115c40d0f",
154 "ca7e859647b9498b53fdd92543ad8aea98ff46f3",
155 "3369889a67d6c79a24ee15f7d14374f9995215e4",
156 "473a1fd07df800c87a5d3286b642ace10c61c6af",
157 "10cd25a0ed5cd8f978d7d68236f81d949b938e84",
158 "b8951d2b20518fd129e5113a5f429626893913bf",
159 "4851c5b7d5bc18590e787c0c218a592ef504e738",
160 "9aa506e3df33e0d5298755aa4144e10eb4b5adcf",
161 "abdf003699364fe45fab7dc61e67c606d0063b40",
162 "89abaadff4e68c738cf9251c51e3609564843381",
163 "f6aa3f907f620b9f3493f03cb3b4b292df3a9545",
164 "77d0ad32938147aa4038c1eced232b7b5a5f88f3",
165 "43d36e57b702ce56eb250bf53f1ecc4680990cfe",
166 "fd6e0ebb52710ebcdd8dd69931165c83c4930b41",
167 "71b9756fdfeedce1e6db201176d21a981b881662",
168 "5319528d9af750c172ae62ee85ddb2eaef73b193",
169 "b7ce8aa3c328eedaed7306234ed9bae67708e627",
170 "19b32a0daa91201725b5e13820c343d0a84ff698",
171 "abca6a80a99b05722d2d87ce2a8b94ef1ae549e1",
172 "2ba70994d0b4ce87fdf6fbc33ada11252178061e",
173 "7b4e1d47a03e2cec236d8fb6e2ae89d8ed078f79",
174 "075c4cb50e2cf96ab5d132c9f7bb1c1deb4735bd",
175 "8566c1110ab5cb8f754787b47923c8bff38f790c",
176 "89e90d6159d59886bbbf0c40a7cd01293c3cfda3",
177 "3a598f1eb35c1412b0c131e9d9e36a4aef9534d2",
178 "d01071c44259adc94b89978b7d51a058b6dad665",
179 "e6d33b106bcda374e662d338c57a457dbcaa108a",
180 "27ef47377e88f5ac5ad33b19eae27d56c456ac65",
181 "339908a568f384e1f384a3e1b0dd415779203b02",
182 "88fd743d00bd37d2ed722092146795b044d08a6e",
183 "c0537ec24147e74939219213d864ee113cad9967",
184 "118bf4c5bddc206ba737f7aa8b239940cd1aadc2",
185 "7cb51f6c5f1dae926601986c934533df5f8baa9f",
186 "86c84cc8306975edecc6d4a89a8aff29f59b55a7",
187 "af99228aa4cfbd1f61bd824db046144a3c6c2ed7",
188 "25675c30adfe24d6cae60793b156dfdaa36ac3ba",
192 static const char *sha1_graphics_r10g10b10
[] =
194 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
195 "b340b5d4750dd3dcd95d73c41b2c3a17f799210b",
196 "b1db68f35022c5fd43519ec8e98047e16bc4fff8",
197 "6e1902eb24865e74066fa9f2a7a49e6f9154f62f",
198 "35df9f4b0965fedf7bca36aa4f17b0fa20e2cd03",
199 "5652e1feb7d4f22c8a2721fd141157e0b9ef965e",
200 "22d89d5933f8b9bd60e9b22e42e7f5659269b63d",
201 "0ad27de0c916c073d0d18484fff899bbdb258db7",
202 "7c05ee5a01dad1e187537701a95382f0a3ec28dc",
203 "b00f0b4448be722d1a19ffe33aaaac4df848d397",
204 "7e5ce5c05a54e83890f022ba4e9853e4b254bf0c",
205 "2986b431a0022153e5f875da77cc792e3825ebd5",
206 "ca4b25a5459885ce1e0a36844612087893d425b1",
207 "181bd4616796d89174cedc0332fb320b65aeb0e2",
208 "6c417b1798ee319eeb404efe4aa136ed7ed37966",
209 "9a9f83e2035aa591d18101c919d1fd5b3456b46c",
210 "74ce9f5658cd8aeae4601fe72fcef07d9f75ec26",
211 "536eaaa901d652805a8977ecb2dc73f651094c5b",
212 "b8b1ac11bcc7174c5b23c18cc7919d09a04255c2",
213 "92cddcabf5365eef1e037f488af52b31669d987f",
214 "2c9c4f27bade080a2cd6f9160422762e267c2f5f",
215 "c7ce29d189dc06ba57e64f0cc32202f5a25ba48d",
216 "7ac4cb547c8f4ce5079c95afad9d0e2b0cd76a0e",
217 "d578210815e27fe210eb678a71e6d22ba4b4c196",
218 "c7a027c7079dfcc831ca8bc134a509958273073c",
219 "19cf978596195b848df8709aaf637f83f92b8336",
220 "798a835fe50156eeb478c0a6085b088f53409d52",
221 "86ddf268d854f37e5b478c48792b551b57635db6",
222 "8259d388e02542207b6a08d65d553871ce1c4a09",
223 "faea73ff9436223f8c4ee76ac9861a6609ac4ae4",
224 "66f8d78d4971934794478afee28b3a50e97f1b82",
225 "b8f16334bdced439e1c6fc69704bc95f7b46b147",
226 "63798fb175afef78fa8fe8133d9de97a0cc80651",
227 "5f629ab51719dd0ca5a67d880eb2631f5b598a7b",
228 "1ceb85697f649a62b1753438daa14944af7f450c",
229 "98ce4dbc04eb48fa0f96ef813db5b4dfa1b2dd39",
230 "3addb9ccd8f56fc0825f61b1b5af67d3297f4ded",
231 "f00bac7e18827cfb264fae2e8a0da17b9db18d52",
232 "63c1c6c63e82f3b8bd977a1381b248e05321394d",
233 "ada202d2f526f6995f83412479891c1764b66e5a",
234 "68348e8f54883f4fe295354b024e291c85f1038f",
235 "07f55f85a5bb70de5841ea4f62a9af3d29d3d94b",
236 "e9167564031ead3459eee6a3ebb2f58f100d931f",
237 "d39315a1399639f6d4305a342c9ccf02a463b0dd",
238 "46196f50297260df2863e2fa76d2dfcf72006c23",
239 "0790585dfaef94f912b1ee81477d4ac448708708",
240 "589fb8a85d924ad19ed78409ae89475ba479c30a",
241 "43d67bc61ef54014b022891e5c024fc24b1fe797",
242 "e8783644428b637adbe80bcd084a33428cb69983",
243 "fc0c32afb719295f28bcfef22803bef94f798e20",
244 "36f6db4fbe2a1630a7597d3a446f2902755c96ef",
245 "d3f08946300e1700865042aed121870e292d1095",
249 static const char *sha1_graphics_r6g6b6
[] =
251 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
252 "a1adb32e70188a00f82fe58156b4da74f3ef7a0a",
253 "5b9dab3d8411afb25fbbeba0313db526815ac189",
254 "6415f551e28e1b38b2d721f0a9e003b7d215f6b2",
255 "2028d1b0d1acef35dc07027135023f35fb9746b9",
256 "378713720dcb5aadb730435ad0989a68ab189114",
257 "084152773feb01a85df6006f2f4f288a1442d37a",
258 "97b824953f60fc9a91028045baacbe7b7dc82b14",
259 "f33b1931f392bd09b3494efc23cf7d0ed3071014",
260 "287d755448e72e29e4812193e2b6f8098a214d82",
261 "4059d295aa05ace77853d7ee3d74305cdcbec9f5",
262 "2557ebd4fdacc0e5bcce3dae88a46dd247654ea1",
263 "e51bcf80211cd06e7d10225534b7a79b5454be27",
264 "9bf91a547f47b29bf370e9b60eae7cd6ce987617",
265 "0b94e0a5b739ab0020130646522e53da35a149ad",
266 "eab6e532845dfd5dc2701ef90669a5f7b63e9539",
267 "90deb2e2502186b3c62a58ec9b1c9d2b7b4089c1",
268 "a4e451f76a77bbc3e224a41e9b4fa78cb841a8af",
269 "084607a5c99a84140d93db57d1b0f3a0f51afdac",
270 "2128157e601ef0d6b3636b7387d3b28e876de728",
271 "8bdcdcd463f0052279d070ac763757f4db975483",
272 "9ea0ad22d7b61598fe36e9c942242e8e07e32edb",
273 "c39a25a61c4eade48dea62a97c9fb8714c06a8af",
274 "66b130f83381957cfc4763558c5f5cddf2e3b564",
275 "d548135ce2320499277ce12b80bc35004f8a9787",
276 "85a4f3f1b4b0a170198f1bb5d225fcf77887665e",
277 "1906ddfd829e735af49245171f8eb7673295d399",
278 "971a0b786d5bccb1bfb9cbb054740e4eb36f9b7a",
279 "e2896035f178b3d20e4f4d1accb1b3d1b4028865",
280 "defd95a10d44cad6e736542920b74efd53e9e7eb",
281 "eaccd012c0fc46e79cae1997ef101979e5654d8d",
282 "3f11a735e52030aa3d0f024d83803698293d10e5",
283 "82f45c5a34fbb9e36d947a876834d33a1f69719c",
284 "3d27002f4fe3c943468b7e3ef6985962c41ac8dc",
285 "3231c4d87faefb7ec5bd377613969c05b70343fc",
286 "00394e438e9edde978e88602c9ad2a572e965bf6",
287 "e760be69cb37c7be35d5968d7a294e1fd49d4f66",
288 "996fb708ddc4b94eb8d1585bd83a5c8a1e2633ba",
289 "caa39eb482e8fc2e00f1c6737735c023ac9363ef",
290 "c1250ff2b67e6d2a8baccc5c93f8f5ad933c5c4f",
291 "3d6cf3753390a05504b1f50302f767df443f0f40",
292 "b7cf1bafe002673ae58ff50feea61ee32a1ae10a",
293 "da9e896a3a98b330980152b2e4a43cb6e686c730",
294 "0a613357e1e8ec8ff1ad956e46e527a05cab8500",
295 "bdd8ed3ca3ad107b43731ec253ecaa34750a10de",
296 "47499ad13b719de18c59c2bc9b38ed578db50b95",
297 "643e82ac67ab2b0c034a3fcfa498b072a5f2be5c",
298 "cd01f2c0a63b2229d4467d2f874d58edca32b3d4",
299 "94b54f1da5212b3f3a1195eda5ea927e160bc89d",
300 "49341c297a887186bd47d7465d827ab3147f05e3",
301 "325279e76367200d3fd7194d81c09fd139988ece",
302 "c3def160a1e847605ff0fc7edd30397fa90635a0",
306 static const char *sha1_graphics_24
[] =
308 "e993b15c9bd14fb45a15310450b7083c44e42665",
309 "edbd7bab3d957fbc85e89612197cf918f5f5af20",
310 "6a7efb3b6e0b49336df1bd2937ca09a11d976531",
311 "236eb5ca9da70ec7cc719cd2fd291bab14000257",
312 "f98023c7cd8c068f2d7a77ce3600004b90ea12d6",
313 "5c4cb9cea2226fc671bb4a11f8253343ee94bb4b",
314 "fd4be592483623dbc800fe28210a1f0daa71999b",
315 "788b8de98c47974fa9f232a6042ae4ca546ddb7d",
316 "a8772e6c44ba633fb384a7c4b50b435f1406107e",
317 "883bc8f305c602edca785e21cd00f488583fb13f",
318 "3bac4e80993f49dc3926e30524115fca9d7a8026",
319 "91369e35be29059a0665782541db4c8b324c6bb2",
320 "0fa8cf332a56bb6d7e14e85861fdd60f51d70501",
321 "593d694cdcc8349b3bfc8257041dbcb27e61da45",
322 "1036b91d93e31cd1d4740d0c8642e115e5a38188",
323 "1898073cdb35ca4d2b21bba933ac16a0b4297317",
324 "5068bff794553cf5a3145ae407c9a2984357844c",
325 "413a7989969c229dee4ab1798362f32f96cf0a10",
326 "0bb222e540b82720d4971e4a2fc626899af03e03",
327 "adc20832d8c43f1cf372d8392535492013cd2306",
328 "45649794dcbcabda487f66f7a80fc1bec79047a1",
329 "367c2dc1e91ff9ea0e984d6fb3000cfb4e0ae7e9",
330 "b4df692ac70a5f9f303270df4641ab014c6cbf46",
331 "8bc3128ba47891366fd7b02fde7ca19100e64b9f",
332 "e649e00efe7fea1eb8b17f7867fe089e5270c44b",
333 "a0bffbbfb0adf6f188479c88da04e25d76ab4822",
334 "92a1ab214dd8027c407814420449119466c92840",
335 "b58f19c1800344a2b8e017eb784705bdb2bd8450",
336 "5747a6d5c6ce79731c55e8cf33f7da3025cd35fd",
337 "955390669afed2369b15b32fa519f2f921cdf1a0",
338 "201906f7d763b930a98c97f8eeab417f2b65e723",
339 "5313357d50c40c05a3b3a83d0d2013a138c955a1",
340 "701c5af1d0c28294ce7d804b5697643c430d22a0",
341 "b0a959745b2db1d9f449e68e4479a4f36301879c",
342 "63f764b9bd2f4876ab1ee0f3c0eb55b5a7de5212",
343 "e171f6ec77bca91d6b8559911bce296c0bac469e",
344 "9725669042ef68acb408404d196496d10340bb5a",
345 "26e7e1c300ba0c5aaaef03eeb71d529f6def9289",
346 "b1f602d2a74095cc0115ae2ae07b642498e6c0fc",
347 "03d5eb8e3a6662e6dc183f88ee2f285065fc9c51",
348 "f4c312f9a37ddc54a27f6b1421dab1ce0cec0c27",
349 "0f79500eda467cd3cbc220abdd37b5dba695d654",
350 "8d4e3e9d81cc30aaad555ed9e27aed7c615de630",
351 "84c43a3cbd7d8c1ac9a0e9b6f07620158079b278",
352 "7d479beeb6758c164566638b5c873c188d6a91e7",
353 "80086808fca03e757d812e31d1ae576bf90dac9d",
354 "9560096f1b85ae6d939d736165c44df00a47c424",
355 "1015e0217ea13eaa62c7666b8b81aafd75f8f610",
356 "93e1aec608e037af3bfb7bd32dde446abe4eea11",
357 "b25ba91487ec945410deb2b51bc1156890c032a8",
358 "d347ca5c6c4b6a61389247c3b6f61564033e8c25",
359 "ee315634ed92da3a32c2675ecd1b369471c60936",
363 static const char *sha1_graphics_r5g5b5
[] =
365 "2a2ab8b3c019e70b788ade028b0e9e53ffc529ae",
366 "847005cf7371f511bcc837251cde07b1796f6113",
367 "a8f75743a930843ec14d516cd048b6e0468e5d89",
368 "d094f51ce9b9daa9c1d9594ea88be2a2db651459",
369 "cf3928e240c9149788e1635b115a4e5baea0dd8f",
370 "a9034a905daa91757b4f63345c0e40638cd53ca8",
371 "15ee915d989e49bb9bab5b834d8f355bd067cd8f",
372 "99474fecf11df7b7035c35be6b8b697be9889418",
373 "cbc2898717f97ebb07c0c7cc04abde936dc5b584",
374 "29c896b591fdf4ddd23e5c0da1818c37e4686d94",
375 "4b5b275d33c1ebfe5bdc61df2ad125e865b800fa",
376 "92df731fa1f89550d9d4f7ea36c13f2e57c4b02a",
377 "420e39ff3bdd04c4b6cc2c98e99cb7993c7a0de5",
378 "1fabf0fdd046857b1974e31c1c1764fa9d1a762f",
379 "449092689226a1172b6086ba1181d6b6d6499f26",
380 "1a92a60f190d33ef06d9decb56fd3fdd33f3af03",
381 "e61f5978c2e28c0c6d8f5eefe0f840c975586efc",
382 "897d16f4d6a6ddad685d23ed7828d4f676539b75",
383 "9d21bcfdeaf1ca5d47eb823bdefc24d7a95f4f56",
384 "6daaf945a955928c5c124c880522ca4634fb2343",
385 "12a288390d16e1efa99d4185301de48a4d433b14",
386 "ea92af2538b76f41a3a03eaa11ac395c9b6197c4",
387 "3a50ce21b3563a604b4fc9f247a30f5a981f1ba6",
388 "d7d97e28ed316f6596c737eb83baa5948d86b673",
389 "ecc2991277d7314f55b00e0f284ae3703aeef81e",
390 "656bf3b7121bcd620a0a3ad488f0d66604824577",
391 "d7d8493b5fa7a3a8323d6ac84245093a79f052c1",
392 "df5dafe96e528c2cc7fd11e4934e298f53cec34b",
393 "a49530722328ae88fd765792ac0c657efbcce75d",
394 "aa46aa2226e3121eaefa9d0836418e0b69262d69",
395 "333f3f2cf3ff15736d59f92a33c45323d3987d6d",
396 "a6fd83542c3826132e88d3f5e304d604c0056fad",
397 "a8d6a5285a927ba3a3be34b06a06c70a20d4c1b3",
398 "e428d213ad02651287894f093413949dcb369208",
399 "7df915bedcc5951a1b6f828490f7dbb93212e835",
400 "645dc251d205139282b17eb7bece1055fff3bcd0",
401 "76215275593631f5900aad3616d725733dc39493",
402 "81655a550703849a616d4a16504bb9c6f999285f",
403 "573d65665d20f00d36d9782ae2b89772140524ab",
404 "619414c1b33ac60cb0c0de61df86245d472259b0",
405 "c3d4a1425e17de9e05e3f6dfc6a24c26bfd5ee12",
406 "2a66dae03890ff791eabb982949435adb19af02b",
407 "24ac219478ba406f30794550690486b14cbac5e8",
408 "2b28d20690dc92374ebecb5508f8fdc6c7581790",
409 "db8c34882ddd46716d14bbf569d530f80db65ed4",
410 "6c652ecce55e71fee16bc1c9b2c5ae4161bdd2ea",
411 "9b02173f424c098ea0f4cc5db9eb65f69263d127",
412 "a92942269911a88793b3460b6f2a2cd56e48eec1",
413 "059db9f0426b371e464ef3d30f1a4f4aa599e101",
414 "a52d6ceee5c2a04b4e059c0d49337a997cc17e40",
415 "aa4a0a4b7f2697aaf270c89874631974bd9d7183",
416 "585061e403d9cac1603a38af420efe87338f381a",
417 "8f447a3820c83662086dfa836da2205b0130fd5f",
418 "3772003c7fb420003512d0c437b3659d96d89ce4",
419 "dab47c9dc149e570045d699598b14a613bf319b3",
420 "2daca4d26a086ed34894693be0b0374402232809",
424 static const char *sha1_graphics_r4g4b4
[] =
426 "2a2ab8b3c019e70b788ade028b0e9e53ffc529ae",
427 "cfa0ab83ee93283ad914c3748f0532da1697af1d",
428 "8bd18697d1ef27492805667a0bc956343ac08667",
429 "e8501c830321584474654f90e40eaf27dc21e6a8",
430 "d95ab10fcfb8447b41742e89f1ae8cd297a32fc4",
431 "821177710961d2cb5f7e7dfc0e06e767b6042753",
432 "667124365ffadeea1d8791bedda77a0c7b898de8",
433 "c9f23e684b600dea17575b4b17175fbd9106c3a9",
434 "7678876e50eae35d1eaa096aae25afaa0b864bf3",
435 "fb52b0c373a5f2a60b981604b120962942d2447a",
436 "5ab8dd07436681d762fa04ad7c6d71291c488924",
437 "0167981d9e1490a2ebd396ff7582f0943aa8e1b8",
438 "115a6bd382410a4a1d3c1fa71d8bf02536863e38",
439 "65c6d1228e3b6d63d42647f14217bc1658b70d9a",
440 "25fcb75aa687aac35b8f72640889fe92413e00c5",
441 "3bddf9d53e89560b083302b146cd33791b13d941",
442 "a81504498c7a7bb46340ce74476a42f70f2730b1",
443 "e61a4f2657a444d8c49f84fb944f9f847667bf2b",
444 "32b6e0aa79b7e96cd0ab2da167f6463c011023a8",
445 "1d283aa4d2b2114f7809fe59357d590c7c779aa7",
446 "29640e2ddd2d3016da14507c3ce9b2ce32f39bb4",
447 "57ebf8becac1524543da120e88e9cc57ecfdec49",
448 "d591232bbc2592462c819a9486750f64180518fd",
449 "0e183a4c30b3da345129cffe33fe0fc593d8666b",
450 "f14d9a4bd8a365b7c8f068a0dad481b6eb2b178b",
451 "8933450132bf949ba4bc28626968425b5ed2867d",
452 "9928a8f28a66c00069a124f7171b248817005763",
453 "e4a9dcc3e565cd3a6b7087dd1433f3898bb9cdb2",
454 "eca4f9b16b3bddfd0735fdd792e0ccaadfb9ba49",
455 "233e588cf660e2c9b552cf02065cf63fa6655864",
456 "0740ff74dcd259d9a644ba51ad77ff0d40348951",
457 "a3345acaf272f2e288626906e3056cd0ced70499",
458 "957a86fbe8a96dd068db65e4e624a52bcc84af46",
459 "13b0f240054dc57ba0e2dfde74048496304a2c7f",
460 "51ef267eb9c15487c9430f505e8a6c929eb2170c",
461 "1b593d8e031d3b37fecf6f1df5a8f96c8e8bfef8",
462 "9dd123938b0a02601d8d458ecbd6535ddefea724",
463 "815a1e4fc7f3a00c2990c150e87eba0b13f66811",
464 "75ae8c80af4356a1a5eebde6608fbc31e8a95372",
465 "b89ae8de2d975b8adb263ace66fd953d29165a8b",
466 "e901ab4b20bc87370609d7ba1f21aa08abd9eced",
467 "e9105c6ed8355519e0cf2d2217ed7af43cec8ba0",
468 "3cbf5fffdd73f9639f3eb34ec1ab3055bc8618fb",
469 "8e2e70ade90711c4ac01352aa0373fce36ff5dc0",
470 "8c40d6d8e0c696c31f04c896e492a2a38703d870",
471 "e13c821c236ea0b67cca64c9da7be15e88fc712f",
472 "9af4907a8144458a73dbb7471784f8c3d9aeffcf",
473 "e4731b63d41f6b51e30752ea52d85c4a2938731b",
474 "f0acb3cfcda62e95bee5f7bc8830ffeb3dd7e5a7",
475 "07b10c3f191d0a93e5e5694aae37dcad407e10f5",
476 "f7900e60347029876ba55e8f0c4c02e89deb36b6",
480 static const char *sha1_graphics_8_color
[] =
482 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
483 "e313bb57f699587b0bae2f17f5da5d977e6f2a61",
484 "49024d6cbdf1614327dfda9eda17675e76805f7e",
485 "63ba8ab7e7996857d52d4c2b995cfcd304daf25f",
486 "92295ae66712df050cfd6cc9fd2fd4101784c5fc",
487 "84d85009d35ae10abbc435f3913422544105cea2",
488 "eae349c2a481d6e8bfdf9a7f4f49384a14716a5f",
489 "6c51068ca1db36d948eaa34aed4a44d2cd1e8b32",
490 "f3aa8d89430748178952de56643069d80b40aad6",
491 "bd5fed74e2f1b097ef4c20bd30edfc6ee11eeccd",
492 "0546b87bf5fbe1b8168eed5d4a20649be92734a1",
493 "52b1363e821bf604d9df260bfa97e26d428c33fd",
494 "108732d9909ee5f3542a9b90b3ad96ec82446ab9",
495 "06c76c53dcf3ba5e213d483e27d841404c9aa90a",
496 "ae8fcdbdd44ba58e9bd46a4c56eb54f37483913c",
497 "89711289be6d5c55734878410e4923d5cca9aca9",
498 "8355caf57d51ad4e14275943088392e37dc75d33",
499 "5992b2e331a0e0f752598cc8d083cbecb5f4dde6",
500 "6f0570da9dea7f043f678088f8362ee458cd79fa",
501 "940db409d4c3e5640275724f9e5f7c1a0d2e21b2",
502 "242ce86967ea62fa69c1e6f597ccbcf2f0b1602c",
503 "5092b22af85a08f10a2899888bb9d552f25f828e",
504 "e91973be2651eeef568700463652838d8cbba976",
505 "1df851515ecf46df5c2d3279535c1763f72353dd",
506 "b68922915ebc2797d58deecf983f7d0cf9a5efbd",
507 "359bd76088a965bb0cee7c44800bc46b2638807e",
508 "e14e5734b33057b890368f3e9d482d9e5a0358c5",
509 "64205ccaa277e64eeea0c20e99900ac79858ca2c",
510 "2cdee35d43d62da09b4ddfddbd0948ddbb9fc48e",
511 "91f988f575338505ba8a40727865a8d3f2298624",
512 "d2b4557492ebb2e0f640a0a2f6fc3bdc8d8f36f9",
513 "421e8b608378e4f17774dd32ea6446fa0fa16f91",
514 "3b7488731da48635d86be551ab7c8c0f91c78219",
515 "4fd49cb49853ef950fd0b7e2e35718a71c8374c7",
516 "e15a355fc09bfd22267917898e2266168ff410e3",
517 "b9688566bddf18586787c00e68724e51e97dfb72",
518 "5e38e03310f1c66f2052af2a745d8c60515707c5",
519 "f994fb5019bf4c1a96eccf89af599eae0aa6b412",
520 "3a71ad6fef147067641e49a5f69b2454e3a5010d",
521 "ea10eac72830dcae19bcb16a076c2b21d844b5b6",
522 "6376234f542467e5887adfece62f753e998dc19d",
523 "add949d009217ef2b847e34772ba363e4be7b1b8",
524 "28fcf9f7d098c05de632ae38b2fe33b9635ad445",
525 "0b58666deb3615e912896a764e5c6475989e95e4",
526 "bf460cc44c0edee851d72587c8425c3f06a62c55",
527 "ea74c00c45569007383b632d7f1d2adc82645717",
528 "5ac22e1a33b0204fdc7a68d54ee94648e96079a0",
529 "284abed096637c80bb50844e393da9dd4b3f19ac",
530 "9dc776c5ab8256b1301c7d1da60544a9410e6715",
531 "a433c41c05b6db008a4cb2c52a321d027c6be1fe",
532 "46f772c2832b3aad584674db666bd63e48b4f338",
533 "a9f9ca0049235db51ab7359a5fc3d21be42d2aac",
534 "f3dc739da41fb299637c8660e8c46917ddcf87a8",
535 "eae47bf865d932f22a6e59b6fe8d041f220e1fbc",
536 "9ae38bb94c7b4c0c6dfebbee23d1de4db9b77488",
537 "678979a45126a76eb629992cd64734862f53a555",
538 "2f7ba8803604c032cb1a1228bc021f0f1c03e245",
542 static const char *sha1_graphics_8_grayscale
[] =
544 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
545 "df35491dd5038187c05bac06921402ba6d7773a8",
546 "c8cd6d34e011d5f9ca4b1190eec3b416e5e68e53",
547 "66a686ac22cd0ec326f2c97ef473781cabe9690b",
548 "9bddef7b97b8b03569f07011e66ddd67fe82d787",
549 "2a4cea20974bcfb92cf40b05746fc7eb465c4b0f",
550 "0a87689ca33f888f05dbfa21ddec11c069990d8b",
551 "8d0a92e6333e1b99591962e2def9bc9121111cf5",
552 "409c9f29f6fa2e312c8e0b4b3c59acb4d84d8717",
553 "1fbc234c28a8140965ad0fe30b4b799f6681e864",
554 "1fc709d5d3e55d5f96c451c209cd73c59dbfe733",
555 "96b6a32e057d5faeae57086cbb62a8e7b3e6e86f",
556 "aa66ea7c9b7214339858b9fc9bd4720d05e8c843",
557 "114bb377b4e78a1978e1ac09388c48861b5223a3",
558 "8d0a92e6333e1b99591962e2def9bc9121111cf5",
559 "9dc511d6947fe816185cdff93bf0cfe0349b72b4",
560 "eb4c14ee66b012187f5fe6a2ec28b6be956567c8",
561 "216388ddf6b563dd2058a9df65b40b6f72df1715",
562 "ad11e4b6979cf055e3bf1868112a7bef207385a4",
563 "47f72be971bd2d3399dabd018201f4f5075e96fe",
564 "de09d41c9ae4338fbfcfe9f8ed71d343537a6f3d",
565 "f39ab890a2b99d0c31e6e047f2315244972f5ffd",
566 "6e7baf7d328bc2c55366e32967a0db4d2f43ab82",
567 "15b991814d84d6aa252696dd0c6150ef88a8db3f",
568 "1cb52f2a4d17b9b0d8375d016aa8cf0677fcd29a",
569 "9a6cfd68523e40ea1d52847d7747da912cfe2ca9",
570 "82e641ebe47d9f8cc229b82b8315e69e52f812b1",
571 "15db343049e3a9b31addc5d2ffebc3fe91b39c51",
572 "a895daf1f20371d4d1c3f93c070124cc13e341c3",
573 "3ddc872384ed8f9eaef472aa14a1d79a2c3f3b04",
574 "0000000000000000000000000000000000000000",
575 "bd7d8c1cb4b2adc31cf8c7d39a4fa1e3ac7f2545",
576 "33fc8618ce62f5cdd9e06ad61e296f718a99899e",
577 "dcaa7fe030ae4d3029e38ca584047eeb2d17fe10",
578 "6d41e6168662e75baacf74d911d7419d54c8d73c",
579 "2404952157ba1519094a2da6bfbf2b0f1356432d",
580 "24caede65b40815a60b83c4edfa06bdc542388cd",
581 "650a51bedd1af92469d2950eb95220db35f95c6e",
582 "3f43aa11e6fccb747cc13224583fb2f951fee08c",
583 "04cea9753b575ecce8e55357eddfcec10ddfbbea",
584 "6b6f4b97f05e015eb37a5f6aff637235feacd030",
585 "1bd06e4e11929e5e91c3c9f20def639b20e731e8",
586 "d63a6086547e90d2ba84aaebfeae24f3ba0c04f1",
587 "85425940daf119125deb52421b2057acebe6d1cf",
588 "a3db92382cf0a4c7cafe52c27b1f41520aaa677d",
589 "9869b6f088822fb423996f9968e5a931301fc2c3",
590 "cdf63ab4ab32c2e8e27527a9588d0fb525f1c945",
591 "a7f81cf3326fa3608acc13cfce2f573912e9d745",
592 "f2ea92f523f8918b1d514a2d9555dcb4750273b4",
593 "e9c16e43a8f589ae85289c5c3ffea6b22fba1806",
594 "84a4bc0c2c5d36d016da4df95a5d8d6c8ce3ba6f",
595 "f543efc84e638afbaa456e629100f0274de1a35b",
596 "1bd2587399006eed0d46beff397d32081f6bc58e",
597 "f8a571de89ed82ffb9cbc041ce1eacb064be2853",
598 "640a49455acabca6954a7fbb6af4e872af342d11",
599 "589e7911e09332ee090371deae17b0120ff990b5",
600 "a1a941fa270cda48c648553ed4b427e16e96f8e0",
601 "f30a8d9f73ca043c5bfc18d9595e299fc0a39eec",
602 "fb63bbb2f944fb63ed2d7399f07b168740c1034b",
603 "3685c9ae95118a83db3569832c29753276fa1264",
604 "09640bad951c33e7d70a1fced83b1869f65b3fc5",
605 "cb9ea8137eca1450e049879772f5c11a0e11ff0a",
609 static const char *sha1_graphics_8
[] =
611 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
612 "512246d4886ab889a090b167ba194577cb95272e",
613 "921e852d4564cb9e5ac15ff68b5207bebea871d1",
614 "9636b0ebefc443ea11949ccd28f6ca454277dd41",
615 "aa9050da55e6b6957c60b7d603fce539cb5c0048",
616 "e2b93aca15fb1233ac09a713dced1f4cd950b1e4",
617 "3e3a603fc26cc305aa27f88da7d2a3b0073877d8",
618 "390b2bf70daba36310683f46af9cd50b9a061396",
619 "82d21737e9a7247397a6c983a9b6d9a0452dd74d",
620 "2a8460af91675e01cbe9384eb6cd3eb2cb420960",
621 "1af53b1218ee9844fcda891b836d42f6b2f66bd5",
622 "da1cc34a9d9b779fc7849e03e214096026506464",
623 "5ba8f99ca034666effa556748c49a0f5a015125f",
624 "b67ba2f55659c75ac72c1112494461bb3086e1a4",
625 "73e2859ce849f756f954718ce3c90f02e31712b6",
626 "b1dff0f5dd233b44ee568878c5d3f8ae1d80c6d9",
627 "1f27dc1a1316fb7a4a78fe40fcd4bdae3aaad218",
628 "6e375e1485a1e45ac6ab10af49645d5fb2e76dff",
629 "cfc67c325c7cdf96d90af9b3cceb8d0504cbb3b0",
630 "7262364067e03c7fa498af1d59d228d6c63b460e",
631 "5241241a355a667ef0834049adf4218e8b3f16b8",
632 "db22d666690948eb966f75b796c72c7150a5c4b9",
633 "1f13ea0034db4b0ffa4ddcff9664fd892058f9cd",
634 "3caf512cfddfd463d0750cfe3cadb58548eb2ae8",
635 "4e5e7d5fd64818b2b3d3e793c88f603b699d2f0f",
636 "c4efce8f7ed2d380ea5dc6fe1ef8448a27827532",
637 "bdc0a354635b879871077c5b712570e469863c99",
638 "d599bf210423fe3adbb4f1de87d9360de97827d0",
639 "bae7c8b789e4e9b336c03c4daee3bce63fe039d9",
640 "cc01f17928f7780cefd423ea653b072eea723a1b",
641 "c005662a47f14c2f1b7c7fb3b0ef0fc390c6ea6a",
642 "675cde16a6ad2bcd8d7e72780b07a0ccd8d0393a",
643 "ea39ac62ca2f815a1d029340c6465994b6f03cb0",
644 "9a603513cd81acf70cf8b27b0d544e7f672e9d40",
645 "f4a334e69535de74ee5ed54be93a75120a66e54a",
646 "559fd1d15447745527c61fe43a94c6708bff3e39",
647 "995f77f2f53398399f09d1365cb4dfd105764e5c",
648 "61907a6685bba93077da40cfb28cf2ab74552fd2",
649 "122015e5e17c1c317c6e51c0e207826b606a4077",
650 "c21851589a5f8a45ea5f9bb3e72f4f88d0a6697d",
651 "8c609921d4a3ed89a994a75482b27496bf103cf5",
652 "eb2ce16a6ae251f4965135ee776776b5fc02c42c",
653 "66493ee117719e172f327a426af601996025f28c",
654 "acead2745fec0b6c817fa601353bdf2d197b64f7",
655 "a6b858b2d125c159529d3f3ec45b31925a79acff",
656 "1f1379089d7c6e8d733aaa4eaffbe02db6255b61",
657 "d83adc669c0dea0dc4812b93f998514b6f02d805",
658 "9e8ceb7c3cd68e043b6d875c8c84a1e394962412",
659 "9e996fc74eeef53f0a6c31aabb2edce6e103f189",
660 "6b8abd1785304d6531c1e4cc65c1ffcdcb2196a5",
661 "7d1bfff706b0713e53209407889f83a0da26a81d",
662 "31e667c2dbb81dcf81d01cb88f794e88ddb90ff2",
663 "31e667c2dbb81dcf81d01cb88f794e88ddb90ff2",
664 "465d9cd0a77ab4fcf035aa67544b2a26269e0b09",
665 "600d6b2713d5e4c0d90c02660245ed26c7ae3033",
669 static const char *sha1_graphics_4
[] =
671 "fa867e2976a549ecd3b1fa67df54963232fcef8c",
672 "256d742b4da96b373b4fa5663d0ad3b5faab5c8e",
673 "d96d8f4232b930bccd53b903b5efaf8c0bdb16f4",
674 "9401799e6116c35e5f0e5bdca07ea25316757a72",
675 "482ae2b0ef1d64752b5ef11cc7f35a33eb55d07c",
676 "dcfb3e01100b41c0f75a1c5f84b6de6b90138281",
677 "2505598845fa026ea7187582461efbf06cb6904f",
678 "3981a19363beca8f28d32a5928ac296fd22a5296",
679 "01404024ebb2c266d17d734059524d874491650f",
680 "c87bbff3f83b8ec11bb03cfa9bc9ee5166c4c7ef",
681 "f35c5d62853be78c5d39fb2f45200dc262aa8e18",
682 "46e94a55f5f58a6b915078d8ffdc725f53aab516",
683 "665bbbc749a5ffeedc0d62aef0661a5ce845b017",
684 "1f26a01730f67d40ea711a50d9d801bac15a642e",
685 "3b53d24178cfacba53103a44dfd5d072b15a6781",
686 "c52cfd57f26037723d37192722fc3a217f280c9e",
687 "e34da6500cf2e424d980714d92737cf6c31a7bda",
688 "d17f4358ae529f920960ed89e535902ee13b0033",
689 "0f44e12ecd1ea7e39433890443626d4fc35204a4",
690 "eb38683e812fd13dca971ba8f4cfd2b6820d3524",
691 "73bbc83f88f1aaa6df0158b63e70bb3165163163",
692 "0dc2690a5c58a2907a8ab06693ebfab6698172eb",
693 "39c16648cf6c261be71a33cec41867f28e119b94",
694 "26ad5116562e7b58c76a26eaf521e2e40899e944",
695 "1bcc54eaf8e3c2b7c59ecccb23c240181d7ba8b8",
696 "4f827ca6927f15191588456f985bf29d2a3b3c24",
697 "e7de769c3d12ea9dd223bef4881c578823bec67e",
698 "6fb102d020e5554116feefc8482104f3ae2036d2",
699 "ae546ffd30b837afc7dfcb5c9ce4f01d15b35ddc",
700 "20c9eb3276c08fdce35755e349bec94b04929812",
701 "628d837163a25c6520f19c0602383176dbad528e",
702 "b5a12cff7100290ad43f5ed17a321b42de048893",
703 "b672afbeeafb44194a821f0def81a8892872937e",
704 "db0124045882b598feea192186cf7eb7a0387866",
705 "602d91471378fe24a2d0248bd8a92b624f099fea",
706 "e772873b87a0f55ea51a3da323f64bf8814c6703",
707 "21aa1ff238a2d78efed1aa658ac8fe21b1e64daa",
708 "1a579cd280422131c35e907a023ee0e80749b5a4",
709 "bbf027f506cbb80d359bf4892fcb75f816f2e446",
710 "ed44bded6b17df7fe92b191fd810d1aafbd55f52",
711 "a49bcb1ace42d548254d9e96d22088b1fe2e75b4",
712 "e2a21a965dfd0bd09f9270917f681610efc18ce7",
713 "3e411b004a5be84451860c6da6a4a1a482b77862",
714 "3b3d2f18fdc75e938ca43cc2d0b41fa67c1c5d36",
715 "7811c536a6527112b438a6413f3927f2c79086a7",
716 "525ef3615040225752a2fe646ab99ee64e360630",
717 "46760975993f9881b7bbe94123173e6a683d3f25",
718 "df5feb905a31c288008cf5e82d73ac818a160d82",
719 "df5feb905a31c288008cf5e82d73ac818a160d82",
720 "d8af3868c66c7d6dac35ec8ee0317b38a6910bb1",
721 "ec8e2aebfb4a1c28ebcd0e053b9e4d8638b50951",
725 static const char *sha1_graphics_4_grayscale
[] =
727 "fa867e2976a549ecd3b1fa67df54963232fcef8c",
728 "6611ea6cb24bcf34c5f3688d57e2874aecb39c24",
729 "5ab1d3f8f5938c5d20a2fa3237e319077b21e716",
730 "1c201d149c0bd886ff8a427ad513f15a70991174",
731 "44646e67842a4d055bea1fad0434e6e4a0eb5465",
732 "315189097a02024d2eae61d524c4de07a396aee7",
733 "73ac786015dea36ac466a6524dba757d5d238ece",
734 "6e328cc4d53627f034b23706d8bf26afe18512ae",
735 "3c5b90cfeafdc1c99c8c62317d07276fdf66803e",
736 "95e6f509bb1cf9981efc47a0878ab0bd983eb349",
737 "2e1bc3b00e4ecc62b03785533dc0faeeda38d53f",
738 "6448226859cab61a61c95d3ed5ed5f216b1bb120",
739 "7f1cb06597b14edbea03b860aec3cebc4ebc3d62",
740 "ec3879342b5a44f6de6efe946243ae5ade00980d",
741 "6e328cc4d53627f034b23706d8bf26afe18512ae",
742 "51b50968a3a0570d5ed690fe44ba1a78a4d62ce2",
743 "d5bab61f78ac3355aa2e0776b2d5d9d71d61e77b",
744 "fa47c5195405f6a0eefba3e3a60ad463c7ee94c7",
745 "b2bda683edef912957845a33edc055902a801fed",
746 "b067f0421cb2c83b218b8ab6edbede2ff5723b57",
747 "c8de76f9c0900e5f86c7584fe94d5749376b7b49",
748 "43ee3e187dda14b86aef12371041ae70313b5a65",
749 "d4930552a7845111ffd9db57260be1ab97967c06",
750 "afdf41fca7951c6dd6193320de1295f2c68fe52a",
751 "f2f1f331fe6b1b31d7c9ddd37793b375fc01d3d4",
752 "f0af0f1edcb837bdf1535c1f5e9988c21ae9bfd1",
753 "0000000000000000000000000000000000000000",
754 "71c4577baaf35f12f6707b1e2f78a1e8c0d41d0b",
755 "9b7d6b12385bb9e1cd881758aff342bd5427432b",
756 "6fdd5aa022da2a8af6f1d02b6072ebc068b4b600",
757 "643fab30f1a59dc37f1e0f1a6006076fbf90a5fe",
758 "6edbc0b95e9ae3348ce7d12c44f9c8082b5f2aa9",
759 "9c0da52c4ceaa8fdfcff7351328dd520bb57e985",
760 "f8224430462f6a93f85ef33b8aa7299525990708",
761 "1cf93cecc942b41ab8fae21ea18418a6d64873e5",
762 "d58b8760ef01c12e691651c932d683c66fde3654",
763 "94438c82b8812fe81a69d5d1429c5967cdbfed7a",
764 "764ea26f10fe11f7bdb538a26fc33d44b3a95d6d",
765 "94ad53c578f6034dfc5c666e363203cdfb00f2cc",
766 "8cd7b0ba8426db344b4cb8820890603020ed65e9",
767 "ad96132f25ca14e1aeb17c86f8d187febf6401c9",
768 "027b05bc82ce4f897c4bf812610a641547368939",
769 "3f131e855ba1611d8fb0f16a6979f8f56aacc7f3",
770 "ae64d1dc52dcfa8c644f953c4601fa2fbefec37b",
771 "2f3fb1bd8f416198d70e06f6d519571cd5eb4ef4",
772 "cc96ccaf6b99f60a49b03017515f83cba22b4c40",
773 "5eeb56afea8040a8fb18c11f29931b836474126d",
774 "a3405c085fc2f2184bcd0d1edcdcc66927e33659",
775 "f8681c09f1abfc38d31e47622cb8798cd896a00e",
776 "b5ee51cfc73acb59a2f6124509ea236f8fc7f9f7",
777 "d374d4d92c940ae42a9b42c14d744341b68a8c14",
781 static const char *sha1_graphics_1
[] =
783 "23366004515f3bc46796ea505d748f8d0f97fbe1",
784 "ad674a4104c6a1eacaee8f20effdfe31775b4409",
785 "a7cc69f957d7b533a0a330859a143d701daac73c",
786 "a955bf088c5edb129289ce65caace48ec95632e4",
787 "5316d3c558c254479883133cf58cd07ab521d3f0",
788 "fcbfdb5d60716ea05f2d1896fae7a6e7a8249d35",
789 "2c140b39cc8d21358fded8959cd655f03d7f0f89",
790 "121423a38b4ac4743bd516e0a7e88a3863796313",
791 "7c17635c6c7f62dbf8fd4773d0c503358553d2c7",
792 "21d5d9e47bb07de2cf7bc99b7725390d03a6cde6",
793 "f69ee65ea25676429a28eea79b5b9cb9206b8d01",
794 "39ff81f77ef4ee772367ed1a63785987c060126e",
795 "4c686508a994ca4c7a0a73b8c0fe52423c180d9c",
796 "b0cc1f5e244ae0c0835a9866a46abdfcd56d1cb1",
797 "7ddf19df5bbdf4475b6ec1bc042425e382502864",
798 "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
799 "c5ffc59048bf786b5646ad6226cd8633965de9ef",
800 "40fadc2d24c713b04ff96f7dc26e70e85f26c55e",
801 "400a21caa01e015096ee1afcf1b54e7f8ec515bd",
802 "0ff4b49797e30e3555aab45219adf449a9a560ff",
803 "280327328ca940c212ce24fe72e0b00014072767",
804 "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
805 "b85463875f755b85f1464b1b6275912bcbad6c9f",
806 "816f200969feecc788b61dfeecf05b1790984401",
807 "a4964d8bbf80fe785f906bc0f7c5b113242a58fc",
808 "a5d204cc7342d40b765ca042f8668e22601c4ff9",
809 "adb2818f6d3845dd140bc0f9abdbaa89d2a8c3de",
810 "0a76e0121facb103857130bc6e12185ad77fc3fa",
811 "02aede714773d654d0fc2f640afaa133ec718ad5",
812 "13cc63972aee4f6ae27091a8af18de01f1d3a5da",
813 "3bb745ccb08402ce6fac6ee26fb8d7aad2dba27e",
814 "b26699f62661e16a1dc452d24c88ce363a1f2998",
815 "4d95c3d1e170f004c80aa8c52feafb8e0e90760e",
816 "c14832e69ec3585c15987b3d69d5007236fa9814",
817 "e44ea620b0c47125a34193537ab9d219a52ad028",
818 "d1e6091caa4482d3142df3b958606c41ebf4698e",
819 "07c1116d8286fb665a1005de220eadc3d5999aaf",
820 "4afb0649488f6e6f7d3a2b8bf438d82f2c88f4d1",
821 "f2fe295317e795a88edd0b2c52618b8cb0e7f2ce",
822 "ffc78c075d4be66806f6c59180772d5eed963dc0",
823 "c86eeaeed09871dee4b43722ba512d2d3af7f4d0",
824 "24b1a6241c81dbb950cfbe5da6798fd59eb36266",
825 "1007d3b531b4bc3553d4547bc88443fc1f497cf6",
826 "b71ca46be287598f716bb04fac0a52ad139c70db",
827 "6589e48498e30ab036fbfe94d73427b2b1238a69",
828 "4dce919117d2e41df9f5d4d0de14f97ae650046d",
829 "22c2e078f69d73b7a5cb3f7dcbb8fbaa007ef3ac",
830 "be36cda370650e6d5fb0570aeb8ced491d0c2b1c",
831 "4c34cb8e47f9ff4b4348aa2d40cce7cb54d65cb0",
832 "18f4497e43903e8df5b27da4ceebf62b15550a87",
833 "3fa3570a2ebd38042b90f24bd3496233bca5a23d",
834 "2fcd25c2d19a01fa631fd19135d9f28b26b86259",
835 "655cfadeb157233c804d42b58195569c8846e3c1",
836 "65c8811c609203fd424f5ed5f92ca2268a1dca54",
837 "a45b297d709e297584eb0f2985294ec0ab53d8ad",
838 "0d180c37bc26d83a1a11f66168757f3de2493243",
839 "b362ba4790def178c236c0ae7b0093dbba47cf24",
840 "d1d2ecf71a37d9eda58fa09454aa871971428ace",
841 "6672da4e016b6e9de0ca218f8307cce7d48d62c4",
842 "ee22f43ea867228c6ff937d39e1826e285a107e8",
843 "832c3c3afd056e5d1cdfb2f466f27225c4adcc6c",
844 "a2a928de9007d765da496abec8c21b23601f8c45",
845 "28ded40e72d4327b9413571476b167fb28a1f420",
846 "23366004515f3bc46796ea505d748f8d0f97fbe1",
847 "88763f8e8fcf4f78fa864325791a9dd35a0bd279",
848 "013cee26bac8f815eadad4bfc012d9b5d01c3b7f",
852 static const char *dst_format
;
854 static inline DWORD
get_stride(BITMAPINFO
*bmi
)
856 return ((bmi
->bmiHeader
.biBitCount
* bmi
->bmiHeader
.biWidth
+ 31) >> 3) & ~3;
859 static inline DWORD
get_dib_size(BITMAPINFO
*bmi
)
861 return get_stride(bmi
) * abs(bmi
->bmiHeader
.biHeight
);
864 static char *hash_dib(BITMAPINFO
*bmi
, void *bits
)
866 DWORD dib_size
= get_dib_size(bmi
);
870 DWORD hash_size
= sizeof(hash_buf
);
872 static const char *hex
= "0123456789abcdef";
874 if(!crypt_prov
) return NULL
;
876 if(!CryptCreateHash(crypt_prov
, CALG_SHA1
, 0, 0, &hash
)) return NULL
;
878 CryptHashData(hash
, bits
, dib_size
, 0);
880 CryptGetHashParam(hash
, HP_HASHVAL
, NULL
, &hash_size
, 0);
881 if(hash_size
!= sizeof(hash_buf
)) return NULL
;
883 CryptGetHashParam(hash
, HP_HASHVAL
, hash_buf
, &hash_size
, 0);
884 CryptDestroyHash(hash
);
886 buf
= HeapAlloc(GetProcessHeap(), 0, hash_size
* 2 + 1);
888 for(i
= 0; i
< hash_size
; i
++)
890 buf
[i
* 2] = hex
[hash_buf
[i
] >> 4];
891 buf
[i
* 2 + 1] = hex
[hash_buf
[i
] & 0xf];
898 static void compare_hash_broken_todo(BITMAPINFO
*bmi
, BYTE
*bits
, const char ***sha1
, const char *info
, int num_broken
, BOOL todo
)
900 char *hash
= hash_dib(bmi
, bits
);
906 skip("SHA1 hashing unavailable on this platform\n");
910 for(i
= 0; i
<= num_broken
; i
++)
912 if((*sha1
)[i
] == NULL
)
914 ok((*sha1
)[i
] != NULL
, "missing hash, got \"%s\",\n", hash
);
919 ok_cond
= !strcmp(hash
, **sha1
);
921 for(i
= 1; i
<= num_broken
; i
++)
922 ok_cond
= ok_cond
|| broken( !strcmp(hash
, (*sha1
)[i
]) );
925 todo_wine
ok( ok_cond
, "%s: %s: expected hash %s got %s\n",
926 dst_format
, info
, **sha1
, hash
);
928 ok( ok_cond
, "%s: %s: expected hash %s got %s\n",
929 dst_format
, info
, **sha1
, hash
);
931 *sha1
+= num_broken
+ 1;
933 HeapFree(GetProcessHeap(), 0, hash
);
936 static void compare_hash(BITMAPINFO
*bmi
, BYTE
*bits
, const char ***sha1
, const char *info
)
938 compare_hash_broken_todo(bmi
, bits
, sha1
, info
, 0, FALSE
);
941 static const RECT bias_check
[] =
943 {100, 100, 200, 150},
944 {100, 100, 150, 200},
953 static const RECT hline_clips
[] =
955 {120, 120, 140, 120}, /* unclipped */
956 {100, 122, 140, 122}, /* l edgecase */
957 { 99, 124, 140, 124}, /* l edgecase clipped */
958 {120, 126, 200, 126}, /* r edgecase */
959 {120, 128, 201, 128}, /* r edgecase clipped */
960 { 99, 130, 201, 130}, /* l and r clipped */
961 {120, 100, 140, 100}, /* t edgecase */
962 {120, 99, 140, 99}, /* t edgecase clipped */
963 {120, 199, 140, 199}, /* b edgecase */
964 {120, 200, 140, 200}, /* b edgecase clipped */
965 {120, 132, 310, 132}, /* inside two clip rects */
966 { 10, 134, 101, 134}, /* r end on l edgecase */
967 { 10, 136, 100, 136}, /* r end on l edgecase clipped */
968 {199, 138, 220, 138}, /* l end on r edgecase */
969 {200, 140, 220, 140} /* l end on r edgecase clipped */
972 static const RECT vline_clips
[] =
974 {120, 120, 120, 140}, /* unclipped */
975 {100, 120, 100, 140}, /* l edgecase */
976 { 99, 120, 99, 140}, /* l edgecase clipped */
977 {199, 120, 199, 140}, /* r edgecase */
978 {200, 120, 200, 140}, /* r edgecase clipped */
979 {122, 99, 122, 201}, /* t and b clipped */
980 {124, 100, 124, 140}, /* t edgecase */
981 {126, 99, 126, 140}, /* t edgecase clipped */
982 {128, 120, 128, 200}, /* b edgecase */
983 {130, 120, 130, 201}, /* b edgecase clipped */
984 {132, 12, 132, 140}, /* inside two clip rects */
985 {134, 90, 134, 101}, /* b end on t edgecase */
986 {136, 90, 136, 100}, /* b end on t edgecase clipped */
987 {138, 199, 138, 220}, /* t end on b edgecase */
988 {140, 200, 140, 220} /* t end on b edgecase clipped */
991 static const RECT line_clips
[] =
993 { 90, 110, 310, 120},
994 { 90, 120, 295, 130},
995 { 90, 190, 110, 240}, /* totally clipped, moving outcodes */
996 { 90, 130, 100, 135}, /* totally clipped, end pt on l edge */
997 { 90, 132, 101, 137}, /* end pt just inside l edge */
998 {200, 140, 210, 141}, /* totally clipped, start pt on r edge */
999 {199, 142, 210, 143} /* start pt just inside r edge */
1002 static const RECT patblt_clips
[] =
1004 {120, 120, 140, 126}, /* unclipped */
1005 {100, 130, 140, 136}, /* l edgecase */
1006 { 99, 140, 140, 146}, /* l edgecase clipped */
1007 {180, 130, 200, 136}, /* r edgecase */
1008 {180, 140, 201, 146}, /* r edgecase clipped */
1009 {120, 100, 130, 110}, /* t edgecase */
1010 {140, 99, 150, 110}, /* t edgecase clipped */
1011 {120, 180, 130, 200}, /* b edgecase */
1012 {140, 180, 150, 201}, /* b edgecase */
1013 {199, 150, 210, 156}, /* l edge on r edgecase */
1014 {200, 160, 210, 166}, /* l edge on r edgecase clipped */
1015 { 90, 150, 101, 156}, /* r edge on l edgecase */
1016 { 90, 160, 100, 166}, /* r edge on l edgecase clipped */
1017 {160, 90, 166, 101}, /* b edge on t edgecase */
1018 {170, 90, 176, 101}, /* b edge on t edgecase clipped */
1019 {160, 199, 166, 210}, /* t edge on b edgecase */
1020 {170, 200, 176, 210}, /* t edge on b edgecase clipped */
1023 static const RECT rectangles
[] =
1026 {250, 100, 350, 10},
1027 {120, 10, 120, 20}, /* zero width */
1028 {120, 10, 130, 10}, /* zero height */
1029 {120, 40, 121, 41}, /* 1 x 1 */
1030 {130, 50, 132, 52}, /* 2 x 2 */
1031 {140, 60, 143, 63}, /* 3 x 3 */
1032 {150, 70, 154, 74}, /* 4 x 4 */
1033 {120, 20, 121, 30}, /* width == 1 */
1034 {130, 20, 132, 30}, /* width == 2 */
1035 {140, 20, 143, 30}, /* width == 3 */
1036 {200, 20, 210, 21}, /* height == 1 */
1037 {200, 30, 210, 32}, /* height == 2 */
1038 {200, 40, 210, 43} /* height == 3 */
1041 static const BITMAPINFOHEADER dib_brush_header_8888
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 32, BI_RGB
, 0, 0, 0, 0, 0};
1042 static const BITMAPINFOHEADER dib_brush_header_24
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 24, BI_RGB
, 0, 0, 0, 0, 0};
1043 static const BITMAPINFOHEADER dib_brush_header_555
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 16, BI_RGB
, 0, 0, 0, 0, 0};
1044 static const BITMAPINFOHEADER dib_brush_header_8
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 8, BI_RGB
, 0, 0, 0, 0, 0};
1045 static const BITMAPINFOHEADER dib_brush_header_4
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 4, BI_RGB
, 0, 0, 0, 0, 0};
1046 static const BITMAPINFOHEADER dib_brush_header_1
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 1, BI_RGB
, 0, 0, 0, 0, 0};
1048 static const BYTE rle8_data
[20] = { 0x03, 0x02, 0x04, 0xf0, 0x00, 0x00, /* 2, 2, 2, f0, f0, f0, f0, <eol> */
1049 0x00, 0x03, 0x04, 0x05, 0x06, 0x00, /* 4, 5, 6, <pad> */
1050 0x00, 0x02, 0x01, 0x02, 0x05, 0x80, /* dx=1, dy=2, 80, 80, 80, 80, (80) */
1051 0x00, 0x01 }; /* <eod> */
1053 static const DWORD four_by_four_data
[16] = { 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1054 0xffffff, 0x00ffff, 0xff00ff, 0xffff00,
1055 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1056 0xffffff, 0x00ffff, 0xff00ff, 0xffff00 };
1058 static void draw_graphics(HDC hdc
, BITMAPINFO
*bmi
, BYTE
*bits
, const char ***sha1
)
1060 DWORD dib_size
= get_dib_size(bmi
);
1061 HPEN solid_pen
, dashed_pen
, orig_pen
;
1062 HBRUSH solid_brush
, dib_brush
, hatch_brush
, orig_brush
;
1064 INT i
, x
, y
, hatch_style
;
1067 BYTE dib_src_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
)];
1068 BYTE dib_brush_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
) + 16 * 16 * sizeof(DWORD
)]; /* Enough for 16 x 16 at 32 bpp */
1069 BITMAPINFO
*src_bi
= (BITMAPINFO
*)dib_src_buf
;
1070 BITMAPINFO
*brush_bi
= (BITMAPINFO
*)dib_brush_buf
;
1071 BYTE
*brush_bits
, *src_bits
;
1072 BOOL ret
, dib_is_1bpp
= (bmi
->bmiHeader
.biBitCount
== 1);
1073 BOOL dib_is_8bpp_gray
= (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiColors
[1].rgbRed
== 1);
1074 BLENDFUNCTION blend
;
1076 blend
.BlendOp
= AC_SRC_OVER
;
1077 blend
.BlendFlags
= 0;
1079 memset(bits
, 0xcc, dib_size
);
1080 compare_hash(bmi
, bits
, sha1
, "empty");
1082 src_dc
= CreateCompatibleDC( 0 );
1083 solid_pen
= CreatePen(PS_SOLID
, 1, RGB(0, 0, 0xff));
1084 orig_pen
= SelectObject(hdc
, solid_pen
);
1085 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1087 /* horizontal and vertical lines */
1088 for(i
= 1; i
<= 16; i
++)
1091 MoveToEx(hdc
, 10, i
* 3, NULL
);
1092 LineTo(hdc
, 100, i
* 3); /* l -> r */
1093 MoveToEx(hdc
, 100, 50 + i
* 3, NULL
);
1094 LineTo(hdc
, 10, 50 + i
* 3); /* r -> l */
1095 MoveToEx(hdc
, 120 + i
* 3, 10, NULL
);
1096 LineTo(hdc
, 120 + i
* 3, 100); /* t -> b */
1097 MoveToEx(hdc
, 170 + i
* 3, 100, NULL
);
1098 LineTo(hdc
, 170 + i
* 3, 10); /* b -> t */
1100 compare_hash(bmi
, bits
, sha1
, "h and v solid lines");
1101 memset(bits
, 0xcc, dib_size
);
1103 /* diagonal lines */
1104 SetROP2(hdc
, R2_COPYPEN
);
1105 for(i
= 0; i
< 16; i
++)
1107 double s
= sin(M_PI
* i
/ 8.0);
1108 double c
= cos(M_PI
* i
/ 8.0);
1110 MoveToEx(hdc
, 200.5 + 10 * c
, 200.5 + 10 * s
, NULL
);
1111 LineTo(hdc
, 200.5 + 100 * c
, 200.5 + 100 * s
);
1113 compare_hash(bmi
, bits
, sha1
, "diagonal solid lines");
1114 memset(bits
, 0xcc, dib_size
);
1116 for(i
= 0; i
< sizeof(bias_check
) / sizeof(bias_check
[0]); i
++)
1118 MoveToEx(hdc
, bias_check
[i
].left
, bias_check
[i
].top
, NULL
);
1119 LineTo(hdc
, bias_check
[i
].right
, bias_check
[i
].bottom
);
1121 compare_hash(bmi
, bits
, sha1
, "more diagonal solid lines");
1122 memset(bits
, 0xcc, dib_size
);
1124 /* solid brush PatBlt */
1125 solid_brush
= CreateSolidBrush(RGB(0x33, 0xaa, 0xff));
1126 orig_brush
= SelectObject(hdc
, solid_brush
);
1128 for(i
= 0, y
= 10; i
< 256; i
++)
1130 ret
= PatBlt(hdc
, 10, y
, 100, 10, rop3
[i
]);
1132 if(rop_uses_src(rop3
[i
]))
1133 ok(ret
== FALSE
, "got TRUE for %x\n", rop3
[i
]);
1136 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1141 compare_hash(bmi
, bits
, sha1
, "solid patblt");
1142 memset(bits
, 0xcc, dib_size
);
1145 hrgn
= CreateRectRgn(10, 10, 200, 20);
1146 hrgn2
= CreateRectRgn(100, 100, 200, 200);
1147 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1148 SetRectRgn(hrgn2
, 290, 100, 300, 200);
1149 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1150 ExtSelectClipRgn(hdc
, hrgn
, RGN_COPY
);
1151 DeleteObject(hrgn2
);
1153 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1155 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1156 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1158 compare_hash(bmi
, bits
, sha1
, "clipped solid hlines");
1159 memset(bits
, 0xcc, dib_size
);
1161 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1163 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1164 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1166 compare_hash(bmi
, bits
, sha1
, "clipped solid vlines");
1167 memset(bits
, 0xcc, dib_size
);
1169 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1171 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1172 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1174 compare_hash(bmi
, bits
, sha1
, "clipped solid diagonal lines");
1175 memset(bits
, 0xcc, dib_size
);
1177 /* clipped PatBlt */
1178 for(i
= 0; i
< sizeof(patblt_clips
) / sizeof(patblt_clips
[0]); i
++)
1180 PatBlt(hdc
, patblt_clips
[i
].left
, patblt_clips
[i
].top
,
1181 patblt_clips
[i
].right
- patblt_clips
[i
].left
,
1182 patblt_clips
[i
].bottom
- patblt_clips
[i
].top
, PATCOPY
);
1184 compare_hash(bmi
, bits
, sha1
, "clipped patblt");
1185 memset(bits
, 0xcc, dib_size
);
1187 /* clipped dashed lines */
1188 dashed_pen
= CreatePen(PS_DASH
, 1, RGB(0xff, 0, 0));
1189 SelectObject(hdc
, dashed_pen
);
1190 SetBkMode(hdc
, TRANSPARENT
);
1191 SetBkColor(hdc
, RGB(0, 0xff, 0));
1193 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1195 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1196 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1198 compare_hash(bmi
, bits
, sha1
, "clipped dashed hlines");
1199 memset(bits
, 0xcc, dib_size
);
1201 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1203 MoveToEx(hdc
, hline_clips
[i
].right
- 1, hline_clips
[i
].bottom
, NULL
);
1204 LineTo(hdc
, hline_clips
[i
].left
- 1, hline_clips
[i
].top
);
1206 compare_hash(bmi
, bits
, sha1
, "clipped dashed hlines r -> l");
1207 memset(bits
, 0xcc, dib_size
);
1209 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1211 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1212 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1214 compare_hash(bmi
, bits
, sha1
, "clipped dashed vlines");
1215 memset(bits
, 0xcc, dib_size
);
1217 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1219 MoveToEx(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
- 1, NULL
);
1220 LineTo(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
- 1);
1222 compare_hash(bmi
, bits
, sha1
, "clipped dashed vlines b -> t");
1223 memset(bits
, 0xcc, dib_size
);
1225 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1227 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1228 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1230 compare_hash(bmi
, bits
, sha1
, "clipped dashed diagonal lines");
1231 memset(bits
, 0xcc, dib_size
);
1233 SetBkMode(hdc
, OPAQUE
);
1235 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1237 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1238 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1240 compare_hash(bmi
, bits
, sha1
, "clipped opaque dashed diagonal lines");
1241 memset(bits
, 0xcc, dib_size
);
1243 ExtSelectClipRgn(hdc
, NULL
, RGN_COPY
);
1245 /* 8888 DIB pattern brush */
1247 brush_bi
->bmiHeader
= dib_brush_header_8888
;
1248 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1249 memset(brush_bits
, 0, 16 * 16 * sizeof(DWORD
));
1250 brush_bits
[2] = 0xff;
1251 brush_bits
[6] = 0xff;
1252 brush_bits
[14] = 0xff;
1253 brush_bits
[65] = 0xff;
1254 brush_bits
[69] = 0xff;
1255 brush_bits
[72] = 0xff;
1257 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1259 SelectObject(hdc
, dib_brush
);
1260 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1262 for(i
= 0, y
= 10; i
< 256; i
++)
1264 if(!rop_uses_src(rop3
[i
]))
1266 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1267 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1271 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1272 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 8888 dib brush patblt", 1, FALSE
);
1274 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1275 memset(bits
, 0xcc, dib_size
);
1277 SelectObject(hdc
, orig_brush
);
1278 DeleteObject(dib_brush
);
1280 /* 8888 bottom-up DIB pattern brush */
1282 brush_bi
->bmiHeader
.biHeight
= -brush_bi
->bmiHeader
.biHeight
;
1284 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1286 SelectObject(hdc
, dib_brush
);
1288 /* This used to set the x origin to 100 as well, but
1289 there's a Windows bug for 24 bpp where the brush's x offset
1290 is incorrectly calculated for rops that involve both D and P */
1291 SetBrushOrgEx(hdc
, 4, 100, NULL
);
1293 for(i
= 0, y
= 10; i
< 256; i
++)
1295 if(!rop_uses_src(rop3
[i
]))
1297 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1298 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1302 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1303 compare_hash_broken_todo(bmi
, bits
, sha1
, "bottom-up 8888 dib brush patblt", 1, FALSE
);
1305 compare_hash_broken_todo(bmi
, bits
, sha1
, "bottom-up 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1306 memset(bits
, 0xcc, dib_size
);
1308 SelectObject(hdc
, orig_brush
);
1309 DeleteObject(dib_brush
);
1311 /* 24 bpp dib pattern brush */
1313 brush_bi
->bmiHeader
= dib_brush_header_24
;
1314 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1315 memset(brush_bits
, 0, 16 * 16 * 3);
1316 brush_bits
[0] = brush_bits
[3] = brush_bits
[6] = brush_bits
[8] = 0xff;
1317 brush_bits
[49] = brush_bits
[52] = 0xff;
1319 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1321 SelectObject(hdc
, dib_brush
);
1322 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1324 for(i
= 0, y
= 10; i
< 256; i
++)
1326 if(!rop_uses_src(rop3
[i
]))
1328 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1329 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1333 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1334 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 24 bpp brush patblt", 1, FALSE
);
1336 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 24 bpp brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1337 memset(bits
, 0xcc, dib_size
);
1339 SelectObject(hdc
, orig_brush
);
1340 DeleteObject(dib_brush
);
1342 /* 555 dib pattern brush */
1344 brush_bi
->bmiHeader
= dib_brush_header_555
;
1345 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1346 memset(brush_bits
, 0, 16 * 16 * sizeof(WORD
));
1347 brush_bits
[0] = brush_bits
[1] = 0xff;
1348 brush_bits
[32] = brush_bits
[34] = 0x7c;
1350 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1352 SelectObject(hdc
, dib_brush
);
1353 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1355 for(i
= 0, y
= 10; i
< 256; i
++)
1357 if(!rop_uses_src(rop3
[i
]))
1359 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1360 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1364 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1365 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 555 dib brush patblt", 1, FALSE
);
1367 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 555 dib brush patblt", dib_is_1bpp
? 1 : 0, dib_is_1bpp
);
1368 memset(bits
, 0xcc, dib_size
);
1370 SelectObject(hdc
, orig_brush
);
1371 DeleteObject(dib_brush
);
1373 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1375 /* 8 bpp dib pattern brush */
1377 brush_bi
->bmiHeader
= dib_brush_header_8
;
1378 brush_bi
->bmiHeader
.biClrUsed
= 3;
1379 memset(brush_bi
->bmiColors
, 0, brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
));
1380 brush_bi
->bmiColors
[0].rgbRed
= 0xff;
1381 brush_bi
->bmiColors
[1].rgbRed
= 0xff;
1382 brush_bi
->bmiColors
[1].rgbGreen
= 0xff;
1383 brush_bi
->bmiColors
[1].rgbBlue
= 0xff;
1385 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
) + brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
);
1386 memset(brush_bits
, 0, 16 * 16 * sizeof(BYTE
));
1387 brush_bits
[0] = brush_bits
[1] = 1;
1388 brush_bits
[16] = brush_bits
[17] = 2;
1389 brush_bits
[32] = brush_bits
[33] = 6;
1391 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1393 SelectObject(hdc
, dib_brush
);
1394 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1396 for(i
= 0, y
= 10; i
< 256; i
++)
1398 if(!rop_uses_src(rop3
[i
]))
1400 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1401 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1405 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 8 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1406 memset(bits
, 0xcc, dib_size
);
1408 SelectObject(hdc
, orig_brush
);
1409 DeleteObject(dib_brush
);
1411 /* 4 bpp dib pattern brush */
1413 brush_bi
->bmiHeader
= dib_brush_header_4
;
1414 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1416 SelectObject(hdc
, dib_brush
);
1417 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1419 for(i
= 0, y
= 10; i
< 256; i
++)
1421 if(!rop_uses_src(rop3
[i
]))
1423 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1424 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1428 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 4 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1429 memset(bits
, 0xcc, dib_size
);
1431 SelectObject(hdc
, orig_brush
);
1432 DeleteObject(dib_brush
);
1434 /* 1 bpp dib pattern brush */
1436 brush_bi
->bmiHeader
= dib_brush_header_1
;
1437 brush_bi
->bmiHeader
.biClrUsed
= 2;
1438 memset(brush_bits
, 0, 16 * 4);
1439 brush_bits
[0] = 0xf0;
1440 brush_bits
[4] = 0xf0;
1441 brush_bits
[8] = 0xf0;
1443 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1444 SelectObject(hdc
, dib_brush
);
1445 for(i
= 0, y
= 10; i
< 256; i
++)
1447 if(!rop_uses_src(rop3
[i
]))
1449 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1450 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1455 compare_hash_broken_todo(bmi
, bits
, sha1
, "top-down 1 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1456 memset(bits
, 0xcc, dib_size
);
1458 SelectObject(hdc
, orig_brush
);
1459 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1463 SelectObject(hdc
, solid_pen
);
1464 SelectObject(hdc
, solid_brush
);
1466 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
1468 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
, rectangles
[i
].right
, rectangles
[i
].bottom
);
1471 SelectObject(hdc
, dashed_pen
);
1472 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
1474 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
+ 150, rectangles
[i
].right
, rectangles
[i
].bottom
+ 150);
1477 compare_hash(bmi
, bits
, sha1
, "rectangles");
1478 memset(bits
, 0xcc, dib_size
);
1479 SelectObject(hdc
, solid_pen
);
1483 PaintRgn(hdc
, hrgn
);
1484 compare_hash(bmi
, bits
, sha1
, "PaintRgn");
1485 memset(bits
, 0xcc, dib_size
);
1487 /* RTL rectangles */
1491 win_skip("Don't have SetLayout\n");
1496 pSetLayout(hdc
, LAYOUT_RTL
);
1497 PaintRgn(hdc
, hrgn
);
1498 PatBlt(hdc
, 10, 250, 10, 10, PATCOPY
);
1499 Rectangle(hdc
, 100, 250, 110, 260);
1500 compare_hash(bmi
, bits
, sha1
, "rtl");
1501 memset(bits
, 0xcc, dib_size
);
1503 pSetLayout(hdc
, LAYOUT_LTR
);
1506 for(i
= 0, y
= 10; i
< 256; i
++)
1508 if(!rop_uses_src(rop3
[i
]))
1510 for(hatch_style
= HS_HORIZONTAL
; hatch_style
<= HS_DIAGCROSS
; hatch_style
++)
1512 hatch_brush
= CreateHatchBrush(hatch_style
, RGB(0xff, 0, 0));
1513 SelectObject(hdc
, hatch_brush
);
1514 ret
= PatBlt(hdc
, 10 + i
+ 30 * hatch_style
, y
, 20, 20, rop3
[i
]);
1515 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1516 SelectObject(hdc
, orig_brush
);
1517 DeleteObject(hatch_brush
);
1523 compare_hash_broken_todo(bmi
, bits
, sha1
, "hatch brushes", 1, FALSE
); /* nt4 is different */
1524 memset(bits
, 0xcc, dib_size
);
1526 /* overlapping blits */
1528 orig_brush
= SelectObject(hdc
, solid_brush
);
1530 Rectangle(hdc
, 10, 10, 100, 100);
1531 Rectangle(hdc
, 20, 15, 30, 40);
1532 Rectangle(hdc
, 15, 15, 20, 20);
1533 Rectangle(hdc
, 15, 20, 50, 45);
1534 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, SRCCOPY
);
1535 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY +x, +y");
1536 memset(bits
, 0xcc, dib_size
);
1538 Rectangle(hdc
, 10, 10, 100, 100);
1539 Rectangle(hdc
, 20, 15, 30, 40);
1540 Rectangle(hdc
, 15, 15, 20, 20);
1541 Rectangle(hdc
, 15, 20, 50, 45);
1542 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, SRCCOPY
);
1543 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
1544 compare_hash_broken_todo(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY -x, -y",1, FALSE
);
1546 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY -x, -y");
1547 memset(bits
, 0xcc, dib_size
);
1549 Rectangle(hdc
, 10, 10, 100, 100);
1550 Rectangle(hdc
, 20, 15, 30, 40);
1551 Rectangle(hdc
, 15, 15, 20, 20);
1552 Rectangle(hdc
, 15, 20, 50, 45);
1553 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, SRCCOPY
);
1554 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY +x, -y");
1555 memset(bits
, 0xcc, dib_size
);
1557 Rectangle(hdc
, 10, 10, 100, 100);
1558 Rectangle(hdc
, 20, 15, 30, 40);
1559 Rectangle(hdc
, 15, 15, 20, 20);
1560 Rectangle(hdc
, 15, 20, 50, 45);
1561 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, SRCCOPY
);
1562 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
1563 compare_hash_broken_todo(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY -x, +y", 1, FALSE
);
1565 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt SRCCOPY -x, +y" );
1566 memset(bits
, 0xcc, dib_size
);
1568 Rectangle(hdc
, 10, 10, 100, 100);
1569 Rectangle(hdc
, 20, 15, 30, 40);
1570 Rectangle(hdc
, 15, 15, 20, 20);
1571 Rectangle(hdc
, 15, 20, 50, 45);
1572 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, PATPAINT
);
1573 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt PATPAINT +x, +y");
1574 memset(bits
, 0xcc, dib_size
);
1576 Rectangle(hdc
, 10, 10, 100, 100);
1577 Rectangle(hdc
, 20, 15, 30, 40);
1578 Rectangle(hdc
, 15, 15, 20, 20);
1579 Rectangle(hdc
, 15, 20, 50, 45);
1580 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, PATPAINT
);
1581 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt PATPAINT -x, -y");
1582 memset(bits
, 0xcc, dib_size
);
1584 Rectangle(hdc
, 10, 10, 100, 100);
1585 Rectangle(hdc
, 20, 15, 30, 40);
1586 Rectangle(hdc
, 15, 15, 20, 20);
1587 Rectangle(hdc
, 15, 20, 50, 45);
1588 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, PATPAINT
);
1589 if (bmi
->bmiHeader
.biBitCount
>= 24) /* Windows gets this one wrong */
1590 compare_hash_broken_todo(bmi
, bits
, sha1
, "overlapping BitBlt PATPAINT +x, -y", 1, FALSE
);
1592 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt PATPAINT +x, -y");
1593 memset(bits
, 0xcc, dib_size
);
1595 Rectangle(hdc
, 10, 10, 100, 100);
1596 Rectangle(hdc
, 20, 15, 30, 40);
1597 Rectangle(hdc
, 15, 15, 20, 20);
1598 Rectangle(hdc
, 15, 20, 50, 45);
1599 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, PATPAINT
);
1600 compare_hash(bmi
, bits
, sha1
, "overlapping BitBlt PATPAINT -x, +y" );
1601 memset(bits
, 0xcc, dib_size
);
1603 /* blitting with 32-bpp BI_RGB source */
1605 memset( dib_src_buf
, 0, sizeof(dib_src_buf
) );
1606 src_bi
->bmiHeader
.biSize
= sizeof(bmi
->bmiHeader
);
1607 src_bi
->bmiHeader
.biHeight
= 256;
1608 src_bi
->bmiHeader
.biWidth
= 256;
1609 src_bi
->bmiHeader
.biBitCount
= 32;
1610 src_bi
->bmiHeader
.biPlanes
= 1;
1611 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
1612 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1613 SelectObject( src_dc
, bmp
);
1614 for (y
= 0; y
< 256; y
++)
1615 for (x
= 0; x
< 256; x
++)
1617 BYTE a
= (x
+ y
) * 2;
1618 BYTE r
= (BYTE
)(y
+ 2 * x
) * a
/ 255;
1619 BYTE g
= (BYTE
)(x
+ y
/ 3) * a
/ 255;
1620 BYTE b
= (BYTE
)(x
/ 3 + 2 * y
) * a
/ 255;
1621 ((DWORD
*)src_bits
)[y
* 256 + x
] = (a
<< 24) | RGB( r
, g
, b
);
1624 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1625 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
1626 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 32-bpp SRCCOPY", 1, FALSE
);
1628 compare_hash(bmi
, bits
, sha1
, "BitBlt src 32-bpp SRCCOPY" );
1629 memset(bits
, 0xcc, dib_size
);
1631 blend
.SourceConstantAlpha
= 0xd0;
1632 blend
.AlphaFormat
= 0;
1633 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
1634 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
1636 if (!pGdiAlphaBlend
) (*sha1
) += 2;
1637 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 32-bpp no alpha", 1, FALSE
);
1641 if (!pGdiAlphaBlend
) (*sha1
)++;
1642 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 32-bpp no alpha", 0, dib_is_1bpp
);
1644 memset(bits
, 0xcc, dib_size
);
1646 blend
.SourceConstantAlpha
= 0xb0;
1647 blend
.AlphaFormat
= AC_SRC_ALPHA
;
1648 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 50, 50, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
1649 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
1651 if (!pGdiAlphaBlend
) (*sha1
) += 2;
1652 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 32-bpp alpha", 1, FALSE
);
1656 if (!pGdiAlphaBlend
) (*sha1
)++;
1657 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 32-bpp alpha", 0, dib_is_1bpp
);
1659 memset(bits
, 0xcc, dib_size
);
1661 /* blitting with 32-bpp r10g10b10 source */
1663 src_bi
->bmiHeader
.biBitCount
= 32;
1664 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
1665 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x3ff00000;
1666 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000ffc00;
1667 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000003ff;
1668 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1669 SelectObject( src_dc
, bmp
);
1670 for (y
= 0; y
< 256; y
++)
1671 for (x
= 0; x
< 256; x
++)
1673 WORD r
= (7 * x
+ 3 * y
) % 1024;
1674 WORD g
= (11 * x
+ y
/ 3) % 1024;
1675 WORD b
= (x
/ 3 + 9 * y
) % 1024;
1676 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
<< 20 | g
<< 10 | b
;
1679 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1680 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
1681 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 32-bpp r10g10b10 SRCCOPY", 1, FALSE
);
1683 compare_hash(bmi
, bits
, sha1
, "BitBlt src 32-bpp r10g10b10 SRCCOPY" );
1684 memset(bits
, 0xcc, dib_size
);
1686 /* blitting with 32-bpp b6g6r6 source */
1688 src_bi
->bmiHeader
.biBitCount
= 32;
1689 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
1690 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00003f;
1691 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000fc0;
1692 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x03f000;
1693 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1694 SelectObject( src_dc
, bmp
);
1695 for (y
= 0; y
< 256; y
++)
1696 for (x
= 0; x
< 256; x
++)
1698 BYTE r
= (y
+ 2 * x
) % 64;
1699 BYTE g
= (x
+ y
/ 3) % 64;
1700 BYTE b
= (x
/ 3 + 2 * y
) % 64;
1701 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
| g
<< 6 | b
<< 12;
1704 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1705 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
1706 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 32-bpp b6g6r6 SRCCOPY", 1, FALSE
);
1708 compare_hash(bmi
, bits
, sha1
, "BitBlt src 32-bpp b6g6r6 SRCCOPY" );
1709 memset(bits
, 0xcc, dib_size
);
1711 /* blitting with 24-bpp source */
1713 src_bi
->bmiHeader
.biBitCount
= 24;
1714 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
1715 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1716 DeleteObject( SelectObject( src_dc
, bmp
) );
1717 for (y
= 0; y
< 256; y
++)
1718 for (x
= 0; x
< 256; x
++)
1720 src_bits
[(y
* 256 + x
) * 3 + 0] = x
+ 3 * y
;
1721 src_bits
[(y
* 256 + x
) * 3 + 1] = 2 * x
+ 7 * y
;
1722 src_bits
[(y
* 256 + x
) * 3 + 2] = 5 * x
+ 12 * y
;
1725 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1726 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
1727 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 24-bpp SRCCOPY", 1, FALSE
);
1729 compare_hash(bmi
, bits
, sha1
, "BitBlt src 24-bpp SRCCOPY" );
1730 memset(bits
, 0xcc, dib_size
);
1732 blend
.SourceConstantAlpha
= 0xe0;
1733 blend
.AlphaFormat
= 0;
1734 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
1735 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
1737 if (!pGdiAlphaBlend
) (*sha1
) += 2;
1738 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 24-bpp", 1, FALSE
);
1742 if (!pGdiAlphaBlend
) (*sha1
)++;
1743 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 24-bpp", 0, dib_is_1bpp
);
1745 memset(bits
, 0xcc, dib_size
);
1747 /* blitting with 16-bpp BI_RGB source */
1749 src_bi
->bmiHeader
.biBitCount
= 16;
1750 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
1751 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1752 DeleteObject( SelectObject( src_dc
, bmp
) );
1753 for (y
= 0; y
< 256; y
++)
1754 for (x
= 0; x
< 256; x
++)
1755 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
1757 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1758 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
1759 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 16-bpp SRCCOPY", 1, FALSE
);
1761 compare_hash(bmi
, bits
, sha1
, "BitBlt src 16-bpp SRCCOPY" );
1762 memset(bits
, 0xcc, dib_size
);
1764 /* blitting with 16-bpp b4g4r4 source */
1766 src_bi
->bmiHeader
.biBitCount
= 16;
1767 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
1768 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00000f;
1769 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x0000f0;
1770 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000f00;
1771 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1772 DeleteObject( SelectObject( src_dc
, bmp
) );
1773 for (y
= 0; y
< 256; y
++)
1774 for (x
= 0; x
< 256; x
++)
1775 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
1777 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1778 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
1779 compare_hash_broken_todo(bmi
, bits
, sha1
, "BitBlt src 16-bpp b4g4r4 SRCCOPY", 1, FALSE
);
1781 compare_hash(bmi
, bits
, sha1
, "BitBlt src 16-bpp b4g4r4 SRCCOPY" );
1782 memset(bits
, 0xcc, dib_size
);
1784 /* blitting with 8-bpp source */
1786 src_bi
->bmiHeader
.biBitCount
= 8;
1787 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
1788 src_bi
->bmiHeader
.biClrUsed
= 160;
1789 for (i
= 0; i
< 256; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 3) << 8 | (i
/ 2) << 16;
1790 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1791 DeleteObject( SelectObject( src_dc
, bmp
) );
1792 for (y
= 0; y
< 256; y
++)
1793 for (x
= 0; x
< 256; x
++)
1794 src_bits
[y
* 256 + x
] = 3 * x
+ 5 * y
;
1796 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1797 compare_hash(bmi
, bits
, sha1
, "BitBlt src 8-bpp SRCCOPY" );
1798 memset(bits
, 0xcc, dib_size
);
1800 blend
.SourceConstantAlpha
= 0xd0;
1801 blend
.AlphaFormat
= 0;
1802 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
1803 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
1805 if (!pGdiAlphaBlend
) (*sha1
) += 2;
1806 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 8-bpp", 1, FALSE
);
1810 if (!pGdiAlphaBlend
) (*sha1
)++;
1811 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 8-bpp", 0, dib_is_1bpp
);
1813 memset(bits
, 0xcc, dib_size
);
1815 /* blitting with 4-bpp source */
1817 src_bi
->bmiHeader
.biBitCount
= 4;
1818 src_bi
->bmiHeader
.biClrUsed
= 12;
1819 for (i
= 0; i
< 16; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 5) << 8 | (i
* 19) << 16;
1820 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1821 DeleteObject( SelectObject( src_dc
, bmp
) );
1822 for (y
= 0; y
< 256; y
++)
1823 for (x
= 0; x
< 256; x
+= 2)
1824 src_bits
[(y
* 256 + x
) / 2] = 7 * x
+ 3 * y
;
1826 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1827 compare_hash(bmi
, bits
, sha1
, "BitBlt src 4-bpp SRCCOPY" );
1828 memset(bits
, 0xcc, dib_size
);
1830 /* blitting with 1-bpp source */
1832 src_bi
->bmiHeader
.biBitCount
= 1;
1833 src_bi
->bmiHeader
.biClrUsed
= 0;
1834 for (i
= 0; i
< 2; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = (i
+ 37) | (i
* 91) << 8 | (i
* 53) << 16;
1835 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
1836 DeleteObject( SelectObject( src_dc
, bmp
) );
1837 for (y
= 0; y
< 256; y
++)
1838 for (x
= 0; x
< 256; x
+= 8)
1839 src_bits
[(y
* 256 + x
) / 8] = 7 * x
+ 3 * y
;
1841 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
1842 compare_hash(bmi
, bits
, sha1
, "BitBlt src 1-bpp SRCCOPY" );
1843 memset(bits
, 0xcc, dib_size
);
1845 blend
.SourceConstantAlpha
= 0x90;
1846 blend
.AlphaFormat
= 0;
1847 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
1848 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
1850 if (!pGdiAlphaBlend
) (*sha1
) += 2;
1851 else compare_hash_broken_todo(bmi
, bits
, sha1
, "AlphaBlend src 1-bpp", 1, FALSE
);
1855 if (!pGdiAlphaBlend
) (*sha1
)++;
1856 else compare_hash(bmi
, bits
, sha1
, "AlphaBlend src 1-bpp" );
1858 memset(bits
, 0xcc, dib_size
);
1861 DeleteObject( bmp
);
1863 /* RLE StretchDIBits */
1864 src_bi
->bmiHeader
.biSize
= sizeof(src_bi
->bmiHeader
);
1865 src_bi
->bmiHeader
.biWidth
= 8;
1866 src_bi
->bmiHeader
.biHeight
= 8;
1867 src_bi
->bmiHeader
.biPlanes
= 1;
1868 src_bi
->bmiHeader
.biBitCount
= 8;
1869 src_bi
->bmiHeader
.biCompression
= BI_RLE8
;
1870 src_bi
->bmiHeader
.biClrUsed
= 0;
1871 src_bi
->bmiHeader
.biSizeImage
= sizeof(rle8_data
);
1873 for (i
= 0; i
< 256; i
++)
1875 src_bi
->bmiColors
[i
].rgbRed
= i
;
1876 src_bi
->bmiColors
[i
].rgbGreen
= i
;
1877 src_bi
->bmiColors
[i
].rgbBlue
= i
;
1878 src_bi
->bmiColors
[i
].rgbReserved
= 0;
1881 StretchDIBits( hdc
, 10, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1882 StretchDIBits( hdc
, 100, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1883 StretchDIBits( hdc
, 200, 10, 7, 7, 0, 1, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1884 StretchDIBits( hdc
, 300, 10, 7, 7, 1, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1885 StretchDIBits( hdc
, 400, 10, 16, 16, 0, 0, 8, 8, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1886 compare_hash_broken_todo( bmi
, bits
, sha1
, "rle stretchdibits", 0, dib_is_1bpp
);
1887 memset(bits
, 0xcc, dib_size
);
1889 /* 32 bpp StretchDIBits */
1891 src_bi
->bmiHeader
.biWidth
= 4;
1892 src_bi
->bmiHeader
.biHeight
= 4;
1893 src_bi
->bmiHeader
.biPlanes
= 1;
1894 src_bi
->bmiHeader
.biBitCount
= 32;
1895 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
1896 src_bi
->bmiHeader
.biClrUsed
= 0;
1897 src_bi
->bmiHeader
.biSizeImage
= 0;
1899 ret
= StretchDIBits( hdc
, 10, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1900 ok(ret
== 4, "got %d\n", ret
);
1901 ret
= StretchDIBits( hdc
, 20, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1902 ok(ret
== 4, "got %d\n", ret
);
1903 ret
= StretchDIBits( hdc
, 30, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1904 ok(ret
== 4, "got %d\n", ret
);
1905 ret
= StretchDIBits( hdc
, 40, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1906 ok(ret
== 4, "got %d\n", ret
);
1907 ret
= StretchDIBits( hdc
, 50, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1908 ok(ret
== 4, "got %d\n", ret
);
1909 ret
= StretchDIBits( hdc
, 60, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1910 ok(ret
== 4, "got %d\n", ret
);
1912 src_bi
->bmiHeader
.biHeight
= -4;
1914 ret
= StretchDIBits( hdc
, 10, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1915 ok(ret
== 4, "got %d\n", ret
);
1916 ret
= StretchDIBits( hdc
, 20, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1917 ok(ret
== -4, "got %d\n", ret
);
1918 ret
= StretchDIBits( hdc
, 30, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1919 ok(ret
== 4, "got %d\n", ret
);
1920 ret
= StretchDIBits( hdc
, 40, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1921 ok(ret
== -4, "got %d\n", ret
);
1922 ret
= StretchDIBits( hdc
, 50, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
1923 ok(ret
== 4, "got %d\n", ret
);
1924 ret
= StretchDIBits( hdc
, 60, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
1925 ok(ret
== -4, "got %d\n", ret
);
1927 compare_hash_broken_todo( bmi
, bits
, sha1
, "stretchdibits", dib_is_8bpp_gray
? 1 : 0, dib_is_8bpp_gray
);
1929 memset(bits
, 0xcc, dib_size
);
1931 SelectObject(hdc
, orig_brush
);
1932 SelectObject(hdc
, orig_pen
);
1934 DeleteObject(dib_brush
);
1935 DeleteObject(dashed_pen
);
1936 DeleteObject(solid_brush
);
1937 DeleteObject(solid_pen
);
1940 static void test_simple_graphics(void)
1942 char bmibuf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
)];
1943 BITMAPINFO
*bmi
= (BITMAPINFO
*)bmibuf
;
1944 DWORD
*bit_fields
= (DWORD
*)(bmibuf
+ sizeof(BITMAPINFOHEADER
));
1947 HBITMAP dib
, orig_bm
;
1952 mem_dc
= CreateCompatibleDC(NULL
);
1956 memset(bmi
, 0, sizeof(bmibuf
));
1957 bmi
->bmiHeader
.biSize
= sizeof(bmi
->bmiHeader
);
1958 bmi
->bmiHeader
.biHeight
= 512;
1959 bmi
->bmiHeader
.biWidth
= 512;
1960 bmi
->bmiHeader
.biBitCount
= 32;
1961 bmi
->bmiHeader
.biPlanes
= 1;
1962 bmi
->bmiHeader
.biCompression
= BI_RGB
;
1964 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
1965 ok(dib
!= NULL
, "ret NULL\n");
1966 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
1967 ok(ds
.dsBitfields
[0] == 0, "got %08x\n", ds
.dsBitfields
[0]);
1968 ok(ds
.dsBitfields
[1] == 0, "got %08x\n", ds
.dsBitfields
[1]);
1969 ok(ds
.dsBitfields
[2] == 0, "got %08x\n", ds
.dsBitfields
[2]);
1970 ok(ds
.dsBmih
.biCompression
== BI_RGB
||
1971 broken(ds
.dsBmih
.biCompression
== BI_BITFIELDS
), /* nt4 sp1 and 2 */
1972 "got %x\n", ds
.dsBmih
.biCompression
);
1974 orig_bm
= SelectObject(mem_dc
, dib
);
1976 dst_format
= "8888";
1977 sha1
= sha1_graphics_a8r8g8b8
;
1978 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
1980 SelectObject(mem_dc
, orig_bm
);
1983 /* a8r8g8b8 - bitfields. Should be the same as the regular 32 bit case.*/
1984 trace("8888 - bitfields\n");
1985 bmi
->bmiHeader
.biBitCount
= 32;
1986 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
1987 bit_fields
[0] = 0xff0000;
1988 bit_fields
[1] = 0x00ff00;
1989 bit_fields
[2] = 0x0000ff;
1991 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
1992 ok(dib
!= NULL
, "ret NULL\n");
1993 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
1994 ok(ds
.dsBitfields
[0] == 0xff0000, "got %08x\n", ds
.dsBitfields
[0]);
1995 ok(ds
.dsBitfields
[1] == 0x00ff00, "got %08x\n", ds
.dsBitfields
[1]);
1996 ok(ds
.dsBitfields
[2] == 0x0000ff, "got %08x\n", ds
.dsBitfields
[2]);
1997 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
1999 orig_bm
= SelectObject(mem_dc
, dib
);
2001 dst_format
= "8888 - bitfields";
2002 sha1
= sha1_graphics_a8r8g8b8
;
2003 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2005 SelectObject(mem_dc
, orig_bm
);
2009 trace("a8b8g8r8\n");
2010 bmi
->bmiHeader
.biBitCount
= 32;
2011 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2012 bit_fields
[0] = 0x0000ff;
2013 bit_fields
[1] = 0x00ff00;
2014 bit_fields
[2] = 0xff0000;
2016 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2017 ok(dib
!= NULL
, "ret NULL\n");
2018 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2019 ok(ds
.dsBitfields
[0] == 0x0000ff, "got %08x\n", ds
.dsBitfields
[0]);
2020 ok(ds
.dsBitfields
[1] == 0x00ff00, "got %08x\n", ds
.dsBitfields
[1]);
2021 ok(ds
.dsBitfields
[2] == 0xff0000, "got %08x\n", ds
.dsBitfields
[2]);
2022 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2024 orig_bm
= SelectObject(mem_dc
, dib
);
2026 dst_format
= "a8b8g8r8";
2027 sha1
= sha1_graphics_a8b8g8r8
;
2028 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2030 SelectObject(mem_dc
, orig_bm
);
2034 trace("r10g10b10\n");
2035 bmi
->bmiHeader
.biBitCount
= 32;
2036 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2037 bit_fields
[0] = 0x3ff00000;
2038 bit_fields
[1] = 0x000ffc00;
2039 bit_fields
[2] = 0x000003ff;
2041 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2042 ok(dib
!= NULL
, "ret NULL\n");
2043 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2044 ok(ds
.dsBitfields
[0] == 0x3ff00000, "got %08x\n", ds
.dsBitfields
[0]);
2045 ok(ds
.dsBitfields
[1] == 0x000ffc00, "got %08x\n", ds
.dsBitfields
[1]);
2046 ok(ds
.dsBitfields
[2] == 0x000003ff, "got %08x\n", ds
.dsBitfields
[2]);
2047 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2049 orig_bm
= SelectObject(mem_dc
, dib
);
2051 dst_format
= "r10g10b10";
2052 sha1
= sha1_graphics_r10g10b10
;
2053 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2055 SelectObject(mem_dc
, orig_bm
);
2060 bmi
->bmiHeader
.biBitCount
= 32;
2061 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2062 bit_fields
[0] = 0x0003f000;
2063 bit_fields
[1] = 0x00000fc0;
2064 bit_fields
[2] = 0x0000003f;
2066 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2067 ok(dib
!= NULL
, "ret NULL\n");
2068 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2069 ok(ds
.dsBitfields
[0] == 0x0003f000, "got %08x\n", ds
.dsBitfields
[0]);
2070 ok(ds
.dsBitfields
[1] == 0x00000fc0, "got %08x\n", ds
.dsBitfields
[1]);
2071 ok(ds
.dsBitfields
[2] == 0x0000003f, "got %08x\n", ds
.dsBitfields
[2]);
2072 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2074 orig_bm
= SelectObject(mem_dc
, dib
);
2076 dst_format
= "r6g6b6";
2077 sha1
= sha1_graphics_r6g6b6
;
2078 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2080 SelectObject(mem_dc
, orig_bm
);
2085 bmi
->bmiHeader
.biBitCount
= 24;
2086 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2088 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2089 ok(dib
!= NULL
, "ret NULL\n");
2090 orig_bm
= SelectObject(mem_dc
, dib
);
2093 sha1
= sha1_graphics_24
;
2094 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2096 SelectObject(mem_dc
, orig_bm
);
2101 bmi
->bmiHeader
.biBitCount
= 16;
2102 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2104 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2105 ok(dib
!= NULL
, "ret NULL\n");
2106 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2107 ok(ds
.dsBitfields
[0] == 0x7c00, "got %08x\n", ds
.dsBitfields
[0]);
2108 ok(ds
.dsBitfields
[1] == 0x03e0, "got %08x\n", ds
.dsBitfields
[1]);
2109 ok(ds
.dsBitfields
[2] == 0x001f, "got %08x\n", ds
.dsBitfields
[2]);
2110 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2112 orig_bm
= SelectObject(mem_dc
, dib
);
2114 dst_format
= "r5g5b5";
2115 sha1
= sha1_graphics_r5g5b5
;
2116 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2118 SelectObject(mem_dc
, orig_bm
);
2123 bmi
->bmiHeader
.biBitCount
= 16;
2124 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2125 bit_fields
[0] = 0x0f00;
2126 bit_fields
[1] = 0x00f0;
2127 bit_fields
[2] = 0x000f;
2128 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2129 ok(dib
!= NULL
, "ret NULL\n");
2130 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2131 ok(ds
.dsBitfields
[0] == 0x0f00, "got %08x\n", ds
.dsBitfields
[0]);
2132 ok(ds
.dsBitfields
[1] == 0x00f0, "got %08x\n", ds
.dsBitfields
[1]);
2133 ok(ds
.dsBitfields
[2] == 0x000f, "got %08x\n", ds
.dsBitfields
[2]);
2134 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2136 orig_bm
= SelectObject(mem_dc
, dib
);
2138 dst_format
= "r4g4b4";
2139 sha1
= sha1_graphics_r4g4b4
;
2140 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2142 SelectObject(mem_dc
, orig_bm
);
2147 bmi
->bmiHeader
.biBitCount
= 8;
2148 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2149 bmi
->bmiHeader
.biClrUsed
= 236;
2150 for (i
= 0; i
< 236; i
++)
2152 bmi
->bmiColors
[i
].rgbRed
= (i
& 0x07) << 5;
2153 bmi
->bmiColors
[i
].rgbGreen
= (i
& 0x38) << 2;
2154 bmi
->bmiColors
[i
].rgbBlue
= i
& 0xc0;
2156 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2157 ok(dib
!= NULL
, "ret NULL\n");
2159 orig_bm
= SelectObject(mem_dc
, dib
);
2161 dst_format
= "8 color";
2162 sha1
= sha1_graphics_8_color
;
2163 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2165 SelectObject(mem_dc
, orig_bm
);
2169 trace("8 grayscale\n");
2170 bmi
->bmiHeader
.biBitCount
= 8;
2171 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2172 bmi
->bmiHeader
.biClrUsed
= 256;
2173 for (i
= 0; i
< 256; i
++)
2174 bmi
->bmiColors
[i
].rgbRed
= bmi
->bmiColors
[i
].rgbGreen
= bmi
->bmiColors
[i
].rgbBlue
= i
;
2176 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2177 ok(dib
!= NULL
, "ret NULL\n");
2179 orig_bm
= SelectObject(mem_dc
, dib
);
2181 dst_format
= "8 grayscale";
2182 sha1
= sha1_graphics_8_grayscale
;
2183 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2185 SelectObject(mem_dc
, orig_bm
);
2190 bmi
->bmiHeader
.biBitCount
= 8;
2191 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2192 bmi
->bmiHeader
.biClrUsed
= 5;
2193 bmi
->bmiColors
[0].rgbRed
= 0xff;
2194 bmi
->bmiColors
[0].rgbGreen
= 0xff;
2195 bmi
->bmiColors
[0].rgbBlue
= 0xff;
2196 bmi
->bmiColors
[1].rgbRed
= 0;
2197 bmi
->bmiColors
[1].rgbGreen
= 0;
2198 bmi
->bmiColors
[1].rgbBlue
= 0;
2199 bmi
->bmiColors
[2].rgbRed
= 0xff;
2200 bmi
->bmiColors
[2].rgbGreen
= 0;
2201 bmi
->bmiColors
[2].rgbBlue
= 0;
2202 bmi
->bmiColors
[3].rgbRed
= 0;
2203 bmi
->bmiColors
[3].rgbGreen
= 0xff;
2204 bmi
->bmiColors
[3].rgbBlue
= 0;
2205 bmi
->bmiColors
[4].rgbRed
= 0;
2206 bmi
->bmiColors
[4].rgbGreen
= 0;
2207 bmi
->bmiColors
[4].rgbBlue
= 0xff;
2209 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2210 ok(dib
!= NULL
, "ret NULL\n");
2212 orig_bm
= SelectObject(mem_dc
, dib
);
2215 sha1
= sha1_graphics_8
;
2216 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2218 SelectObject(mem_dc
, orig_bm
);
2223 bmi
->bmiHeader
.biBitCount
= 4;
2225 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2226 ok(dib
!= NULL
, "ret NULL\n");
2228 orig_bm
= SelectObject(mem_dc
, dib
);
2231 sha1
= sha1_graphics_4
;
2232 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2234 SelectObject(mem_dc
, orig_bm
);
2238 trace("4 grayscale\n");
2239 bmi
->bmiHeader
.biClrUsed
= 16;
2240 for (i
= 0; i
< 16; i
++)
2241 bmi
->bmiColors
[i
].rgbRed
= bmi
->bmiColors
[i
].rgbGreen
= bmi
->bmiColors
[i
].rgbBlue
= i
* 17;
2243 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2244 ok(dib
!= NULL
, "ret NULL\n");
2246 orig_bm
= SelectObject(mem_dc
, dib
);
2248 dst_format
= "4 grayscale";
2249 sha1
= sha1_graphics_4_grayscale
;
2250 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2252 SelectObject(mem_dc
, orig_bm
);
2257 bmi
->bmiHeader
.biBitCount
= 1;
2258 bmi
->bmiHeader
.biClrUsed
= 2;
2260 bmi
->bmiColors
[0].rgbRed
= 0x00;
2261 bmi
->bmiColors
[0].rgbGreen
= 0x01;
2262 bmi
->bmiColors
[0].rgbBlue
= 0xff;
2263 bmi
->bmiColors
[1].rgbRed
= 0xff;
2264 bmi
->bmiColors
[1].rgbGreen
= 0x00;
2265 bmi
->bmiColors
[1].rgbBlue
= 0x00;
2267 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2268 ok(dib
!= NULL
, "ret NULL\n");
2270 orig_bm
= SelectObject(mem_dc
, dib
);
2273 sha1
= sha1_graphics_1
;
2274 draw_graphics(mem_dc
, bmi
, bits
, &sha1
);
2276 SelectObject(mem_dc
, orig_bm
);
2284 HMODULE mod
= GetModuleHandleA("gdi32.dll");
2285 pSetLayout
= (void *)GetProcAddress( mod
, "SetLayout" );
2286 pGdiAlphaBlend
= (void *)GetProcAddress( mod
, "GdiAlphaBlend" );
2288 CryptAcquireContextW(&crypt_prov
, NULL
, NULL
, PROV_RSA_FULL
, CRYPT_VERIFYCONTEXT
);
2290 test_simple_graphics();
2292 CryptReleaseContext(crypt_prov
, 0);