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
30 #include "mmsystem.h" /* DIBINDEX */
32 #include "wine/test.h"
35 #define M_PI 3.14159265358979323846
38 static HCRYPTPROV crypt_prov
;
39 static BOOL (WINAPI
*pGdiAlphaBlend
)(HDC
,int,int,int,int,HDC
,int,int,int,int,BLENDFUNCTION
);
40 static BOOL (WINAPI
*pGdiGradientFill
)(HDC
,TRIVERTEX
*,ULONG
,void*,ULONG
,ULONG
);
41 static DWORD (WINAPI
*pSetLayout
)(HDC hdc
, DWORD layout
);
43 static const DWORD rop3
[256] =
45 0x000042, 0x010289, 0x020C89, 0x0300AA, 0x040C88, 0x0500A9, 0x060865, 0x0702C5,
46 0x080F08, 0x090245, 0x0A0329, 0x0B0B2A, 0x0C0324, 0x0D0B25, 0x0E08A5, 0x0F0001,
47 0x100C85, 0x1100A6, 0x120868, 0x1302C8, 0x140869, 0x1502C9, 0x165CCA, 0x171D54,
48 0x180D59, 0x191CC8, 0x1A06C5, 0x1B0768, 0x1C06CA, 0x1D0766, 0x1E01A5, 0x1F0385,
49 0x200F09, 0x210248, 0x220326, 0x230B24, 0x240D55, 0x251CC5, 0x2606C8, 0x271868,
50 0x280369, 0x2916CA, 0x2A0CC9, 0x2B1D58, 0x2C0784, 0x2D060A, 0x2E064A, 0x2F0E2A,
51 0x30032A, 0x310B28, 0x320688, 0x330008, 0x3406C4, 0x351864, 0x3601A8, 0x370388,
52 0x38078A, 0x390604, 0x3A0644, 0x3B0E24, 0x3C004A, 0x3D18A4, 0x3E1B24, 0x3F00EA,
53 0x400F0A, 0x410249, 0x420D5D, 0x431CC4, 0x440328, 0x450B29, 0x4606C6, 0x47076A,
54 0x480368, 0x4916C5, 0x4A0789, 0x4B0605, 0x4C0CC8, 0x4D1954, 0x4E0645, 0x4F0E25,
55 0x500325, 0x510B26, 0x5206C9, 0x530764, 0x5408A9, 0x550009, 0x5601A9, 0x570389,
56 0x580785, 0x590609, 0x5A0049, 0x5B18A9, 0x5C0649, 0x5D0E29, 0x5E1B29, 0x5F00E9,
57 0x600365, 0x6116C6, 0x620786, 0x630608, 0x640788, 0x650606, 0x660046, 0x6718A8,
58 0x6858A6, 0x690145, 0x6A01E9, 0x6B178A, 0x6C01E8, 0x6D1785, 0x6E1E28, 0x6F0C65,
59 0x700CC5, 0x711D5C, 0x720648, 0x730E28, 0x740646, 0x750E26, 0x761B28, 0x7700E6,
60 0x7801E5, 0x791786, 0x7A1E29, 0x7B0C68, 0x7C1E24, 0x7D0C69, 0x7E0955, 0x7F03C9,
61 0x8003E9, 0x810975, 0x820C49, 0x831E04, 0x840C48, 0x851E05, 0x8617A6, 0x8701C5,
62 0x8800C6, 0x891B08, 0x8A0E06, 0x8B0666, 0x8C0E08, 0x8D0668, 0x8E1D7C, 0x8F0CE5,
63 0x900C45, 0x911E08, 0x9217A9, 0x9301C4, 0x9417AA, 0x9501C9, 0x960169, 0x97588A,
64 0x981888, 0x990066, 0x9A0709, 0x9B07A8, 0x9C0704, 0x9D07A6, 0x9E16E6, 0x9F0345,
65 0xA000C9, 0xA11B05, 0xA20E09, 0xA30669, 0xA41885, 0xA50065, 0xA60706, 0xA707A5,
66 0xA803A9, 0xA90189, 0xAA0029, 0xAB0889, 0xAC0744, 0xAD06E9, 0xAE0B06, 0xAF0229,
67 0xB00E05, 0xB10665, 0xB21974, 0xB30CE8, 0xB4070A, 0xB507A9, 0xB616E9, 0xB70348,
68 0xB8074A, 0xB906E6, 0xBA0B09, 0xBB0226, 0xBC1CE4, 0xBD0D7D, 0xBE0269, 0xBF08C9,
69 0xC000CA, 0xC11B04, 0xC21884, 0xC3006A, 0xC40E04, 0xC50664, 0xC60708, 0xC707AA,
70 0xC803A8, 0xC90184, 0xCA0749, 0xCB06E4, 0xCC0020, 0xCD0888, 0xCE0B08, 0xCF0224,
71 0xD00E0A, 0xD1066A, 0xD20705, 0xD307A4, 0xD41D78, 0xD50CE9, 0xD616EA, 0xD70349,
72 0xD80745, 0xD906E8, 0xDA1CE9, 0xDB0D75, 0xDC0B04, 0xDD0228, 0xDE0268, 0xDF08C8,
73 0xE003A5, 0xE10185, 0xE20746, 0xE306EA, 0xE40748, 0xE506E5, 0xE61CE8, 0xE70D79,
74 0xE81D74, 0xE95CE6, 0xEA02E9, 0xEB0849, 0xEC02E8, 0xED0848, 0xEE0086, 0xEF0A08,
75 0xF00021, 0xF10885, 0xF20B05, 0xF3022A, 0xF40B0A, 0xF50225, 0xF60265, 0xF708C5,
76 0xF802E5, 0xF90845, 0xFA0089, 0xFB0A09, 0xFC008A, 0xFD0A0A, 0xFE02A9, 0xFF0062
79 static inline BOOL
rop_uses_src(DWORD rop
)
81 return (((rop
& 0xcc0000) >> 2) != (rop
& 0x330000));
84 static const char *sha1_graphics_a8r8g8b8
[] =
86 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
87 "2426172d9e8fec27d9228088f382ef3c93717da9",
88 "9e8f27ca952cdba01dbf25d07c34e86a7820c012",
89 "664fac17803859a4015c6ae29e5538e314d5c827",
90 "17b2c177bdce5e94433574a928bda5c94a8cdfa5",
91 "fe6cc678fb13a3ead67839481bf22348adc69f52",
92 "d51bd330cec510cdccf5394328bd8e5411901e9e",
93 "df4aebf98d91f11be560dd232123b3ae327303d7",
94 "f2af53dd073a09b1031d0032d28da35c82adc566",
95 "eb5a963a6f7b25533ddfb8915e70865d037bd156",
96 "c387917268455017aa0b28bed73aa6554044bbb3",
97 "dcae44fee010dbf7a107797a503923fd8b1abe2e",
98 "6c530622a025d872a642e8f950867884d7b136cb",
99 "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
100 "b2261353decda2712b83538ab434a49ce21f3172",
101 "35f731c0f6356b8f30651bb3cbe0d922c49deba5",
102 "9b9874c1c1d92afa554137e191d34ea33acc322f",
103 "c311dd74325e8cebfc8529a6d24a6fa4ecb7137e",
104 "d7398de15b2837a58a62a701ca1b3384625afec4",
105 "a78b28472bb7ff480ddedd06b9cf2daa775fa7ae",
106 "5246ef357e7317b9d141a3294d300c195da76cb7",
107 "87f6b6a19f021ca5912d285e14ce2ff9474d79f3",
108 "3d8244b665ecdb104087bad171b0b0f83545133c",
109 "e2a8eef4aeda3a0f6c950075acba38f1f9e0814d",
110 "8b66f14d51ecdeea12bc993302bb9b7d3ec085a1",
111 "7da9dd3d40d44d92deb9883fb7110443c2d5769a",
112 "e358efb1c11172e40855de620bdb8a8e545cd790",
113 "9e0c2596c6ecb4f1bc97b18ec3ca493d37626608",
114 "58806549380c964e7a53ad54821d2eb86fa5b9ce",
115 "7fc30d3058c235ce39088de0a598b8c7fe7ca61f",
116 "52a6c769c227f2bb1949097c4c87fed5ee0cbcb1",
117 "8a010d4c5af51fcc34d51be3197878782bdf63e7",
118 "c84c2c33e22eb7e5c4a2faad3b3b99a359d77528",
119 "41bcc1f57c60bdec3c4d1e749084a12867f91224",
120 "94645300d6eb51020a7ef8261dee2941cd51b5df",
121 "c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2",
122 "21cdfde38ac7edbb241ec83d82f31286e90c4629",
123 "1fd2f4dcb62f8522171872e43fd4a35041d68100",
124 "68c18db6abfda626cab12d198298d4c39264bfbc",
125 "6b59ae6c20749020ad43175e05110dc33b6a59b5",
126 "39c31de73aafcfcadf0bf414da4495be9de54417",
127 "132949f59bfeb88dc2047e6eaecb8512aea3d9ab",
128 "f6a6d765bf23726329f96020ba8c5e3c0897aafa",
129 "a7aa311cdc6137f15b9ef9cb1a92ac54ec02f058",
130 "e71d6bb9bd38eea5719f8ba57177997910e2d841",
131 "3d2ccbe51408232a04769546b1bdd74f84558a41",
132 "a1fe9aa885584a0f713d7c6f76c89830fbf28563",
133 "d7085333becdec7759a5229e5fe9ba1e11db0c22",
134 "aaf62842bb98d8a2945c4f643baf50afaeea9307",
135 "287b2f2f2fb5a1d7ee4a29b43342103d78a7a8ab",
136 "d7dd4700f49808541bba99244b7eb5840e0a2439",
137 "af99228aa4cfbd1f61bd824db046144a3c6c2ed7",
138 "568f87f0194ca19b69a5b2bcdef795d89c5721ce",
139 "a37810f46dee8741fe5adbb3f1f2e87012ffc929",
140 "50a09678c49c208f71d40452daca5411279aa674",
141 "e462052a03dbe4ec3814db7700e166d00d4d686f",
142 "a27917d4db49ce77989fae246015aeb2a28520ee",
143 "657514a4ca1f2b6ca7a125ad58dfed82099a37d1",
144 "5e0549fdcf0fc7c50054dccc51d37fc734ab8134",
145 "eca1998a4d79fb81b2a4103f79e3b846a864eaaf",
146 "e4acfcf2d001fbc431d9af59ab3d3ca7c2d965e5",
147 "2b3198bd5c0a87db5dab13df8bbe14363d02acec",
148 "f115ef8392ba82d8cd6e7a039320edcd812c1d28",
149 "aebb1b3baa4fd5213bf80a5ad7a50d54de8fdba4",
150 "f451a05f699ac3bbe155d059e7871a2636887b5f",
151 "5dca709c60e0cd50fa85274a2836aec9eb6168e3",
152 "dccaef62738ff90da4554a85d8cb846d6436799e",
153 "cc4e1372ddf6e303a7fd159090c9d3a1f8ec2a89",
157 static const char *sha1_graphics_a8r8g8b8_bitfields
[] =
159 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
160 "2426172d9e8fec27d9228088f382ef3c93717da9",
161 "9e8f27ca952cdba01dbf25d07c34e86a7820c012",
162 "664fac17803859a4015c6ae29e5538e314d5c827",
163 "17b2c177bdce5e94433574a928bda5c94a8cdfa5",
164 "fe6cc678fb13a3ead67839481bf22348adc69f52",
165 "d51bd330cec510cdccf5394328bd8e5411901e9e",
166 "df4aebf98d91f11be560dd232123b3ae327303d7",
167 "f2af53dd073a09b1031d0032d28da35c82adc566",
168 "eb5a963a6f7b25533ddfb8915e70865d037bd156",
169 "c387917268455017aa0b28bed73aa6554044bbb3",
170 "dcae44fee010dbf7a107797a503923fd8b1abe2e",
171 "6c530622a025d872a642e8f950867884d7b136cb",
172 "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
173 "b2261353decda2712b83538ab434a49ce21f3172",
174 "35f731c0f6356b8f30651bb3cbe0d922c49deba5",
175 "9b9874c1c1d92afa554137e191d34ea33acc322f",
176 "c311dd74325e8cebfc8529a6d24a6fa4ecb7137e",
177 "d7398de15b2837a58a62a701ca1b3384625afec4",
178 "a78b28472bb7ff480ddedd06b9cf2daa775fa7ae",
179 "5246ef357e7317b9d141a3294d300c195da76cb7",
180 "87f6b6a19f021ca5912d285e14ce2ff9474d79f3",
181 "3d8244b665ecdb104087bad171b0b0f83545133c",
182 "e2a8eef4aeda3a0f6c950075acba38f1f9e0814d",
183 "8b66f14d51ecdeea12bc993302bb9b7d3ec085a1",
184 "7da9dd3d40d44d92deb9883fb7110443c2d5769a",
185 "e358efb1c11172e40855de620bdb8a8e545cd790",
186 "9e0c2596c6ecb4f1bc97b18ec3ca493d37626608",
187 "58806549380c964e7a53ad54821d2eb86fa5b9ce",
188 "7fc30d3058c235ce39088de0a598b8c7fe7ca61f",
189 "52a6c769c227f2bb1949097c4c87fed5ee0cbcb1",
190 "8a010d4c5af51fcc34d51be3197878782bdf63e7",
191 "c84c2c33e22eb7e5c4a2faad3b3b99a359d77528",
192 "41bcc1f57c60bdec3c4d1e749084a12867f91224",
193 "94645300d6eb51020a7ef8261dee2941cd51b5df",
194 "c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2",
195 "21cdfde38ac7edbb241ec83d82f31286e90c4629",
196 "1fd2f4dcb62f8522171872e43fd4a35041d68100",
197 "68c18db6abfda626cab12d198298d4c39264bfbc",
198 "6b59ae6c20749020ad43175e05110dc33b6a59b5",
199 "39c31de73aafcfcadf0bf414da4495be9de54417",
200 "132949f59bfeb88dc2047e6eaecb8512aea3d9ab",
201 "f6a6d765bf23726329f96020ba8c5e3c0897aafa",
202 "a7aa311cdc6137f15b9ef9cb1a92ac54ec02f058",
203 "e71d6bb9bd38eea5719f8ba57177997910e2d841",
204 "3d2ccbe51408232a04769546b1bdd74f84558a41",
205 "a1fe9aa885584a0f713d7c6f76c89830fbf28563",
206 "d7085333becdec7759a5229e5fe9ba1e11db0c22",
207 "aaf62842bb98d8a2945c4f643baf50afaeea9307",
208 "287b2f2f2fb5a1d7ee4a29b43342103d78a7a8ab",
209 "d7dd4700f49808541bba99244b7eb5840e0a2439",
210 "af99228aa4cfbd1f61bd824db046144a3c6c2ed7",
211 "568f87f0194ca19b69a5b2bcdef795d89c5721ce",
212 "a37810f46dee8741fe5adbb3f1f2e87012ffc929",
213 "50a09678c49c208f71d40452daca5411279aa674",
214 "0cda6b3297003b3ccd6d5baa17e1ca9bb7c56f08",
215 "b2c8e1ebb9435031fe068442f479d1304096e79f",
216 "657514a4ca1f2b6ca7a125ad58dfed82099a37d1",
217 "5e0549fdcf0fc7c50054dccc51d37fc734ab8134",
218 "eca1998a4d79fb81b2a4103f79e3b846a864eaaf",
219 "e4acfcf2d001fbc431d9af59ab3d3ca7c2d965e5",
220 "e4f110504dd3e4e34f960a39ba91a91c67bf26af",
221 "f115ef8392ba82d8cd6e7a039320edcd812c1d28",
222 "aebb1b3baa4fd5213bf80a5ad7a50d54de8fdba4",
223 "f451a05f699ac3bbe155d059e7871a2636887b5f",
224 "5dca709c60e0cd50fa85274a2836aec9eb6168e3",
225 "dccaef62738ff90da4554a85d8cb846d6436799e",
226 "cc4e1372ddf6e303a7fd159090c9d3a1f8ec2a89",
230 static const char *sha1_graphics_a8b8g8r8
[] =
232 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
233 "e0bc877697093ed440e125154e247ca9d65e933c",
234 "c6d7faf5a502299f99d59eef3f7650bd63dbe108",
235 "9d8c05c3ebd786e7d052418e905a80a64bf7853d",
236 "3da12af0a810fd993fa3dbe23328a4fcd2b6c92a",
237 "b91c8f21cc4d7994abc551feff5b6927d267a9db",
238 "d49dd2c6a37e975b6dc3d201ccc217a788b30284",
239 "ca6753f9eb44529cf8c67cd6abcd4ed1ef758904",
240 "18c3ae944e0afb6c43c21cde093ddb22a27611e4",
241 "b753ebb39d90210cc717f57b53dd439f7de6b077",
242 "38c017dd1fff26b492a57e09f3ce2c4370faf225",
243 "94368cea5033b435454daa56d55546310675131e",
244 "bf57a6a37fb107d29ed3d45695919887abcb7902",
245 "3db0f8bcca3d94920aa57be6321202b8c3c08822",
246 "1f1fc165a4dae7ba118ddccb58a279bfe3876b0a",
247 "8e09abb108e137c99527ab4c9bd07d95b9254bbb",
248 "b0178632775d29bec2b16de7b9b8287115c40d0f",
249 "ca7e859647b9498b53fdd92543ad8aea98ff46f3",
250 "3369889a67d6c79a24ee15f7d14374f9995215e4",
251 "473a1fd07df800c87a5d3286b642ace10c61c6af",
252 "10cd25a0ed5cd8f978d7d68236f81d949b938e84",
253 "b8951d2b20518fd129e5113a5f429626893913bf",
254 "e81fc45962f861d53f420e29cb5d33faf5adbec8",
255 "4851c5b7d5bc18590e787c0c218a592ef504e738",
256 "9aa506e3df33e0d5298755aa4144e10eb4b5adcf",
257 "abdf003699364fe45fab7dc61e67c606d0063b40",
258 "89abaadff4e68c738cf9251c51e3609564843381",
259 "f6aa3f907f620b9f3493f03cb3b4b292df3a9545",
260 "77d0ad32938147aa4038c1eced232b7b5a5f88f3",
261 "43d36e57b702ce56eb250bf53f1ecc4680990cfe",
262 "fd6e0ebb52710ebcdd8dd69931165c83c4930b41",
263 "71b9756fdfeedce1e6db201176d21a981b881662",
264 "5319528d9af750c172ae62ee85ddb2eaef73b193",
265 "b7ce8aa3c328eedaed7306234ed9bae67708e627",
266 "19b32a0daa91201725b5e13820c343d0a84ff698",
267 "abca6a80a99b05722d2d87ce2a8b94ef1ae549e1",
268 "2ba70994d0b4ce87fdf6fbc33ada11252178061e",
269 "7b4e1d47a03e2cec236d8fb6e2ae89d8ed078f79",
270 "075c4cb50e2cf96ab5d132c9f7bb1c1deb4735bd",
271 "8566c1110ab5cb8f754787b47923c8bff38f790c",
272 "89e90d6159d59886bbbf0c40a7cd01293c3cfda3",
273 "3a598f1eb35c1412b0c131e9d9e36a4aef9534d2",
274 "d01071c44259adc94b89978b7d51a058b6dad665",
275 "e6d33b106bcda374e662d338c57a457dbcaa108a",
276 "27ef47377e88f5ac5ad33b19eae27d56c456ac65",
277 "339908a568f384e1f384a3e1b0dd415779203b02",
278 "88fd743d00bd37d2ed722092146795b044d08a6e",
279 "c0537ec24147e74939219213d864ee113cad9967",
280 "118bf4c5bddc206ba737f7aa8b239940cd1aadc2",
281 "7cb51f6c5f1dae926601986c934533df5f8baa9f",
282 "86c84cc8306975edecc6d4a89a8aff29f59b55a7",
283 "af99228aa4cfbd1f61bd824db046144a3c6c2ed7",
284 "25675c30adfe24d6cae60793b156dfdaa36ac3ba",
285 "849d4abf4b690128a5f70e9b8ac78f20c437de06",
286 "e768fc9f3167ef3144a4cfb1e20126a577f7dd5b",
287 "87f57a31253a38dbf3dc3070473328fa04b68a48",
288 "db64cc4d830fc35ed170b53943e722b2342954d4",
289 "9988ceca44dafbee247aece1f027c06c27c01652",
290 "d80d45a97bc877b50ba2c3f720d5197f2f1c5fc5",
291 "b76e0724496e471b01ef8b34f8beba69f5bde261",
292 "34201d3d3583f89ce3267d3d0c4e01c64463de4b",
293 "693f5c5fbaeaadb5928d34b035499626fecb8394",
294 "8a9aa84c42dedc3e681191a1229846887ed262ec",
295 "66041875232f64dbfd2d18353aa28e43e8ccb6b5",
296 "707bc44fc9fed68ff1f537f0473e0cd825dd660f",
297 "f19f5d8e2c96328f06f3985d02ff474fa37b1ea8",
298 "175a7bcb73c74eceecc000657a0100bccf158ff4",
299 "d26eeb6b2d345b587d4305a1234ec0842a96d4b6",
303 static const char *sha1_graphics_r10g10b10
[] =
305 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
306 "b340b5d4750dd3dcd95d73c41b2c3a17f799210b",
307 "b1db68f35022c5fd43519ec8e98047e16bc4fff8",
308 "6e1902eb24865e74066fa9f2a7a49e6f9154f62f",
309 "35df9f4b0965fedf7bca36aa4f17b0fa20e2cd03",
310 "5652e1feb7d4f22c8a2721fd141157e0b9ef965e",
311 "22d89d5933f8b9bd60e9b22e42e7f5659269b63d",
312 "0ad27de0c916c073d0d18484fff899bbdb258db7",
313 "7c05ee5a01dad1e187537701a95382f0a3ec28dc",
314 "b00f0b4448be722d1a19ffe33aaaac4df848d397",
315 "7e5ce5c05a54e83890f022ba4e9853e4b254bf0c",
316 "2986b431a0022153e5f875da77cc792e3825ebd5",
317 "ca4b25a5459885ce1e0a36844612087893d425b1",
318 "181bd4616796d89174cedc0332fb320b65aeb0e2",
319 "6c417b1798ee319eeb404efe4aa136ed7ed37966",
320 "9a9f83e2035aa591d18101c919d1fd5b3456b46c",
321 "74ce9f5658cd8aeae4601fe72fcef07d9f75ec26",
322 "536eaaa901d652805a8977ecb2dc73f651094c5b",
323 "b8b1ac11bcc7174c5b23c18cc7919d09a04255c2",
324 "92cddcabf5365eef1e037f488af52b31669d987f",
325 "2c9c4f27bade080a2cd6f9160422762e267c2f5f",
326 "c7ce29d189dc06ba57e64f0cc32202f5a25ba48d",
327 "717778cc9ab30bcfc026a4344ea1bdef870bd247",
328 "7ac4cb547c8f4ce5079c95afad9d0e2b0cd76a0e",
329 "d578210815e27fe210eb678a71e6d22ba4b4c196",
330 "c7a027c7079dfcc831ca8bc134a509958273073c",
331 "19cf978596195b848df8709aaf637f83f92b8336",
332 "798a835fe50156eeb478c0a6085b088f53409d52",
333 "86ddf268d854f37e5b478c48792b551b57635db6",
334 "8259d388e02542207b6a08d65d553871ce1c4a09",
335 "faea73ff9436223f8c4ee76ac9861a6609ac4ae4",
336 "66f8d78d4971934794478afee28b3a50e97f1b82",
337 "b8f16334bdced439e1c6fc69704bc95f7b46b147",
338 "63798fb175afef78fa8fe8133d9de97a0cc80651",
339 "5f629ab51719dd0ca5a67d880eb2631f5b598a7b",
340 "1ceb85697f649a62b1753438daa14944af7f450c",
341 "98ce4dbc04eb48fa0f96ef813db5b4dfa1b2dd39",
342 "3addb9ccd8f56fc0825f61b1b5af67d3297f4ded",
343 "f00bac7e18827cfb264fae2e8a0da17b9db18d52",
344 "63c1c6c63e82f3b8bd977a1381b248e05321394d",
345 "ada202d2f526f6995f83412479891c1764b66e5a",
346 "68348e8f54883f4fe295354b024e291c85f1038f",
347 "07f55f85a5bb70de5841ea4f62a9af3d29d3d94b",
348 "e9167564031ead3459eee6a3ebb2f58f100d931f",
349 "d39315a1399639f6d4305a342c9ccf02a463b0dd",
350 "46196f50297260df2863e2fa76d2dfcf72006c23",
351 "0790585dfaef94f912b1ee81477d4ac448708708",
352 "589fb8a85d924ad19ed78409ae89475ba479c30a",
353 "43d67bc61ef54014b022891e5c024fc24b1fe797",
354 "e8783644428b637adbe80bcd084a33428cb69983",
355 "fc0c32afb719295f28bcfef22803bef94f798e20",
356 "36f6db4fbe2a1630a7597d3a446f2902755c96ef",
357 "d3f08946300e1700865042aed121870e292d1095",
358 "4782df8e24127e66a434b4e839adebf2dbb223fb",
359 "739707cc85ca63e0580c79618dc0bb8a4a338d95",
360 "8ea5d7e4bebc40a1d91b04b12e1c11a42c188095",
361 "317521e576801acaea62c76fe16813cdfe20f4ad",
362 "ce0fc29bb0281d6c955d64e239254ef9e6dbc06d",
363 "5ab49e7b61eddd3bab4182f362a38e1ab6a5a3b7",
364 "555b6f04ba8dec9e2a60693dcaac594227052727",
365 "c199b96a71c3aab2d49ccb5b6294bf14eb0dd1eb",
366 "4238fe9d296b5c72b0a8745cc761f308605b2094",
367 "943dc6033ab335a6a63e666f70a6bb3a0677e157",
368 "88b6427cf71a6b9a26bfd6026103d50f721651a9",
369 "88cfa7b7c1487f8eda05fce92b622942c9fb7ca4",
370 "64cf929548bc5324fb14b053077bf5bc4be3e15c",
371 "ad91dde8566dceaadc3523cdc8149cd7415a1b70",
372 "1936661eee8073068506131c9e89265b2f8403e8",
376 static const char *sha1_graphics_r6g6b6
[] =
378 "a3cadd34d95d3d5cc23344f69aab1c2e55935fcf",
379 "a1adb32e70188a00f82fe58156b4da74f3ef7a0a",
380 "5b9dab3d8411afb25fbbeba0313db526815ac189",
381 "6415f551e28e1b38b2d721f0a9e003b7d215f6b2",
382 "2028d1b0d1acef35dc07027135023f35fb9746b9",
383 "378713720dcb5aadb730435ad0989a68ab189114",
384 "084152773feb01a85df6006f2f4f288a1442d37a",
385 "97b824953f60fc9a91028045baacbe7b7dc82b14",
386 "f33b1931f392bd09b3494efc23cf7d0ed3071014",
387 "287d755448e72e29e4812193e2b6f8098a214d82",
388 "4059d295aa05ace77853d7ee3d74305cdcbec9f5",
389 "2557ebd4fdacc0e5bcce3dae88a46dd247654ea1",
390 "e51bcf80211cd06e7d10225534b7a79b5454be27",
391 "9bf91a547f47b29bf370e9b60eae7cd6ce987617",
392 "0b94e0a5b739ab0020130646522e53da35a149ad",
393 "eab6e532845dfd5dc2701ef90669a5f7b63e9539",
394 "90deb2e2502186b3c62a58ec9b1c9d2b7b4089c1",
395 "a4e451f76a77bbc3e224a41e9b4fa78cb841a8af",
396 "084607a5c99a84140d93db57d1b0f3a0f51afdac",
397 "2128157e601ef0d6b3636b7387d3b28e876de728",
398 "8bdcdcd463f0052279d070ac763757f4db975483",
399 "9ea0ad22d7b61598fe36e9c942242e8e07e32edb",
400 "8b6452ebd1f6d189d10ee6647e7704821559cfcb",
401 "c39a25a61c4eade48dea62a97c9fb8714c06a8af",
402 "66b130f83381957cfc4763558c5f5cddf2e3b564",
403 "d548135ce2320499277ce12b80bc35004f8a9787",
404 "85a4f3f1b4b0a170198f1bb5d225fcf77887665e",
405 "1906ddfd829e735af49245171f8eb7673295d399",
406 "971a0b786d5bccb1bfb9cbb054740e4eb36f9b7a",
407 "e2896035f178b3d20e4f4d1accb1b3d1b4028865",
408 "defd95a10d44cad6e736542920b74efd53e9e7eb",
409 "eaccd012c0fc46e79cae1997ef101979e5654d8d",
410 "3f11a735e52030aa3d0f024d83803698293d10e5",
411 "82f45c5a34fbb9e36d947a876834d33a1f69719c",
412 "3d27002f4fe3c943468b7e3ef6985962c41ac8dc",
413 "3231c4d87faefb7ec5bd377613969c05b70343fc",
414 "00394e438e9edde978e88602c9ad2a572e965bf6",
415 "e760be69cb37c7be35d5968d7a294e1fd49d4f66",
416 "996fb708ddc4b94eb8d1585bd83a5c8a1e2633ba",
417 "caa39eb482e8fc2e00f1c6737735c023ac9363ef",
418 "c1250ff2b67e6d2a8baccc5c93f8f5ad933c5c4f",
419 "3d6cf3753390a05504b1f50302f767df443f0f40",
420 "b7cf1bafe002673ae58ff50feea61ee32a1ae10a",
421 "da9e896a3a98b330980152b2e4a43cb6e686c730",
422 "0a613357e1e8ec8ff1ad956e46e527a05cab8500",
423 "bdd8ed3ca3ad107b43731ec253ecaa34750a10de",
424 "47499ad13b719de18c59c2bc9b38ed578db50b95",
425 "643e82ac67ab2b0c034a3fcfa498b072a5f2be5c",
426 "cd01f2c0a63b2229d4467d2f874d58edca32b3d4",
427 "94b54f1da5212b3f3a1195eda5ea927e160bc89d",
428 "49341c297a887186bd47d7465d827ab3147f05e3",
429 "325279e76367200d3fd7194d81c09fd139988ece",
430 "c3def160a1e847605ff0fc7edd30397fa90635a0",
431 "2b3e87e0b705b03c7c08f403409ab82cce095ba1",
432 "45c08e11fffc78b2a3574263419e0cb7f8cd9b45",
433 "aecb242c31f31a90f071b6455ea7d808d4ea22e3",
434 "77ea86e51a94b11a8081b29696cb4115687843e3",
435 "d67b897cad72d31e75359094007b1346fd8806ea",
436 "442bcf4d94a649c9406c3b0bf2f00cb7c6a4d1d4",
437 "3d0853f4f7580d7cd5148c21c34d878ecf39a5f3",
438 "1e5a4ef7f8634847a251d1fcce298c409fd13d87",
439 "481337fbedf181d4324bf7f8299b0327197ff468",
440 "9ab957870fa4e17aec6a79bc1a4fdb42a5ffcc30",
441 "b4b9f0bf127ef11f510f25684ae21d692609c85e",
442 "8e32ea3614c3b20899d748db48258761c7158d2b",
443 "5da35bad12e3e9b26a0444d30820099481281e45",
444 "94f004e98ae8035af948611770a4a2dd6643f510",
445 "045ddaf752e7ffc7ded792f36af3c7c0cfeeae42",
449 static const char *sha1_graphics_24
[] =
451 "e993b15c9bd14fb45a15310450b7083c44e42665",
452 "edbd7bab3d957fbc85e89612197cf918f5f5af20",
453 "6a7efb3b6e0b49336df1bd2937ca09a11d976531",
454 "236eb5ca9da70ec7cc719cd2fd291bab14000257",
455 "f98023c7cd8c068f2d7a77ce3600004b90ea12d6",
456 "5c4cb9cea2226fc671bb4a11f8253343ee94bb4b",
457 "fd4be592483623dbc800fe28210a1f0daa71999b",
458 "788b8de98c47974fa9f232a6042ae4ca546ddb7d",
459 "a8772e6c44ba633fb384a7c4b50b435f1406107e",
460 "883bc8f305c602edca785e21cd00f488583fb13f",
461 "3bac4e80993f49dc3926e30524115fca9d7a8026",
462 "91369e35be29059a0665782541db4c8b324c6bb2",
463 "0fa8cf332a56bb6d7e14e85861fdd60f51d70501",
464 "593d694cdcc8349b3bfc8257041dbcb27e61da45",
465 "1036b91d93e31cd1d4740d0c8642e115e5a38188",
466 "1898073cdb35ca4d2b21bba933ac16a0b4297317",
467 "5068bff794553cf5a3145ae407c9a2984357844c",
468 "413a7989969c229dee4ab1798362f32f96cf0a10",
469 "0bb222e540b82720d4971e4a2fc626899af03e03",
470 "adc20832d8c43f1cf372d8392535492013cd2306",
471 "45649794dcbcabda487f66f7a80fc1bec79047a1",
472 "367c2dc1e91ff9ea0e984d6fb3000cfb4e0ae7e9",
473 "9c6afd47dd748a33c585e6655fd4ec1c28976a47",
474 "b4df692ac70a5f9f303270df4641ab014c6cbf46",
475 "8bc3128ba47891366fd7b02fde7ca19100e64b9f",
476 "e649e00efe7fea1eb8b17f7867fe089e5270c44b",
477 "a0bffbbfb0adf6f188479c88da04e25d76ab4822",
478 "92a1ab214dd8027c407814420449119466c92840",
479 "b58f19c1800344a2b8e017eb784705bdb2bd8450",
480 "5747a6d5c6ce79731c55e8cf33f7da3025cd35fd",
481 "955390669afed2369b15b32fa519f2f921cdf1a0",
482 "201906f7d763b930a98c97f8eeab417f2b65e723",
483 "5313357d50c40c05a3b3a83d0d2013a138c955a1",
484 "701c5af1d0c28294ce7d804b5697643c430d22a0",
485 "b0a959745b2db1d9f449e68e4479a4f36301879c",
486 "63f764b9bd2f4876ab1ee0f3c0eb55b5a7de5212",
487 "e171f6ec77bca91d6b8559911bce296c0bac469e",
488 "9725669042ef68acb408404d196496d10340bb5a",
489 "26e7e1c300ba0c5aaaef03eeb71d529f6def9289",
490 "b1f602d2a74095cc0115ae2ae07b642498e6c0fc",
491 "03d5eb8e3a6662e6dc183f88ee2f285065fc9c51",
492 "f4c312f9a37ddc54a27f6b1421dab1ce0cec0c27",
493 "0f79500eda467cd3cbc220abdd37b5dba695d654",
494 "8d4e3e9d81cc30aaad555ed9e27aed7c615de630",
495 "84c43a3cbd7d8c1ac9a0e9b6f07620158079b278",
496 "7d479beeb6758c164566638b5c873c188d6a91e7",
497 "80086808fca03e757d812e31d1ae576bf90dac9d",
498 "9560096f1b85ae6d939d736165c44df00a47c424",
499 "1015e0217ea13eaa62c7666b8b81aafd75f8f610",
500 "93e1aec608e037af3bfb7bd32dde446abe4eea11",
501 "b25ba91487ec945410deb2b51bc1156890c032a8",
502 "d347ca5c6c4b6a61389247c3b6f61564033e8c25",
503 "ee315634ed92da3a32c2675ecd1b369471c60936",
504 "099c688a920f606655b485e8f0a433dc811bc976",
505 "9c044a733335bca43766bda2b317249309155079",
506 "354b92008a8409c62d0fa1dff1532c5943aa37a2",
507 "8dc9cb7deae5c24d1eae004d53893fa6caf4723c",
508 "cf311a96d41bd98fdbdfb5dfaac4ba1ba9b7d6da",
509 "bf5ec23456efe00e1e0931c17de9040ab2092858",
510 "0bbdf0a0489428f96e3c1d3e5305f9a893820852",
511 "9d86b1b2bbce90efd3c0b9fe20d23ffa3eeecd20",
512 "8f7a0af421101952e674f37154c1e8c4646ea2d2",
513 "e96b79bf88988b5694a04dfc3bd0029361b39801",
514 "d12284f58daabbd173dfae6c7e55fd5d822d89b4",
515 "09cb4ab070083144bed4271c0a2a34ccb6ed13c0",
516 "cc5ed4c9e925f0a457a7437fbb8054528cdd9469",
517 "c95afd0a020e68a76982fe8663b5d64113987233",
518 "48658ff76c137185c56a53f3ccf0e958d0296742",
522 static const char *sha1_graphics_r5g5b5
[] =
524 "2a2ab8b3c019e70b788ade028b0e9e53ffc529ae",
525 "847005cf7371f511bcc837251cde07b1796f6113",
526 "a8f75743a930843ec14d516cd048b6e0468e5d89",
527 "d094f51ce9b9daa9c1d9594ea88be2a2db651459",
528 "cf3928e240c9149788e1635b115a4e5baea0dd8f",
529 "a9034a905daa91757b4f63345c0e40638cd53ca8",
530 "15ee915d989e49bb9bab5b834d8f355bd067cd8f",
531 "99474fecf11df7b7035c35be6b8b697be9889418",
532 "cbc2898717f97ebb07c0c7cc04abde936dc5b584",
533 "29c896b591fdf4ddd23e5c0da1818c37e4686d94",
534 "4b5b275d33c1ebfe5bdc61df2ad125e865b800fa",
535 "92df731fa1f89550d9d4f7ea36c13f2e57c4b02a",
536 "420e39ff3bdd04c4b6cc2c98e99cb7993c7a0de5",
537 "1fabf0fdd046857b1974e31c1c1764fa9d1a762f",
538 "449092689226a1172b6086ba1181d6b6d6499f26",
539 "1a92a60f190d33ef06d9decb56fd3fdd33f3af03",
540 "e61f5978c2e28c0c6d8f5eefe0f840c975586efc",
541 "897d16f4d6a6ddad685d23ed7828d4f676539b75",
542 "9d21bcfdeaf1ca5d47eb823bdefc24d7a95f4f56",
543 "6daaf945a955928c5c124c880522ca4634fb2343",
544 "12a288390d16e1efa99d4185301de48a4d433b14",
545 "ea92af2538b76f41a3a03eaa11ac395c9b6197c4",
546 "1d3af561605fd61433035600d8962cb8d266fdd0",
547 "3a50ce21b3563a604b4fc9f247a30f5a981f1ba6",
548 "d7d97e28ed316f6596c737eb83baa5948d86b673",
549 "ecc2991277d7314f55b00e0f284ae3703aeef81e",
550 "656bf3b7121bcd620a0a3ad488f0d66604824577",
551 "d7d8493b5fa7a3a8323d6ac84245093a79f052c1",
552 "df5dafe96e528c2cc7fd11e4934e298f53cec34b",
553 "a49530722328ae88fd765792ac0c657efbcce75d",
554 "aa46aa2226e3121eaefa9d0836418e0b69262d69",
555 "333f3f2cf3ff15736d59f92a33c45323d3987d6d",
556 "a6fd83542c3826132e88d3f5e304d604c0056fad",
557 "a8d6a5285a927ba3a3be34b06a06c70a20d4c1b3",
558 "e428d213ad02651287894f093413949dcb369208",
559 "7df915bedcc5951a1b6f828490f7dbb93212e835",
560 "645dc251d205139282b17eb7bece1055fff3bcd0",
561 "76215275593631f5900aad3616d725733dc39493",
562 "81655a550703849a616d4a16504bb9c6f999285f",
563 "573d65665d20f00d36d9782ae2b89772140524ab",
564 "619414c1b33ac60cb0c0de61df86245d472259b0",
565 "c3d4a1425e17de9e05e3f6dfc6a24c26bfd5ee12",
566 "2a66dae03890ff791eabb982949435adb19af02b",
567 "24ac219478ba406f30794550690486b14cbac5e8",
568 "2b28d20690dc92374ebecb5508f8fdc6c7581790",
569 "db8c34882ddd46716d14bbf569d530f80db65ed4",
570 "6c652ecce55e71fee16bc1c9b2c5ae4161bdd2ea",
571 "9b02173f424c098ea0f4cc5db9eb65f69263d127",
572 "a92942269911a88793b3460b6f2a2cd56e48eec1",
573 "059db9f0426b371e464ef3d30f1a4f4aa599e101",
574 "a52d6ceee5c2a04b4e059c0d49337a997cc17e40",
575 "aa4a0a4b7f2697aaf270c89874631974bd9d7183",
576 "585061e403d9cac1603a38af420efe87338f381a",
577 "8f447a3820c83662086dfa836da2205b0130fd5f",
578 "3772003c7fb420003512d0c437b3659d96d89ce4",
579 "dab47c9dc149e570045d699598b14a613bf319b3",
580 "2daca4d26a086ed34894693be0b0374402232809",
581 "904f1d82159bcf5485f323bd12b859dc5e83f8eb",
582 "5bd29f94844351e9a5bd01f25d85608b9b0701b2",
583 "295ec16530126046790fb734e99f86f5b3b74ed8",
584 "d98b0561010606b55a1b9b85fbc93640f681d256",
585 "1c1499051860b7caa25173b328ca9c862f01dd1a",
586 "a655512753bc90e6d4eb3848f69e96db1ad348e5",
587 "2230f36f12d4becb242e2962fa1b3694db2496ca",
588 "d81e41a765d7a2d68073f5fde3f74f09df84001d",
589 "0de013c2c6aba9f99cbcf5f8cfd3212ded7ae72a",
590 "5950f7d00cd8692872377df0e869a7d5ea5e4420",
591 "fedc67d1b0797be5f40cd45280844f2b61d29b0a",
592 "7de23c68ca224818fdf127c5e96729dcd0de2b8b",
593 "a848b1b0293b05b3f9358a3ffcb21a2e5fdecf05",
594 "1a0fd0df17fa4c455a4a91cad30b5242f77fd233",
595 "af45bf81d119be5cf6845ad41191ba52637e65e9",
599 static const char *sha1_graphics_r4g4b4
[] =
601 "2a2ab8b3c019e70b788ade028b0e9e53ffc529ae",
602 "cfa0ab83ee93283ad914c3748f0532da1697af1d",
603 "8bd18697d1ef27492805667a0bc956343ac08667",
604 "e8501c830321584474654f90e40eaf27dc21e6a8",
605 "d95ab10fcfb8447b41742e89f1ae8cd297a32fc4",
606 "821177710961d2cb5f7e7dfc0e06e767b6042753",
607 "667124365ffadeea1d8791bedda77a0c7b898de8",
608 "c9f23e684b600dea17575b4b17175fbd9106c3a9",
609 "7678876e50eae35d1eaa096aae25afaa0b864bf3",
610 "fb52b0c373a5f2a60b981604b120962942d2447a",
611 "5ab8dd07436681d762fa04ad7c6d71291c488924",
612 "0167981d9e1490a2ebd396ff7582f0943aa8e1b8",
613 "115a6bd382410a4a1d3c1fa71d8bf02536863e38",
614 "65c6d1228e3b6d63d42647f14217bc1658b70d9a",
615 "25fcb75aa687aac35b8f72640889fe92413e00c5",
616 "3bddf9d53e89560b083302b146cd33791b13d941",
617 "a81504498c7a7bb46340ce74476a42f70f2730b1",
618 "e61a4f2657a444d8c49f84fb944f9f847667bf2b",
619 "32b6e0aa79b7e96cd0ab2da167f6463c011023a8",
620 "1d283aa4d2b2114f7809fe59357d590c7c779aa7",
621 "29640e2ddd2d3016da14507c3ce9b2ce32f39bb4",
622 "57ebf8becac1524543da120e88e9cc57ecfdec49",
623 "e68ef3ffd7401244cdea79781eab12d7a5e8ca18",
624 "d591232bbc2592462c819a9486750f64180518fd",
625 "0e183a4c30b3da345129cffe33fe0fc593d8666b",
626 "f14d9a4bd8a365b7c8f068a0dad481b6eb2b178b",
627 "8933450132bf949ba4bc28626968425b5ed2867d",
628 "9928a8f28a66c00069a124f7171b248817005763",
629 "e4a9dcc3e565cd3a6b7087dd1433f3898bb9cdb2",
630 "eca4f9b16b3bddfd0735fdd792e0ccaadfb9ba49",
631 "233e588cf660e2c9b552cf02065cf63fa6655864",
632 "0740ff74dcd259d9a644ba51ad77ff0d40348951",
633 "a3345acaf272f2e288626906e3056cd0ced70499",
634 "957a86fbe8a96dd068db65e4e624a52bcc84af46",
635 "13b0f240054dc57ba0e2dfde74048496304a2c7f",
636 "51ef267eb9c15487c9430f505e8a6c929eb2170c",
637 "1b593d8e031d3b37fecf6f1df5a8f96c8e8bfef8",
638 "9dd123938b0a02601d8d458ecbd6535ddefea724",
639 "815a1e4fc7f3a00c2990c150e87eba0b13f66811",
640 "75ae8c80af4356a1a5eebde6608fbc31e8a95372",
641 "b89ae8de2d975b8adb263ace66fd953d29165a8b",
642 "e901ab4b20bc87370609d7ba1f21aa08abd9eced",
643 "e9105c6ed8355519e0cf2d2217ed7af43cec8ba0",
644 "3cbf5fffdd73f9639f3eb34ec1ab3055bc8618fb",
645 "8e2e70ade90711c4ac01352aa0373fce36ff5dc0",
646 "8c40d6d8e0c696c31f04c896e492a2a38703d870",
647 "e13c821c236ea0b67cca64c9da7be15e88fc712f",
648 "9af4907a8144458a73dbb7471784f8c3d9aeffcf",
649 "e4731b63d41f6b51e30752ea52d85c4a2938731b",
650 "f0acb3cfcda62e95bee5f7bc8830ffeb3dd7e5a7",
651 "07b10c3f191d0a93e5e5694aae37dcad407e10f5",
652 "f7900e60347029876ba55e8f0c4c02e89deb36b6",
653 "f373a5f37b82e7523c64c08eb509b6191e49b173",
654 "9f0760a05190c9edf9ce2e8be6aaa5557601fe91",
655 "7587a9c87cab1eca827807f351bb67ca184d1ac5",
656 "b53ef0b5c674822e784903a9dbdd3b386d9f2350",
657 "5505d2ed20dc61ffe48832ecf5329162a5ceb734",
658 "9f72be4467219a345b1164205d1fbfda2d64271e",
659 "13d1634e03bc49cfe14a32278d9b1f5ddbb9be10",
660 "a79e4cc419b9e1735e275e2823da52875536943a",
661 "b0182002cb1f4fba9df3c21a4d046ab41ce7e9be",
662 "3830cd728c1e72837310940bcdac4e294d6c9843",
663 "f571c7c4aac92491017963032194690c0fa06b42",
664 "6fd751b7328c02954bce98bed94b3ce3c73db118",
665 "91d50b5a604d6c38aa0d08b9af995490f8ec246b",
666 "8585783d0373e9696b508776b6e6b18a80b09888",
667 "b53cde47b0e28063770d3b1328c3cc2f774a6300",
671 static const char *sha1_graphics_8_color
[] =
673 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
674 "e313bb57f699587b0bae2f17f5da5d977e6f2a61",
675 "49024d6cbdf1614327dfda9eda17675e76805f7e",
676 "63ba8ab7e7996857d52d4c2b995cfcd304daf25f",
677 "92295ae66712df050cfd6cc9fd2fd4101784c5fc",
678 "84d85009d35ae10abbc435f3913422544105cea2",
679 "eae349c2a481d6e8bfdf9a7f4f49384a14716a5f",
680 "6c51068ca1db36d948eaa34aed4a44d2cd1e8b32",
681 "f3aa8d89430748178952de56643069d80b40aad6",
682 "bd5fed74e2f1b097ef4c20bd30edfc6ee11eeccd",
683 "0546b87bf5fbe1b8168eed5d4a20649be92734a1",
684 "52b1363e821bf604d9df260bfa97e26d428c33fd",
685 "108732d9909ee5f3542a9b90b3ad96ec82446ab9",
686 "06c76c53dcf3ba5e213d483e27d841404c9aa90a",
687 "ae8fcdbdd44ba58e9bd46a4c56eb54f37483913c",
688 "89711289be6d5c55734878410e4923d5cca9aca9",
689 "8355caf57d51ad4e14275943088392e37dc75d33",
690 "5992b2e331a0e0f752598cc8d083cbecb5f4dde6",
691 "6f0570da9dea7f043f678088f8362ee458cd79fa",
692 "940db409d4c3e5640275724f9e5f7c1a0d2e21b2",
693 "242ce86967ea62fa69c1e6f597ccbcf2f0b1602c",
694 "5092b22af85a08f10a2899888bb9d552f25f828e",
695 "f5dafef807237fe72c74c0bbd47c382ace45bfde",
696 "e91973be2651eeef568700463652838d8cbba976",
697 "1df851515ecf46df5c2d3279535c1763f72353dd",
698 "b68922915ebc2797d58deecf983f7d0cf9a5efbd",
699 "359bd76088a965bb0cee7c44800bc46b2638807e",
700 "e14e5734b33057b890368f3e9d482d9e5a0358c5",
701 "64205ccaa277e64eeea0c20e99900ac79858ca2c",
702 "2cdee35d43d62da09b4ddfddbd0948ddbb9fc48e",
703 "91f988f575338505ba8a40727865a8d3f2298624",
704 "d2b4557492ebb2e0f640a0a2f6fc3bdc8d8f36f9",
705 "421e8b608378e4f17774dd32ea6446fa0fa16f91",
706 "3b7488731da48635d86be551ab7c8c0f91c78219",
707 "4fd49cb49853ef950fd0b7e2e35718a71c8374c7",
708 "e15a355fc09bfd22267917898e2266168ff410e3",
709 "b9688566bddf18586787c00e68724e51e97dfb72",
710 "5e38e03310f1c66f2052af2a745d8c60515707c5",
711 "f994fb5019bf4c1a96eccf89af599eae0aa6b412",
712 "3a71ad6fef147067641e49a5f69b2454e3a5010d",
713 "ea10eac72830dcae19bcb16a076c2b21d844b5b6",
714 "6376234f542467e5887adfece62f753e998dc19d",
715 "add949d009217ef2b847e34772ba363e4be7b1b8",
716 "28fcf9f7d098c05de632ae38b2fe33b9635ad445",
717 "0b58666deb3615e912896a764e5c6475989e95e4",
718 "bf460cc44c0edee851d72587c8425c3f06a62c55",
719 "ea74c00c45569007383b632d7f1d2adc82645717",
720 "5ac22e1a33b0204fdc7a68d54ee94648e96079a0",
721 "284abed096637c80bb50844e393da9dd4b3f19ac",
722 "9dc776c5ab8256b1301c7d1da60544a9410e6715",
723 "a433c41c05b6db008a4cb2c52a321d027c6be1fe",
724 "46f772c2832b3aad584674db666bd63e48b4f338",
725 "a9f9ca0049235db51ab7359a5fc3d21be42d2aac",
726 "f3dc739da41fb299637c8660e8c46917ddcf87a8",
727 "eae47bf865d932f22a6e59b6fe8d041f220e1fbc",
728 "9ae38bb94c7b4c0c6dfebbee23d1de4db9b77488",
729 "678979a45126a76eb629992cd64734862f53a555",
730 "2f7ba8803604c032cb1a1228bc021f0f1c03e245",
731 "52e7c2f8b01592898c13f1e7633881e350244209",
732 "d9d5556b77301952b4caf113337720966bc8e1f5",
733 "e58d9c0acf0219d0839e1dbd162e08a765ed7f0f",
734 "34ca0f9660e1889f9f2c0deb80535d3c4f349fa4",
735 "2c07272462c68cf5944b03e2aa049475b99143c5",
736 "07ca369fb875d37b9cf855045f528af1827edec4",
737 "5e9e3e71b06c5efe20f93b3838e745b40b878471",
738 "153ae5c9fc2a31b38c4878b25d9026b9f51f132d",
739 "488341e88810d737de0b26de4e4d4fa0e78eb482",
740 "bd1e7f40e3971e2ff6c5561286901193a1557527",
741 "5a42b7eeff8198e7b005e4afa4282e6ffb939906",
742 "d7ffa3893c6fa937569791cf49986518a4a4d96e",
743 "26bc25a011e2b60961ee9d6c6141d928ae24389b",
744 "8771d5ff7b93b9dd9d077e672b342235dfb28472",
745 "6a1f6e1d494bf6b0ece7af5fa164ebaadb3a19bd",
749 static const char *sha1_graphics_8_grayscale
[] =
751 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
752 "df35491dd5038187c05bac06921402ba6d7773a8",
753 "c8cd6d34e011d5f9ca4b1190eec3b416e5e68e53",
754 "66a686ac22cd0ec326f2c97ef473781cabe9690b",
755 "9bddef7b97b8b03569f07011e66ddd67fe82d787",
756 "2a4cea20974bcfb92cf40b05746fc7eb465c4b0f",
757 "0a87689ca33f888f05dbfa21ddec11c069990d8b",
758 "8d0a92e6333e1b99591962e2def9bc9121111cf5",
759 "409c9f29f6fa2e312c8e0b4b3c59acb4d84d8717",
760 "1fbc234c28a8140965ad0fe30b4b799f6681e864",
761 "1fc709d5d3e55d5f96c451c209cd73c59dbfe733",
762 "96b6a32e057d5faeae57086cbb62a8e7b3e6e86f",
763 "aa66ea7c9b7214339858b9fc9bd4720d05e8c843",
764 "114bb377b4e78a1978e1ac09388c48861b5223a3",
765 "8d0a92e6333e1b99591962e2def9bc9121111cf5",
766 "9dc511d6947fe816185cdff93bf0cfe0349b72b4",
767 "eb4c14ee66b012187f5fe6a2ec28b6be956567c8",
768 "216388ddf6b563dd2058a9df65b40b6f72df1715",
769 "ad11e4b6979cf055e3bf1868112a7bef207385a4",
770 "47f72be971bd2d3399dabd018201f4f5075e96fe",
771 "de09d41c9ae4338fbfcfe9f8ed71d343537a6f3d",
772 "f39ab890a2b99d0c31e6e047f2315244972f5ffd",
773 "6e7baf7d328bc2c55366e32967a0db4d2f43ab82",
774 "15b991814d84d6aa252696dd0c6150ef88a8db3f",
775 "1cb52f2a4d17b9b0d8375d016aa8cf0677fcd29a",
776 "9a6cfd68523e40ea1d52847d7747da912cfe2ca9",
777 "b6785a410048bb85e7ea3f0492459972103c935e",
778 "82e641ebe47d9f8cc229b82b8315e69e52f812b1",
779 "15db343049e3a9b31addc5d2ffebc3fe91b39c51",
780 "a895daf1f20371d4d1c3f93c070124cc13e341c3",
781 "3ddc872384ed8f9eaef472aa14a1d79a2c3f3b04",
782 "0000000000000000000000000000000000000000",
783 "bd7d8c1cb4b2adc31cf8c7d39a4fa1e3ac7f2545",
784 "33fc8618ce62f5cdd9e06ad61e296f718a99899e",
785 "dcaa7fe030ae4d3029e38ca584047eeb2d17fe10",
786 "6d41e6168662e75baacf74d911d7419d54c8d73c",
787 "2404952157ba1519094a2da6bfbf2b0f1356432d",
788 "24caede65b40815a60b83c4edfa06bdc542388cd",
789 "650a51bedd1af92469d2950eb95220db35f95c6e",
790 "3f43aa11e6fccb747cc13224583fb2f951fee08c",
791 "04cea9753b575ecce8e55357eddfcec10ddfbbea",
792 "6b6f4b97f05e015eb37a5f6aff637235feacd030",
793 "1bd06e4e11929e5e91c3c9f20def639b20e731e8",
794 "d63a6086547e90d2ba84aaebfeae24f3ba0c04f1",
795 "85425940daf119125deb52421b2057acebe6d1cf",
796 "a3db92382cf0a4c7cafe52c27b1f41520aaa677d",
797 "9869b6f088822fb423996f9968e5a931301fc2c3",
798 "cdf63ab4ab32c2e8e27527a9588d0fb525f1c945",
799 "a7f81cf3326fa3608acc13cfce2f573912e9d745",
800 "f2ea92f523f8918b1d514a2d9555dcb4750273b4",
801 "e9c16e43a8f589ae85289c5c3ffea6b22fba1806",
802 "84a4bc0c2c5d36d016da4df95a5d8d6c8ce3ba6f",
803 "f543efc84e638afbaa456e629100f0274de1a35b",
804 "1bd2587399006eed0d46beff397d32081f6bc58e",
805 "f8a571de89ed82ffb9cbc041ce1eacb064be2853",
806 "640a49455acabca6954a7fbb6af4e872af342d11",
807 "589e7911e09332ee090371deae17b0120ff990b5",
808 "a1a941fa270cda48c648553ed4b427e16e96f8e0",
809 "f30a8d9f73ca043c5bfc18d9595e299fc0a39eec",
810 "fb63bbb2f944fb63ed2d7399f07b168740c1034b",
811 "3685c9ae95118a83db3569832c29753276fa1264",
812 "09640bad951c33e7d70a1fced83b1869f65b3fc5",
813 "5eb00252664ec39e61359adb1dade4906a87a248",
814 "ee7b9b292ea9fb559ef5ebf6a2a5586d38c7f854",
815 "dcad1a146c1d0ec2c4cc7f64bd4f45c57a604bfe",
816 "0ca8775d9a61ccc251d1e6f2e3cfd26a24ae24a2",
817 "17ae603c199a5d6695d198a7f36e6d7263990951",
818 "1918a33f59d3500204ffc573318a39e9ff754221",
819 "5449d1aef0d2d6af9ac3fd7adb32c23ddc9be1e2",
820 "55d302ece31a9b7fc4be4a07a53767ba210273e7",
821 "a6a29836291f9dbca85e25cee60f62ef5faca6d7",
822 "3494a23633405e46af96cb57715617fef1ac252e",
823 "5a3ae1da30d83cc157e6a4a5617c85598309f4ac",
824 "edc1ad2704452354aa6f79fac244a55b6f509c2e",
825 "87eab8f81fb2a036080e099760f628037f9306e7",
826 "a3eac75d30f681b3898ee469d368960529634d7d",
827 "cd5caeabdb71241766d24f038cfc5f1e91e11256",
828 "e2b393dc3f5833f7868668ea31369e90348768cd",
832 static const char *sha1_graphics_8
[] =
834 "41728d7ff2bb425b5fc06521adeabf6cc73136f3",
835 "512246d4886ab889a090b167ba194577cb95272e",
836 "921e852d4564cb9e5ac15ff68b5207bebea871d1",
837 "9636b0ebefc443ea11949ccd28f6ca454277dd41",
838 "aa9050da55e6b6957c60b7d603fce539cb5c0048",
839 "e2b93aca15fb1233ac09a713dced1f4cd950b1e4",
840 "3e3a603fc26cc305aa27f88da7d2a3b0073877d8",
841 "390b2bf70daba36310683f46af9cd50b9a061396",
842 "82d21737e9a7247397a6c983a9b6d9a0452dd74d",
843 "2a8460af91675e01cbe9384eb6cd3eb2cb420960",
844 "1af53b1218ee9844fcda891b836d42f6b2f66bd5",
845 "da1cc34a9d9b779fc7849e03e214096026506464",
846 "5ba8f99ca034666effa556748c49a0f5a015125f",
847 "b67ba2f55659c75ac72c1112494461bb3086e1a4",
848 "73e2859ce849f756f954718ce3c90f02e31712b6",
849 "b1dff0f5dd233b44ee568878c5d3f8ae1d80c6d9",
850 "1f27dc1a1316fb7a4a78fe40fcd4bdae3aaad218",
851 "6e375e1485a1e45ac6ab10af49645d5fb2e76dff",
852 "cfc67c325c7cdf96d90af9b3cceb8d0504cbb3b0",
853 "7262364067e03c7fa498af1d59d228d6c63b460e",
854 "5241241a355a667ef0834049adf4218e8b3f16b8",
855 "db22d666690948eb966f75b796c72c7150a5c4b9",
856 "af21fb2645b568b049549de375584c4aa3055143",
857 "1f13ea0034db4b0ffa4ddcff9664fd892058f9cd",
858 "3caf512cfddfd463d0750cfe3cadb58548eb2ae8",
859 "4e5e7d5fd64818b2b3d3e793c88f603b699d2f0f",
860 "c4efce8f7ed2d380ea5dc6fe1ef8448a27827532",
861 "bdc0a354635b879871077c5b712570e469863c99",
862 "d599bf210423fe3adbb4f1de87d9360de97827d0",
863 "bae7c8b789e4e9b336c03c4daee3bce63fe039d9",
864 "cc01f17928f7780cefd423ea653b072eea723a1b",
865 "c005662a47f14c2f1b7c7fb3b0ef0fc390c6ea6a",
866 "675cde16a6ad2bcd8d7e72780b07a0ccd8d0393a",
867 "ea39ac62ca2f815a1d029340c6465994b6f03cb0",
868 "9a603513cd81acf70cf8b27b0d544e7f672e9d40",
869 "f4a334e69535de74ee5ed54be93a75120a66e54a",
870 "559fd1d15447745527c61fe43a94c6708bff3e39",
871 "995f77f2f53398399f09d1365cb4dfd105764e5c",
872 "61907a6685bba93077da40cfb28cf2ab74552fd2",
873 "122015e5e17c1c317c6e51c0e207826b606a4077",
874 "c21851589a5f8a45ea5f9bb3e72f4f88d0a6697d",
875 "8c609921d4a3ed89a994a75482b27496bf103cf5",
876 "eb2ce16a6ae251f4965135ee776776b5fc02c42c",
877 "66493ee117719e172f327a426af601996025f28c",
878 "acead2745fec0b6c817fa601353bdf2d197b64f7",
879 "a6b858b2d125c159529d3f3ec45b31925a79acff",
880 "1f1379089d7c6e8d733aaa4eaffbe02db6255b61",
881 "d83adc669c0dea0dc4812b93f998514b6f02d805",
882 "9e8ceb7c3cd68e043b6d875c8c84a1e394962412",
883 "9e996fc74eeef53f0a6c31aabb2edce6e103f189",
884 "6b8abd1785304d6531c1e4cc65c1ffcdcb2196a5",
885 "7d1bfff706b0713e53209407889f83a0da26a81d",
886 "31e667c2dbb81dcf81d01cb88f794e88ddb90ff2",
887 "31e667c2dbb81dcf81d01cb88f794e88ddb90ff2",
888 "465d9cd0a77ab4fcf035aa67544b2a26269e0b09",
889 "600d6b2713d5e4c0d90c02660245ed26c7ae3033",
890 "0025a440866a404523a8a20e79a8891e45a2ff56",
891 "c04d335933895f836f0a28c1e3f7f444352c3b8e",
892 "bd28d77cd85b20a2384d6b25082cfd884bba683e",
893 "7e591ec8ae9bb61c3a443c93f071cab2b8978394",
894 "f81c70b6ee2d4690f9f7c797c66582b176f8dcef",
895 "d3f359cac7318ce09e0531d51c8c2b316cf3a23b",
896 "293c41a7ed923a4617560481ae8815cebf83701a",
897 "ec06b56f3abe277be42650ebd49dabeaae9e756d",
898 "750c923785ba2afb9ce597516c072f90f014bf95",
899 "80089132f8a11d86e8038f2f8e12dfba46624ee5",
900 "bde5a62a065c027561226fbec5155e938ba7f6b3",
901 "a6311d74fc058079a327abb536e69353be719925",
902 "fbaa8848a1d3896469c37fd43ab44233f5b875a3",
903 "0000000000000000000000000000000000000000",
904 "c2ac98ef716fd8a5ac8f08ce66293d9a96344337",
908 static const char *sha1_graphics_4
[] =
910 "fa867e2976a549ecd3b1fa67df54963232fcef8c",
911 "256d742b4da96b373b4fa5663d0ad3b5faab5c8e",
912 "d96d8f4232b930bccd53b903b5efaf8c0bdb16f4",
913 "9401799e6116c35e5f0e5bdca07ea25316757a72",
914 "482ae2b0ef1d64752b5ef11cc7f35a33eb55d07c",
915 "dcfb3e01100b41c0f75a1c5f84b6de6b90138281",
916 "2505598845fa026ea7187582461efbf06cb6904f",
917 "3981a19363beca8f28d32a5928ac296fd22a5296",
918 "01404024ebb2c266d17d734059524d874491650f",
919 "c87bbff3f83b8ec11bb03cfa9bc9ee5166c4c7ef",
920 "f35c5d62853be78c5d39fb2f45200dc262aa8e18",
921 "46e94a55f5f58a6b915078d8ffdc725f53aab516",
922 "665bbbc749a5ffeedc0d62aef0661a5ce845b017",
923 "1f26a01730f67d40ea711a50d9d801bac15a642e",
924 "3b53d24178cfacba53103a44dfd5d072b15a6781",
925 "c52cfd57f26037723d37192722fc3a217f280c9e",
926 "e34da6500cf2e424d980714d92737cf6c31a7bda",
927 "d17f4358ae529f920960ed89e535902ee13b0033",
928 "0f44e12ecd1ea7e39433890443626d4fc35204a4",
929 "eb38683e812fd13dca971ba8f4cfd2b6820d3524",
930 "73bbc83f88f1aaa6df0158b63e70bb3165163163",
931 "0dc2690a5c58a2907a8ab06693ebfab6698172eb",
932 "df5f0d6574bdf1781754b5b9f98232a77e439e33",
933 "39c16648cf6c261be71a33cec41867f28e119b94",
934 "26ad5116562e7b58c76a26eaf521e2e40899e944",
935 "1bcc54eaf8e3c2b7c59ecccb23c240181d7ba8b8",
936 "4f827ca6927f15191588456f985bf29d2a3b3c24",
937 "e7de769c3d12ea9dd223bef4881c578823bec67e",
938 "6fb102d020e5554116feefc8482104f3ae2036d2",
939 "ae546ffd30b837afc7dfcb5c9ce4f01d15b35ddc",
940 "20c9eb3276c08fdce35755e349bec94b04929812",
941 "628d837163a25c6520f19c0602383176dbad528e",
942 "b5a12cff7100290ad43f5ed17a321b42de048893",
943 "b672afbeeafb44194a821f0def81a8892872937e",
944 "db0124045882b598feea192186cf7eb7a0387866",
945 "602d91471378fe24a2d0248bd8a92b624f099fea",
946 "e772873b87a0f55ea51a3da323f64bf8814c6703",
947 "21aa1ff238a2d78efed1aa658ac8fe21b1e64daa",
948 "1a579cd280422131c35e907a023ee0e80749b5a4",
949 "bbf027f506cbb80d359bf4892fcb75f816f2e446",
950 "ed44bded6b17df7fe92b191fd810d1aafbd55f52",
951 "a49bcb1ace42d548254d9e96d22088b1fe2e75b4",
952 "e2a21a965dfd0bd09f9270917f681610efc18ce7",
953 "3e411b004a5be84451860c6da6a4a1a482b77862",
954 "3b3d2f18fdc75e938ca43cc2d0b41fa67c1c5d36",
955 "7811c536a6527112b438a6413f3927f2c79086a7",
956 "525ef3615040225752a2fe646ab99ee64e360630",
957 "46760975993f9881b7bbe94123173e6a683d3f25",
958 "df5feb905a31c288008cf5e82d73ac818a160d82",
959 "df5feb905a31c288008cf5e82d73ac818a160d82",
960 "d8af3868c66c7d6dac35ec8ee0317b38a6910bb1",
961 "ec8e2aebfb4a1c28ebcd0e053b9e4d8638b50951",
962 "ccf8d11b1e81895e9781f17c227c821228d8714b",
963 "f751e26578193afe6a727ee2a52318c404c56555",
964 "28a6b9f7927e99e53cf46f0333d29168cb10e920",
965 "029552113292cc110fd6b7888e766628950aaeef",
966 "297f6ad15200bffbf15198324ee8f27a61a6f2d4",
967 "70cfa427a1a0d6f2232b1fd544905d48af69cb98",
968 "287ea7db721e641439888cb9f4bac3a5f16124eb",
969 "dd9eaa5325cdf250e89162ac84207978ebb6458e",
970 "42466aab11852741d937c1ff6f3bb711e58415a6",
971 "0663cf6330591fcf744aba96664e05d90243d07a",
972 "3024fa38333f83a639b0f0e6ac6d4b9868231157",
973 "6fe7d0d17b892032cfd171c3d7c365f030b5be38",
974 "7ae780dcc7cf04dda50648bfc07cc6a7a2f2189e",
975 "0000000000000000000000000000000000000000",
976 "9ab46e0c42f82dc73df8a55cbf881abd72397cec",
980 static const char *sha1_graphics_4_grayscale
[] =
982 "fa867e2976a549ecd3b1fa67df54963232fcef8c",
983 "6611ea6cb24bcf34c5f3688d57e2874aecb39c24",
984 "5ab1d3f8f5938c5d20a2fa3237e319077b21e716",
985 "1c201d149c0bd886ff8a427ad513f15a70991174",
986 "44646e67842a4d055bea1fad0434e6e4a0eb5465",
987 "315189097a02024d2eae61d524c4de07a396aee7",
988 "73ac786015dea36ac466a6524dba757d5d238ece",
989 "6e328cc4d53627f034b23706d8bf26afe18512ae",
990 "3c5b90cfeafdc1c99c8c62317d07276fdf66803e",
991 "95e6f509bb1cf9981efc47a0878ab0bd983eb349",
992 "2e1bc3b00e4ecc62b03785533dc0faeeda38d53f",
993 "6448226859cab61a61c95d3ed5ed5f216b1bb120",
994 "7f1cb06597b14edbea03b860aec3cebc4ebc3d62",
995 "ec3879342b5a44f6de6efe946243ae5ade00980d",
996 "6e328cc4d53627f034b23706d8bf26afe18512ae",
997 "51b50968a3a0570d5ed690fe44ba1a78a4d62ce2",
998 "d5bab61f78ac3355aa2e0776b2d5d9d71d61e77b",
999 "fa47c5195405f6a0eefba3e3a60ad463c7ee94c7",
1000 "b2bda683edef912957845a33edc055902a801fed",
1001 "b067f0421cb2c83b218b8ab6edbede2ff5723b57",
1002 "c8de76f9c0900e5f86c7584fe94d5749376b7b49",
1003 "43ee3e187dda14b86aef12371041ae70313b5a65",
1004 "7fab79b7f1a5cb2ec31ed8eeaf213b3d8dcde4d8",
1005 "d4930552a7845111ffd9db57260be1ab97967c06",
1006 "afdf41fca7951c6dd6193320de1295f2c68fe52a",
1007 "f2f1f331fe6b1b31d7c9ddd37793b375fc01d3d4",
1008 "f0af0f1edcb837bdf1535c1f5e9988c21ae9bfd1",
1009 "0000000000000000000000000000000000000000",
1010 "71c4577baaf35f12f6707b1e2f78a1e8c0d41d0b",
1011 "9b7d6b12385bb9e1cd881758aff342bd5427432b",
1012 "6fdd5aa022da2a8af6f1d02b6072ebc068b4b600",
1013 "643fab30f1a59dc37f1e0f1a6006076fbf90a5fe",
1014 "6edbc0b95e9ae3348ce7d12c44f9c8082b5f2aa9",
1015 "9c0da52c4ceaa8fdfcff7351328dd520bb57e985",
1016 "f8224430462f6a93f85ef33b8aa7299525990708",
1017 "1cf93cecc942b41ab8fae21ea18418a6d64873e5",
1018 "d58b8760ef01c12e691651c932d683c66fde3654",
1019 "94438c82b8812fe81a69d5d1429c5967cdbfed7a",
1020 "764ea26f10fe11f7bdb538a26fc33d44b3a95d6d",
1021 "94ad53c578f6034dfc5c666e363203cdfb00f2cc",
1022 "8cd7b0ba8426db344b4cb8820890603020ed65e9",
1023 "ad96132f25ca14e1aeb17c86f8d187febf6401c9",
1024 "027b05bc82ce4f897c4bf812610a641547368939",
1025 "3f131e855ba1611d8fb0f16a6979f8f56aacc7f3",
1026 "ae64d1dc52dcfa8c644f953c4601fa2fbefec37b",
1027 "2f3fb1bd8f416198d70e06f6d519571cd5eb4ef4",
1028 "cc96ccaf6b99f60a49b03017515f83cba22b4c40",
1029 "5eeb56afea8040a8fb18c11f29931b836474126d",
1030 "a3405c085fc2f2184bcd0d1edcdcc66927e33659",
1031 "f8681c09f1abfc38d31e47622cb8798cd896a00e",
1032 "b5ee51cfc73acb59a2f6124509ea236f8fc7f9f7",
1033 "d374d4d92c940ae42a9b42c14d744341b68a8c14",
1034 "06a6a224be0f5cdc51ac4704f9f57fc1f3813d6f",
1035 "c47c2dc806b6b8ff28f300949695d013a46c0083",
1036 "ada3b7c34946e584dcdf4203e07cfa3dad02bc63",
1037 "c2f61571b067a44b30f56b4658c9606f0edfc0f3",
1038 "58f400c9bb78e49a879276fb049edfc9c981740a",
1039 "cb3794f676d6e9502f27172ac7d79a12ca2ba32c",
1040 "aa89612798fbc4e11a73b6233c0ac4832e6af2f9",
1041 "c96a998be5c1d588ef1243cfd2610d056d16947e",
1042 "68bee638d59a373f33f308751471b3ef41849582",
1043 "be0501175cc3cbb61217fca76356f761117fb40f",
1044 "8fa37e26cdae406c2d1c81b1175dcf0311cf60c9",
1045 "3efe128a5bf250f2c460664e8f543f5ec54d5dc2",
1046 "2d5123e757cf00e423a89160d7dc4997c3688829",
1047 "0000000000000000000000000000000000000000",
1048 "36dfdad9f3f5cfde6add3cef23368c343d30469a",
1052 static const char *sha1_graphics_1
[] =
1054 "23366004515f3bc46796ea505d748f8d0f97fbe1",
1055 "61ade9054d4477fb89cf830539a5e8b4e45f0688",
1056 "ac530c5dbaf837e15b2337347e974184fad73643",
1057 "95fdcda26262d5948a9ade77d83fd698e0031050",
1058 "1dd5cee06af78d026e5da8bfe3f45e1cf51faa13",
1059 "f6b61ecf03ad11752775faca1d4404c6bb5065f5",
1060 "d7ad44d6f377598268e9968333ae2cf23a0715ca",
1061 "5871339cd7e6cee12d4dc45934a89071c73efe6b",
1062 "69e9b85b34caf736069ba91e57a5c3fa7c891653",
1063 "21d5d9e47bb07de2cf7bc99b7725390d03a6cde6",
1064 "f69ee65ea25676429a28eea79b5b9cb9206b8d01",
1065 "39ff81f77ef4ee772367ed1a63785987c060126e",
1066 "4c686508a994ca4c7a0a73b8c0fe52423c180d9c",
1067 "b0cc1f5e244ae0c0835a9866a46abdfcd56d1cb1",
1068 "7ddf19df5bbdf4475b6ec1bc042425e382502864",
1069 "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
1070 "c5ffc59048bf786b5646ad6226cd8633965de9ef",
1071 "40fadc2d24c713b04ff96f7dc26e70e85f26c55e",
1072 "400a21caa01e015096ee1afcf1b54e7f8ec515bd",
1073 "0ff4b49797e30e3555aab45219adf449a9a560ff",
1074 "280327328ca940c212ce24fe72e0b00014072767",
1075 "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
1076 "b85463875f755b85f1464b1b6275912bcbad6c9f",
1077 "816f200969feecc788b61dfeecf05b1790984401",
1078 "a4964d8bbf80fe785f906bc0f7c5b113242a58fc",
1079 "a5d204cc7342d40b765ca042f8668e22601c4ff9",
1080 "adb2818f6d3845dd140bc0f9abdbaa89d2a8c3de",
1081 "0a76e0121facb103857130bc6e12185ad77fc3fa",
1082 "02aede714773d654d0fc2f640afaa133ec718ad5",
1083 "13cc63972aee4f6ae27091a8af18de01f1d3a5da",
1084 "3bb745ccb08402ce6fac6ee26fb8d7aad2dba27e",
1085 "b26699f62661e16a1dc452d24c88ce363a1f2998",
1086 "4d95c3d1e170f004c80aa8c52feafb8e0e90760e",
1087 "c14832e69ec3585c15987b3d69d5007236fa9814",
1088 "e44ea620b0c47125a34193537ab9d219a52ad028",
1089 "ef2db9fb75a672f69bab88e5d08fe64f50ec2bc4",
1090 "df81db2a9b3942a82e0dc5e57247b642f9b42702",
1091 "8819bf7a43295161fe045a42936000b3a51fe200",
1092 "e08dbc26469c229f75ccbf1a38a133401f270b84",
1093 "d1e6091caa4482d3142df3b958606c41ebf4698e",
1094 "07c1116d8286fb665a1005de220eadc3d5999aaf",
1095 "4afb0649488f6e6f7d3a2b8bf438d82f2c88f4d1",
1096 "f2fe295317e795a88edd0b2c52618b8cb0e7f2ce",
1097 "ffc78c075d4be66806f6c59180772d5eed963dc0",
1098 "c86eeaeed09871dee4b43722ba512d2d3af7f4d0",
1099 "24b1a6241c81dbb950cfbe5da6798fd59eb36266",
1100 "1007d3b531b4bc3553d4547bc88443fc1f497cf6",
1101 "b71ca46be287598f716bb04fac0a52ad139c70db",
1102 "6589e48498e30ab036fbfe94d73427b2b1238a69",
1103 "4dce919117d2e41df9f5d4d0de14f97ae650046d",
1104 "22c2e078f69d73b7a5cb3f7dcbb8fbaa007ef3ac",
1105 "be36cda370650e6d5fb0570aeb8ced491d0c2b1c",
1106 "4c34cb8e47f9ff4b4348aa2d40cce7cb54d65cb0",
1107 "18f4497e43903e8df5b27da4ceebf62b15550a87",
1108 "3fa3570a2ebd38042b90f24bd3496233bca5a23d",
1109 "2fcd25c2d19a01fa631fd19135d9f28b26b86259",
1110 "655cfadeb157233c804d42b58195569c8846e3c1",
1111 "65c8811c609203fd424f5ed5f92ca2268a1dca54",
1112 "a45b297d709e297584eb0f2985294ec0ab53d8ad",
1113 "0d180c37bc26d83a1a11f66168757f3de2493243",
1114 "b362ba4790def178c236c0ae7b0093dbba47cf24",
1115 "d1d2ecf71a37d9eda58fa09454aa871971428ace",
1116 "6672da4e016b6e9de0ca218f8307cce7d48d62c4",
1117 "ee22f43ea867228c6ff937d39e1826e285a107e8",
1118 "832c3c3afd056e5d1cdfb2f466f27225c4adcc6c",
1119 "a2a928de9007d765da496abec8c21b23601f8c45",
1120 "28ded40e72d4327b9413571476b167fb28a1f420",
1121 "23366004515f3bc46796ea505d748f8d0f97fbe1",
1122 "88763f8e8fcf4f78fa864325791a9dd35a0bd279",
1123 "013cee26bac8f815eadad4bfc012d9b5d01c3b7f",
1124 "44a28536466dc895feb824b23dfd4a47c6948af8",
1125 "17468a3789f0a6d65c302bda735a01dc2c1a74d9",
1126 "781d8c5cbc28591fd48fce06f984c502fdc6b363",
1127 "df510792a7790cc699532b1420d43c6d4da2ae2f",
1128 "55c26d22f11d80b73383fa57d0fac552d705b092",
1129 "14443b33a9879bf829ed3b06e1aef0d7dcf662cc",
1130 "53ab1fcccd09fa5cbff77497f36a70a3b3cb8b81",
1131 "4842a30dd7fdf38ddc3ddec85c08efe13a0e2e0b",
1132 "cc76db6da5ba1776f20240a5ad97a26a9cdf96b0",
1133 "014f477664a7f4ce4a948d6359a2707119afc8e2",
1134 "74d01690e344bc22e7a0478e7a09ccd92354c486",
1135 "9ab50a663b74577b656e9849484a909d7ac52eeb",
1136 "128eefd2ee043d59dc37918065f687e378e5ca95",
1137 "d7e2daab98ce1f698c4bfedfc01c0d79fcb76b8e",
1138 "8d34215487088b5d4ef63062270ce25c2862643d",
1139 "826562eb11a0d0bba77fa21245f7406a194e9225",
1140 "bbae6f0659e095a42b420082079663f937065813",
1141 "bbabe686a6955402c90530e7c67f1428868369b3",
1145 static const RECT graphics_bounds
[] =
1148 { 10, 3, 219, 101 },
1149 { 100, 100, 301, 301 },
1151 { 10, 10, 110, 320 },
1152 { 10, 99, 300, 200 },
1153 { 99, 12, 201, 200 },
1154 { 90, 110, 300, 200 },
1155 { 90, 90, 210, 200 },
1156 { 10, 99, 300, 200 },
1157 { 10, 99, 300, 200 },
1158 { 99, 12, 201, 200 },
1159 { 99, 11, 201, 200 },
1160 { 90, 110, 300, 200 },
1161 { 90, 110, 300, 200 },
1162 { 10, 10, 365, 405 },
1163 { 10, 10, 365, 405 },
1164 { 10, 10, 365, 405 },
1165 { 10, 10, 365, 405 },
1166 { 10, 10, 365, 405 },
1167 { 10, 10, 365, 405 },
1168 { 10, 10, 365, 405 },
1169 { 10, 10, 365, 405 },
1170 { 10, 10, 350, 251 },
1171 { 10, 10, 300, 200 },
1172 { 300, 10, 9, 260 },
1173 { 10, 10, 435, 405 },
1174 { 10, 10, 120, 120 },
1175 { 10, 10, 110, 110 },
1176 { 10, 10, 120, 110 },
1177 { 10, 10, 110, 120 },
1178 { 10, 10, 120, 120 },
1179 { 10, 10, 110, 110 },
1180 { 10, 10, 120, 110 },
1181 { 10, 10, 110, 120 },
1182 { 100, 100, 356, 356 },
1183 { 100, 100, 356, 356 },
1184 { 50, 50, 306, 306 },
1185 { 100, 100, 356, 356 },
1186 { 100, 100, 356, 356 },
1187 { 100, 100, 356, 356 },
1188 { 100, 100, 356, 356 },
1189 { 100, 100, 356, 356 },
1190 { 100, 100, 356, 356 },
1191 { 100, 100, 356, 356 },
1192 { 100, 100, 356, 356 },
1193 { 100, 100, 356, 356 },
1194 { 100, 100, 356, 356 },
1195 { 100, 100, 356, 356 },
1196 { 10, 10, 416, 26 },
1198 { 0, 10, 511, 306 },
1199 { 0, 10, 512, 306 },
1203 { 45, 45, 256, 256 },
1204 { 86, 86, 215, 215 },
1205 { 45, 45, 256, 256 },
1210 { -1, -1, -1, -1 } /* the end */
1213 static const char **current_sha1
;
1214 static const RECT
*current_bounds
;
1215 static const char *dst_format
;
1217 static inline DWORD
get_stride(const BITMAPINFO
*bmi
)
1219 return ((bmi
->bmiHeader
.biBitCount
* bmi
->bmiHeader
.biWidth
+ 31) >> 3) & ~3;
1222 static inline DWORD
get_dib_size(const BITMAPINFO
*bmi
)
1224 return get_stride(bmi
) * abs(bmi
->bmiHeader
.biHeight
);
1227 static char *hash_dib(const BITMAPINFO
*bmi
, const void *bits
)
1229 DWORD dib_size
= get_dib_size(bmi
);
1233 DWORD hash_size
= sizeof(hash_buf
);
1235 static const char *hex
= "0123456789abcdef";
1237 if(!crypt_prov
) return NULL
;
1239 if(!CryptCreateHash(crypt_prov
, CALG_SHA1
, 0, 0, &hash
)) return NULL
;
1241 CryptHashData(hash
, bits
, dib_size
, 0);
1243 CryptGetHashParam(hash
, HP_HASHVAL
, NULL
, &hash_size
, 0);
1244 if(hash_size
!= sizeof(hash_buf
)) return NULL
;
1246 CryptGetHashParam(hash
, HP_HASHVAL
, hash_buf
, &hash_size
, 0);
1247 CryptDestroyHash(hash
);
1249 buf
= HeapAlloc(GetProcessHeap(), 0, hash_size
* 2 + 1);
1251 for(i
= 0; i
< hash_size
; i
++)
1253 buf
[i
* 2] = hex
[hash_buf
[i
] >> 4];
1254 buf
[i
* 2 + 1] = hex
[hash_buf
[i
] & 0xf];
1261 static void reset_bounds( HDC hdc
)
1263 current_bounds
= graphics_bounds
;
1264 SetBoundsRect( hdc
, NULL
, DCB_RESET
| DCB_ENABLE
);
1267 static void compare_bounds( HDC hdc
, const char *info
)
1271 GetBoundsRect( hdc
, &rect
, DCB_RESET
);
1273 if (current_bounds
->left
== -1 &&
1274 current_bounds
->top
== -1 &&
1275 current_bounds
->right
== -1 &&
1276 current_bounds
->bottom
== -1)
1278 ok( 0, "missing bounds, got { %d, %d, %d, %d },\n", rect
.left
, rect
.top
, rect
.right
, rect
.bottom
);
1282 ok( !memcmp( current_bounds
, &rect
, sizeof(RECT
) ),
1283 "%s: %s: expected bounds %d,%d,%d,%d got %d,%d,%d,%d\n", dst_format
, info
,
1284 current_bounds
->left
, current_bounds
->top
, current_bounds
->right
, current_bounds
->bottom
,
1285 rect
.left
, rect
.top
, rect
.right
, rect
.bottom
);
1289 static void skip_compare( int count
)
1291 current_sha1
+= count
;
1295 static void compare_hash_broken_todo(HDC hdc
, const BITMAPINFO
*bmi
, BYTE
*bits
, const char *info
, int num_broken
, BOOL todo
)
1297 char *hash
= hash_dib(bmi
, bits
);
1301 /* reset the bits for the next test */
1302 memset( bits
, 0xcc, get_dib_size(bmi
) );
1306 skip("SHA1 hashing unavailable on this platform\n");
1310 for(i
= 0; i
<= num_broken
; i
++)
1312 if(current_sha1
[i
] == NULL
)
1314 ok(current_sha1
[i
] != NULL
, "missing hash, got \"%s\",\n", hash
);
1315 HeapFree(GetProcessHeap(), 0, hash
);
1320 ok_cond
= !strcmp(hash
, *current_sha1
);
1322 for(i
= 1; i
<= num_broken
; i
++)
1323 ok_cond
= ok_cond
|| broken( !strcmp(hash
, current_sha1
[i
]) );
1326 ok( ok_cond
, "%s: %s: expected hash %s got %s\n",
1327 dst_format
, info
, *current_sha1
, hash
);
1329 current_sha1
+= num_broken
+ 1;
1331 HeapFree(GetProcessHeap(), 0, hash
);
1333 compare_bounds( hdc
, info
);
1336 static void compare_hash(HDC hdc
, const BITMAPINFO
*bmi
, BYTE
*bits
, const char *info
)
1338 compare_hash_broken_todo(hdc
, bmi
, bits
, info
, 0, FALSE
);
1341 static const RECT bias_check
[] =
1343 {100, 100, 200, 150},
1344 {100, 100, 150, 200},
1345 {100, 100, 50, 200},
1353 static const RECT hline_clips
[] =
1355 {120, 120, 140, 120}, /* unclipped */
1356 {100, 122, 140, 122}, /* l edgecase */
1357 { 99, 124, 140, 124}, /* l edgecase clipped */
1358 {120, 126, 200, 126}, /* r edgecase */
1359 {120, 128, 201, 128}, /* r edgecase clipped */
1360 { 99, 130, 201, 130}, /* l and r clipped */
1361 {120, 100, 140, 100}, /* t edgecase */
1362 {120, 99, 140, 99}, /* t edgecase clipped */
1363 {120, 199, 140, 199}, /* b edgecase */
1364 {120, 200, 140, 200}, /* b edgecase clipped */
1365 {120, 132, 310, 132}, /* inside two clip rects */
1366 { 10, 134, 101, 134}, /* r end on l edgecase */
1367 { 10, 136, 100, 136}, /* r end on l edgecase clipped */
1368 {199, 138, 220, 138}, /* l end on r edgecase */
1369 {200, 140, 220, 140} /* l end on r edgecase clipped */
1372 static const RECT vline_clips
[] =
1374 {120, 120, 120, 140}, /* unclipped */
1375 {100, 120, 100, 140}, /* l edgecase */
1376 { 99, 120, 99, 140}, /* l edgecase clipped */
1377 {199, 120, 199, 140}, /* r edgecase */
1378 {200, 120, 200, 140}, /* r edgecase clipped */
1379 {122, 99, 122, 201}, /* t and b clipped */
1380 {124, 100, 124, 140}, /* t edgecase */
1381 {126, 99, 126, 140}, /* t edgecase clipped */
1382 {128, 120, 128, 200}, /* b edgecase */
1383 {130, 120, 130, 201}, /* b edgecase clipped */
1384 {132, 12, 132, 140}, /* inside two clip rects */
1385 {134, 90, 134, 101}, /* b end on t edgecase */
1386 {136, 90, 136, 100}, /* b end on t edgecase clipped */
1387 {138, 199, 138, 220}, /* t end on b edgecase */
1388 {140, 200, 140, 220} /* t end on b edgecase clipped */
1391 static const RECT line_clips
[] =
1393 { 90, 110, 310, 120},
1394 { 90, 120, 295, 130},
1395 { 90, 190, 110, 240}, /* totally clipped, moving outcodes */
1396 { 90, 130, 100, 135}, /* totally clipped, end pt on l edge */
1397 { 90, 132, 101, 137}, /* end pt just inside l edge */
1398 {200, 140, 210, 141}, /* totally clipped, start pt on r edge */
1399 {199, 142, 210, 143} /* start pt just inside r edge */
1402 static const RECT wide_lines
[] =
1408 { 10, 100, 10, 200},
1409 { 21, 100, 21, 200},
1410 { 40, 200, 40, 100},
1411 { 61, 200, 61, 100},
1414 static const POINT poly_lines
[] =
1416 {100, 100}, {200, 100}, {200, 200}, {100, 200}
1419 static const POINT polypoly_lines
[] =
1421 {100, 100}, {200, 100}, {200, 100}, {200, 200}
1424 static const DWORD polypoly_counts
[] =
1426 sizeof(polypoly_lines
)/sizeof(polypoly_lines
[0])
1429 static const RECT patblt_clips
[] =
1431 {120, 120, 140, 126}, /* unclipped */
1432 {100, 130, 140, 136}, /* l edgecase */
1433 { 99, 140, 140, 146}, /* l edgecase clipped */
1434 {180, 130, 200, 136}, /* r edgecase */
1435 {180, 140, 201, 146}, /* r edgecase clipped */
1436 {120, 100, 130, 110}, /* t edgecase */
1437 {140, 99, 150, 110}, /* t edgecase clipped */
1438 {120, 180, 130, 200}, /* b edgecase */
1439 {140, 180, 150, 201}, /* b edgecase */
1440 {199, 150, 210, 156}, /* l edge on r edgecase */
1441 {200, 160, 210, 166}, /* l edge on r edgecase clipped */
1442 { 90, 150, 101, 156}, /* r edge on l edgecase */
1443 { 90, 160, 100, 166}, /* r edge on l edgecase clipped */
1444 {160, 90, 166, 101}, /* b edge on t edgecase */
1445 {170, 90, 176, 101}, /* b edge on t edgecase clipped */
1446 {160, 199, 166, 210}, /* t edge on b edgecase */
1447 {170, 200, 176, 210}, /* t edge on b edgecase clipped */
1450 static const RECT rectangles
[] =
1453 {250, 100, 350, 10},
1454 {120, 10, 120, 20}, /* zero width */
1455 {120, 10, 130, 10}, /* zero height */
1456 {120, 40, 121, 41}, /* 1 x 1 */
1457 {130, 50, 132, 52}, /* 2 x 2 */
1458 {140, 60, 143, 63}, /* 3 x 3 */
1459 {150, 70, 154, 74}, /* 4 x 4 */
1460 {120, 20, 121, 30}, /* width == 1 */
1461 {130, 20, 132, 30}, /* width == 2 */
1462 {140, 20, 143, 30}, /* width == 3 */
1463 {200, 20, 210, 21}, /* height == 1 */
1464 {200, 30, 210, 32}, /* height == 2 */
1465 {200, 40, 210, 43} /* height == 3 */
1468 static const BITMAPINFOHEADER dib_brush_header_8888
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 32, BI_RGB
, 0, 0, 0, 0, 0};
1469 static const BITMAPINFOHEADER dib_brush_header_24
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 24, BI_RGB
, 0, 0, 0, 0, 0};
1470 static const BITMAPINFOHEADER dib_brush_header_555
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 16, BI_RGB
, 0, 0, 0, 0, 0};
1471 static const BITMAPINFOHEADER dib_brush_header_8
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 8, BI_RGB
, 0, 0, 0, 0, 0};
1472 static const BITMAPINFOHEADER dib_brush_header_4
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 4, BI_RGB
, 0, 0, 0, 0, 0};
1473 static const BITMAPINFOHEADER dib_brush_header_1
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 1, BI_RGB
, 0, 0, 0, 0, 0};
1475 static const BYTE rle8_data
[20] = { 0x03, 0x02, 0x04, 0xf0, 0x00, 0x00, /* 2, 2, 2, f0, f0, f0, f0, <eol> */
1476 0x00, 0x03, 0x04, 0x05, 0x06, 0x00, /* 4, 5, 6, <pad> */
1477 0x00, 0x02, 0x01, 0x02, 0x05, 0x80, /* dx=1, dy=2, 80, 80, 80, 80, (80) */
1478 0x00, 0x01 }; /* <eod> */
1480 static const DWORD four_by_four_data
[16] = { 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1481 0xffffff, 0x00ffff, 0xff00ff, 0xffff00,
1482 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1483 0xffffff, 0x00ffff, 0xff00ff, 0xffff00 };
1485 static const DWORD ddb_brush_bits
[8] = { 0x11112222, 0x33334444, 0x55556666, 0x77778888,
1486 0xaaaaaaaa, 0x00000000, 0x98765432, 0xabcdef00 };
1488 static const RGBQUAD default_palette_1
[2] =
1490 { 0x00, 0x00, 0x00 }, { 0xff, 0xff, 0xff }
1493 static const RGBQUAD default_palette_4
[16] =
1495 { 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80 }, { 0x00, 0x80, 0x00 }, { 0x00, 0x80, 0x80 },
1496 { 0x80, 0x00, 0x00 }, { 0x80, 0x00, 0x80 }, { 0x80, 0x80, 0x00 }, { 0x80, 0x80, 0x80 },
1497 { 0xc0, 0xc0, 0xc0 }, { 0x00, 0x00, 0xff }, { 0x00, 0xff, 0x00 }, { 0x00, 0xff, 0xff },
1498 { 0xff, 0x00, 0x00 }, { 0xff, 0x00, 0xff }, { 0xff, 0xff, 0x00 }, { 0xff, 0xff, 0xff },
1501 static const RGBQUAD default_palette_8
[256] =
1503 { 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80 }, { 0x00, 0x80, 0x00 }, { 0x00, 0x80, 0x80 },
1504 { 0x80, 0x00, 0x00 }, { 0x80, 0x00, 0x80 }, { 0x80, 0x80, 0x00 }, { 0xc0, 0xc0, 0xc0 },
1505 { 0xc0, 0xdc, 0xc0 }, { 0xf0, 0xca, 0xa6 }, { 0x00, 0x20, 0x40 }, { 0x00, 0x20, 0x60 },
1506 { 0x00, 0x20, 0x80 }, { 0x00, 0x20, 0xa0 }, { 0x00, 0x20, 0xc0 }, { 0x00, 0x20, 0xe0 },
1507 { 0x00, 0x40, 0x00 }, { 0x00, 0x40, 0x20 }, { 0x00, 0x40, 0x40 }, { 0x00, 0x40, 0x60 },
1508 { 0x00, 0x40, 0x80 }, { 0x00, 0x40, 0xa0 }, { 0x00, 0x40, 0xc0 }, { 0x00, 0x40, 0xe0 },
1509 { 0x00, 0x60, 0x00 }, { 0x00, 0x60, 0x20 }, { 0x00, 0x60, 0x40 }, { 0x00, 0x60, 0x60 },
1510 { 0x00, 0x60, 0x80 }, { 0x00, 0x60, 0xa0 }, { 0x00, 0x60, 0xc0 }, { 0x00, 0x60, 0xe0 },
1511 { 0x00, 0x80, 0x00 }, { 0x00, 0x80, 0x20 }, { 0x00, 0x80, 0x40 }, { 0x00, 0x80, 0x60 },
1512 { 0x00, 0x80, 0x80 }, { 0x00, 0x80, 0xa0 }, { 0x00, 0x80, 0xc0 }, { 0x00, 0x80, 0xe0 },
1513 { 0x00, 0xa0, 0x00 }, { 0x00, 0xa0, 0x20 }, { 0x00, 0xa0, 0x40 }, { 0x00, 0xa0, 0x60 },
1514 { 0x00, 0xa0, 0x80 }, { 0x00, 0xa0, 0xa0 }, { 0x00, 0xa0, 0xc0 }, { 0x00, 0xa0, 0xe0 },
1515 { 0x00, 0xc0, 0x00 }, { 0x00, 0xc0, 0x20 }, { 0x00, 0xc0, 0x40 }, { 0x00, 0xc0, 0x60 },
1516 { 0x00, 0xc0, 0x80 }, { 0x00, 0xc0, 0xa0 }, { 0x00, 0xc0, 0xc0 }, { 0x00, 0xc0, 0xe0 },
1517 { 0x00, 0xe0, 0x00 }, { 0x00, 0xe0, 0x20 }, { 0x00, 0xe0, 0x40 }, { 0x00, 0xe0, 0x60 },
1518 { 0x00, 0xe0, 0x80 }, { 0x00, 0xe0, 0xa0 }, { 0x00, 0xe0, 0xc0 }, { 0x00, 0xe0, 0xe0 },
1519 { 0x40, 0x00, 0x00 }, { 0x40, 0x00, 0x20 }, { 0x40, 0x00, 0x40 }, { 0x40, 0x00, 0x60 },
1520 { 0x40, 0x00, 0x80 }, { 0x40, 0x00, 0xa0 }, { 0x40, 0x00, 0xc0 }, { 0x40, 0x00, 0xe0 },
1521 { 0x40, 0x20, 0x00 }, { 0x40, 0x20, 0x20 }, { 0x40, 0x20, 0x40 }, { 0x40, 0x20, 0x60 },
1522 { 0x40, 0x20, 0x80 }, { 0x40, 0x20, 0xa0 }, { 0x40, 0x20, 0xc0 }, { 0x40, 0x20, 0xe0 },
1523 { 0x40, 0x40, 0x00 }, { 0x40, 0x40, 0x20 }, { 0x40, 0x40, 0x40 }, { 0x40, 0x40, 0x60 },
1524 { 0x40, 0x40, 0x80 }, { 0x40, 0x40, 0xa0 }, { 0x40, 0x40, 0xc0 }, { 0x40, 0x40, 0xe0 },
1525 { 0x40, 0x60, 0x00 }, { 0x40, 0x60, 0x20 }, { 0x40, 0x60, 0x40 }, { 0x40, 0x60, 0x60 },
1526 { 0x40, 0x60, 0x80 }, { 0x40, 0x60, 0xa0 }, { 0x40, 0x60, 0xc0 }, { 0x40, 0x60, 0xe0 },
1527 { 0x40, 0x80, 0x00 }, { 0x40, 0x80, 0x20 }, { 0x40, 0x80, 0x40 }, { 0x40, 0x80, 0x60 },
1528 { 0x40, 0x80, 0x80 }, { 0x40, 0x80, 0xa0 }, { 0x40, 0x80, 0xc0 }, { 0x40, 0x80, 0xe0 },
1529 { 0x40, 0xa0, 0x00 }, { 0x40, 0xa0, 0x20 }, { 0x40, 0xa0, 0x40 }, { 0x40, 0xa0, 0x60 },
1530 { 0x40, 0xa0, 0x80 }, { 0x40, 0xa0, 0xa0 }, { 0x40, 0xa0, 0xc0 }, { 0x40, 0xa0, 0xe0 },
1531 { 0x40, 0xc0, 0x00 }, { 0x40, 0xc0, 0x20 }, { 0x40, 0xc0, 0x40 }, { 0x40, 0xc0, 0x60 },
1532 { 0x40, 0xc0, 0x80 }, { 0x40, 0xc0, 0xa0 }, { 0x40, 0xc0, 0xc0 }, { 0x40, 0xc0, 0xe0 },
1533 { 0x40, 0xe0, 0x00 }, { 0x40, 0xe0, 0x20 }, { 0x40, 0xe0, 0x40 }, { 0x40, 0xe0, 0x60 },
1534 { 0x40, 0xe0, 0x80 }, { 0x40, 0xe0, 0xa0 }, { 0x40, 0xe0, 0xc0 }, { 0x40, 0xe0, 0xe0 },
1535 { 0x80, 0x00, 0x00 }, { 0x80, 0x00, 0x20 }, { 0x80, 0x00, 0x40 }, { 0x80, 0x00, 0x60 },
1536 { 0x80, 0x00, 0x80 }, { 0x80, 0x00, 0xa0 }, { 0x80, 0x00, 0xc0 }, { 0x80, 0x00, 0xe0 },
1537 { 0x80, 0x20, 0x00 }, { 0x80, 0x20, 0x20 }, { 0x80, 0x20, 0x40 }, { 0x80, 0x20, 0x60 },
1538 { 0x80, 0x20, 0x80 }, { 0x80, 0x20, 0xa0 }, { 0x80, 0x20, 0xc0 }, { 0x80, 0x20, 0xe0 },
1539 { 0x80, 0x40, 0x00 }, { 0x80, 0x40, 0x20 }, { 0x80, 0x40, 0x40 }, { 0x80, 0x40, 0x60 },
1540 { 0x80, 0x40, 0x80 }, { 0x80, 0x40, 0xa0 }, { 0x80, 0x40, 0xc0 }, { 0x80, 0x40, 0xe0 },
1541 { 0x80, 0x60, 0x00 }, { 0x80, 0x60, 0x20 }, { 0x80, 0x60, 0x40 }, { 0x80, 0x60, 0x60 },
1542 { 0x80, 0x60, 0x80 }, { 0x80, 0x60, 0xa0 }, { 0x80, 0x60, 0xc0 }, { 0x80, 0x60, 0xe0 },
1543 { 0x80, 0x80, 0x00 }, { 0x80, 0x80, 0x20 }, { 0x80, 0x80, 0x40 }, { 0x80, 0x80, 0x60 },
1544 { 0x80, 0x80, 0x80 }, { 0x80, 0x80, 0xa0 }, { 0x80, 0x80, 0xc0 }, { 0x80, 0x80, 0xe0 },
1545 { 0x80, 0xa0, 0x00 }, { 0x80, 0xa0, 0x20 }, { 0x80, 0xa0, 0x40 }, { 0x80, 0xa0, 0x60 },
1546 { 0x80, 0xa0, 0x80 }, { 0x80, 0xa0, 0xa0 }, { 0x80, 0xa0, 0xc0 }, { 0x80, 0xa0, 0xe0 },
1547 { 0x80, 0xc0, 0x00 }, { 0x80, 0xc0, 0x20 }, { 0x80, 0xc0, 0x40 }, { 0x80, 0xc0, 0x60 },
1548 { 0x80, 0xc0, 0x80 }, { 0x80, 0xc0, 0xa0 }, { 0x80, 0xc0, 0xc0 }, { 0x80, 0xc0, 0xe0 },
1549 { 0x80, 0xe0, 0x00 }, { 0x80, 0xe0, 0x20 }, { 0x80, 0xe0, 0x40 }, { 0x80, 0xe0, 0x60 },
1550 { 0x80, 0xe0, 0x80 }, { 0x80, 0xe0, 0xa0 }, { 0x80, 0xe0, 0xc0 }, { 0x80, 0xe0, 0xe0 },
1551 { 0xc0, 0x00, 0x00 }, { 0xc0, 0x00, 0x20 }, { 0xc0, 0x00, 0x40 }, { 0xc0, 0x00, 0x60 },
1552 { 0xc0, 0x00, 0x80 }, { 0xc0, 0x00, 0xa0 }, { 0xc0, 0x00, 0xc0 }, { 0xc0, 0x00, 0xe0 },
1553 { 0xc0, 0x20, 0x00 }, { 0xc0, 0x20, 0x20 }, { 0xc0, 0x20, 0x40 }, { 0xc0, 0x20, 0x60 },
1554 { 0xc0, 0x20, 0x80 }, { 0xc0, 0x20, 0xa0 }, { 0xc0, 0x20, 0xc0 }, { 0xc0, 0x20, 0xe0 },
1555 { 0xc0, 0x40, 0x00 }, { 0xc0, 0x40, 0x20 }, { 0xc0, 0x40, 0x40 }, { 0xc0, 0x40, 0x60 },
1556 { 0xc0, 0x40, 0x80 }, { 0xc0, 0x40, 0xa0 }, { 0xc0, 0x40, 0xc0 }, { 0xc0, 0x40, 0xe0 },
1557 { 0xc0, 0x60, 0x00 }, { 0xc0, 0x60, 0x20 }, { 0xc0, 0x60, 0x40 }, { 0xc0, 0x60, 0x60 },
1558 { 0xc0, 0x60, 0x80 }, { 0xc0, 0x60, 0xa0 }, { 0xc0, 0x60, 0xc0 }, { 0xc0, 0x60, 0xe0 },
1559 { 0xc0, 0x80, 0x00 }, { 0xc0, 0x80, 0x20 }, { 0xc0, 0x80, 0x40 }, { 0xc0, 0x80, 0x60 },
1560 { 0xc0, 0x80, 0x80 }, { 0xc0, 0x80, 0xa0 }, { 0xc0, 0x80, 0xc0 }, { 0xc0, 0x80, 0xe0 },
1561 { 0xc0, 0xa0, 0x00 }, { 0xc0, 0xa0, 0x20 }, { 0xc0, 0xa0, 0x40 }, { 0xc0, 0xa0, 0x60 },
1562 { 0xc0, 0xa0, 0x80 }, { 0xc0, 0xa0, 0xa0 }, { 0xc0, 0xa0, 0xc0 }, { 0xc0, 0xa0, 0xe0 },
1563 { 0xc0, 0xc0, 0x00 }, { 0xc0, 0xc0, 0x20 }, { 0xc0, 0xc0, 0x40 }, { 0xc0, 0xc0, 0x60 },
1564 { 0xc0, 0xc0, 0x80 }, { 0xc0, 0xc0, 0xa0 }, { 0xf0, 0xfb, 0xff }, { 0xa4, 0xa0, 0xa0 },
1565 { 0x80, 0x80, 0x80 }, { 0x00, 0x00, 0xff }, { 0x00, 0xff, 0x00 }, { 0x00, 0xff, 0xff },
1566 { 0xff, 0x00, 0x00 }, { 0xff, 0x00, 0xff }, { 0xff, 0xff, 0x00 }, { 0xff, 0xff, 0xff }
1569 static HPALETTE
create_default_palette( int bpp
)
1571 char pal_buffer
[sizeof(LOGPALETTE
) + 255 * sizeof(PALETTEENTRY
)];
1572 LOGPALETTE
*pal
= (LOGPALETTE
*)pal_buffer
;
1573 PALETTEENTRY
*entries
= pal
->palPalEntry
;
1576 pal
->palVersion
= 0x300;
1577 pal
->palNumEntries
= 1 << bpp
;
1581 for (i
= 0; i
< 2; i
++)
1583 entries
[i
].peRed
= default_palette_1
[i
].rgbRed
;
1584 entries
[i
].peGreen
= default_palette_1
[i
].rgbGreen
;
1585 entries
[i
].peBlue
= default_palette_1
[i
].rgbBlue
;
1586 entries
[i
].peFlags
= 0;
1590 for (i
= 0; i
< 16; i
++)
1592 entries
[i
].peRed
= default_palette_4
[i
].rgbRed
;
1593 entries
[i
].peGreen
= default_palette_4
[i
].rgbGreen
;
1594 entries
[i
].peBlue
= default_palette_4
[i
].rgbBlue
;
1595 entries
[i
].peFlags
= 0;
1599 for (i
= 0; i
< 256; i
++)
1601 entries
[i
].peRed
= default_palette_8
[i
].rgbRed
;
1602 entries
[i
].peGreen
= default_palette_8
[i
].rgbGreen
;
1603 entries
[i
].peBlue
= default_palette_8
[i
].rgbBlue
;
1604 entries
[i
].peFlags
= 0;
1608 return CreatePalette( pal
);
1611 static inline void solid_patblt( HDC hdc
, int x
, int y
, int width
, int height
, COLORREF color
)
1613 HBRUSH brush
= CreateSolidBrush( color
);
1614 brush
= SelectObject( hdc
, brush
);
1615 PatBlt( hdc
, x
, y
, width
, height
, PATCOPY
);
1616 DeleteObject( SelectObject( hdc
, brush
) );
1619 static void draw_graphics(HDC hdc
, const BITMAPINFO
*bmi
, BYTE
*bits
)
1621 char pal_buffer
[sizeof(LOGPALETTE
) + 255 * sizeof(PALETTEENTRY
)];
1622 LOGPALETTE
*pal
= (LOGPALETTE
*)pal_buffer
;
1623 PALETTEENTRY
*entries
= pal
->palPalEntry
;
1624 HPEN solid_pen
, dashed_pen
, wide_pen
, orig_pen
;
1626 HBRUSH solid_brush
, dib_brush
, hatch_brush
, orig_brush
;
1628 INT i
, j
, x
, y
, hatch_style
;
1631 BYTE dib_src_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
)];
1632 BYTE dib_brush_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
) + 16 * 16 * sizeof(DWORD
)]; /* Enough for 16 x 16 at 32 bpp */
1633 BITMAPINFO
*src_bi
= (BITMAPINFO
*)dib_src_buf
;
1634 BITMAPINFO
*brush_bi
= (BITMAPINFO
*)dib_brush_buf
;
1635 RGBQUAD
*brush_colors
= brush_bi
->bmiColors
;
1636 BYTE
*brush_bits
, *src_bits
;
1637 BOOL ret
, dib_is_1bpp
= (bmi
->bmiHeader
.biBitCount
== 1);
1638 BOOL dib_is_8bpp_gray
= (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiColors
[1].rgbRed
== 1);
1639 BLENDFUNCTION blend
;
1640 COLORREF old_text
, old_bkgnd
;
1641 HPALETTE hpal
, old_hpal
;
1643 blend
.BlendOp
= AC_SRC_OVER
;
1644 blend
.BlendFlags
= 0;
1646 reset_bounds( hdc
);
1648 memset(bits
, 0xcc, get_dib_size(bmi
));
1649 compare_hash(hdc
, bmi
, bits
, "empty");
1651 src_dc
= CreateCompatibleDC( 0 );
1652 solid_pen
= CreatePen(PS_SOLID
, 1, RGB(0, 0, 0xff));
1653 orig_pen
= SelectObject(hdc
, solid_pen
);
1654 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1656 /* horizontal and vertical lines */
1657 for(i
= 1; i
<= 16; i
++)
1660 MoveToEx(hdc
, 10, i
* 3, NULL
);
1661 LineTo(hdc
, 100, i
* 3); /* l -> r */
1662 MoveToEx(hdc
, 100, 50 + i
* 3, NULL
);
1663 LineTo(hdc
, 10, 50 + i
* 3); /* r -> l */
1664 MoveToEx(hdc
, 120 + i
* 3, 10, NULL
);
1665 LineTo(hdc
, 120 + i
* 3, 100); /* t -> b */
1666 MoveToEx(hdc
, 170 + i
* 3, 100, NULL
);
1667 LineTo(hdc
, 170 + i
* 3, 10); /* b -> t */
1669 compare_hash(hdc
, bmi
, bits
, "h and v solid lines");
1671 /* diagonal lines */
1672 SetROP2(hdc
, R2_COPYPEN
);
1673 for(i
= 0; i
< 16; i
++)
1675 double s
= sin(M_PI
* i
/ 8.0);
1676 double c
= cos(M_PI
* i
/ 8.0);
1678 MoveToEx(hdc
, 200.5 + 10 * c
, 200.5 + 10 * s
, NULL
);
1679 LineTo(hdc
, 200.5 + 100 * c
, 200.5 + 100 * s
);
1681 compare_hash(hdc
, bmi
, bits
, "diagonal solid lines");
1683 for(i
= 0; i
< sizeof(bias_check
) / sizeof(bias_check
[0]); i
++)
1685 MoveToEx(hdc
, bias_check
[i
].left
, bias_check
[i
].top
, NULL
);
1686 LineTo(hdc
, bias_check
[i
].right
, bias_check
[i
].bottom
);
1688 compare_hash(hdc
, bmi
, bits
, "more diagonal solid lines");
1690 /* solid brush PatBlt */
1691 solid_brush
= CreateSolidBrush(RGB(0x33, 0xaa, 0xff));
1692 orig_brush
= SelectObject(hdc
, solid_brush
);
1694 for(i
= 0, y
= 10; i
< 256; i
++)
1696 ret
= PatBlt(hdc
, 10, y
, 100, 10, rop3
[i
]);
1698 if(rop_uses_src(rop3
[i
]))
1699 ok(ret
== FALSE
, "got TRUE for %x\n", rop3
[i
]);
1702 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1707 compare_hash(hdc
, bmi
, bits
, "solid patblt");
1710 hrgn
= CreateRectRgn(10, 10, 200, 20);
1711 hrgn2
= CreateRectRgn(100, 100, 200, 200);
1712 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1713 SetRectRgn(hrgn2
, 290, 100, 300, 200);
1714 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1715 ExtSelectClipRgn(hdc
, hrgn
, RGN_COPY
);
1716 DeleteObject(hrgn2
);
1718 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1720 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1721 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1723 compare_hash(hdc
, bmi
, bits
, "clipped solid hlines");
1725 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1727 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1728 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1730 compare_hash(hdc
, bmi
, bits
, "clipped solid vlines");
1732 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1734 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1735 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1737 compare_hash(hdc
, bmi
, bits
, "clipped solid diagonal lines");
1739 /* clipped PatBlt */
1740 for(i
= 0; i
< sizeof(patblt_clips
) / sizeof(patblt_clips
[0]); i
++)
1742 PatBlt(hdc
, patblt_clips
[i
].left
, patblt_clips
[i
].top
,
1743 patblt_clips
[i
].right
- patblt_clips
[i
].left
,
1744 patblt_clips
[i
].bottom
- patblt_clips
[i
].top
, PATCOPY
);
1746 compare_hash(hdc
, bmi
, bits
, "clipped patblt");
1748 /* clipped dashed lines */
1749 dashed_pen
= CreatePen(PS_DASH
, 1, RGB(0xff, 0, 0));
1750 SelectObject(hdc
, dashed_pen
);
1751 SetBkMode(hdc
, TRANSPARENT
);
1752 SetBkColor(hdc
, RGB(0, 0xff, 0));
1754 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1756 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1757 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1759 compare_hash(hdc
, bmi
, bits
, "clipped dashed hlines");
1761 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1763 MoveToEx(hdc
, hline_clips
[i
].right
- 1, hline_clips
[i
].bottom
, NULL
);
1764 LineTo(hdc
, hline_clips
[i
].left
- 1, hline_clips
[i
].top
);
1766 compare_hash(hdc
, bmi
, bits
, "clipped dashed hlines r -> l");
1768 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1770 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1771 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1773 compare_hash(hdc
, bmi
, bits
, "clipped dashed vlines");
1775 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1777 MoveToEx(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
- 1, NULL
);
1778 LineTo(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
- 1);
1780 compare_hash(hdc
, bmi
, bits
, "clipped dashed vlines b -> t");
1782 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1784 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1785 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1787 compare_hash(hdc
, bmi
, bits
, "clipped dashed diagonal lines");
1789 SetBkMode(hdc
, OPAQUE
);
1791 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1793 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1794 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1796 compare_hash(hdc
, bmi
, bits
, "clipped opaque dashed diagonal lines");
1798 ExtSelectClipRgn(hdc
, NULL
, RGN_COPY
);
1800 /* 8888 DIB pattern brush */
1802 brush_bi
->bmiHeader
= dib_brush_header_8888
;
1803 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1804 memset(brush_bits
, 0, 16 * 16 * sizeof(DWORD
));
1805 brush_bits
[2] = 0xff;
1806 brush_bits
[6] = 0xff;
1807 brush_bits
[14] = 0xff;
1808 brush_bits
[65] = 0xff;
1809 brush_bits
[69] = 0xff;
1810 brush_bits
[72] = 0xff;
1812 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1814 SelectObject(hdc
, dib_brush
);
1815 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1817 for(i
= 0, y
= 10; i
< 256; i
++)
1819 if(!rop_uses_src(rop3
[i
]))
1821 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1822 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1826 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1827 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8888 dib brush patblt", 1, FALSE
);
1829 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1831 SelectObject(hdc
, orig_brush
);
1832 DeleteObject(dib_brush
);
1834 /* 8888 bottom-up DIB pattern brush */
1836 brush_bi
->bmiHeader
.biHeight
= -brush_bi
->bmiHeader
.biHeight
;
1838 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1840 SelectObject(hdc
, dib_brush
);
1842 /* This used to set the x origin to 100 as well, but
1843 there's a Windows bug for 24 bpp where the brush's x offset
1844 is incorrectly calculated for rops that involve both D and P */
1845 SetBrushOrgEx(hdc
, 4, 100, NULL
);
1847 for(i
= 0, y
= 10; i
< 256; i
++)
1849 if(!rop_uses_src(rop3
[i
]))
1851 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1852 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1856 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1857 compare_hash_broken_todo(hdc
, bmi
, bits
, "bottom-up 8888 dib brush patblt", 1, FALSE
);
1859 compare_hash_broken_todo(hdc
, bmi
, bits
, "bottom-up 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1861 SelectObject(hdc
, orig_brush
);
1862 DeleteObject(dib_brush
);
1864 /* 24 bpp dib pattern brush */
1866 brush_bi
->bmiHeader
= dib_brush_header_24
;
1867 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1868 memset(brush_bits
, 0, 16 * 16 * 3);
1869 brush_bits
[0] = brush_bits
[3] = brush_bits
[6] = brush_bits
[8] = 0xff;
1870 brush_bits
[49] = brush_bits
[52] = 0xff;
1872 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1874 SelectObject(hdc
, dib_brush
);
1875 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1877 for(i
= 0, y
= 10; i
< 256; i
++)
1879 if(!rop_uses_src(rop3
[i
]))
1881 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1882 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1886 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1887 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 24 bpp brush patblt", 1, FALSE
);
1889 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 24 bpp brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1891 SelectObject(hdc
, orig_brush
);
1892 DeleteObject(dib_brush
);
1894 /* 555 dib pattern brush */
1896 brush_bi
->bmiHeader
= dib_brush_header_555
;
1897 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1898 memset(brush_bits
, 0, 16 * 16 * sizeof(WORD
));
1899 brush_bits
[0] = brush_bits
[1] = 0xff;
1900 brush_bits
[32] = brush_bits
[34] = 0x7c;
1902 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1904 SelectObject(hdc
, dib_brush
);
1905 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1907 for(i
= 0, y
= 10; i
< 256; i
++)
1909 if(!rop_uses_src(rop3
[i
]))
1911 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1912 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1916 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1917 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 555 dib brush patblt", 1, FALSE
);
1919 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 555 dib brush patblt", dib_is_1bpp
? 1 : 0, dib_is_1bpp
);
1921 SelectObject(hdc
, orig_brush
);
1922 DeleteObject(dib_brush
);
1924 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1926 /* 8 bpp dib pattern brush */
1928 brush_bi
->bmiHeader
= dib_brush_header_8
;
1929 brush_bi
->bmiHeader
.biClrUsed
= 3;
1930 memset(brush_colors
, 0, brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
));
1931 brush_colors
[0].rgbRed
= 0xff;
1932 brush_colors
[1].rgbRed
= 0xff;
1933 brush_colors
[1].rgbGreen
= 0xff;
1934 brush_colors
[1].rgbBlue
= 0xff;
1936 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
) + brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
);
1937 memset(brush_bits
, 0, 16 * 16 * sizeof(BYTE
));
1938 brush_bits
[0] = brush_bits
[1] = 1;
1939 brush_bits
[16] = brush_bits
[17] = 2;
1940 brush_bits
[32] = brush_bits
[33] = 6;
1942 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1944 SelectObject(hdc
, dib_brush
);
1945 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1947 for(i
= 0, y
= 10; i
< 256; i
++)
1949 if(!rop_uses_src(rop3
[i
]))
1951 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1952 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1956 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1958 SelectObject(hdc
, orig_brush
);
1959 DeleteObject(dib_brush
);
1961 /* 4 bpp dib pattern brush */
1963 brush_bi
->bmiHeader
= dib_brush_header_4
;
1964 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1966 SelectObject(hdc
, dib_brush
);
1967 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1969 for(i
= 0, y
= 10; i
< 256; i
++)
1971 if(!rop_uses_src(rop3
[i
]))
1973 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1974 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1978 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 4 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1980 SelectObject(hdc
, orig_brush
);
1981 DeleteObject(dib_brush
);
1983 /* 1 bpp dib pattern brush */
1985 brush_bi
->bmiHeader
= dib_brush_header_1
;
1986 brush_bi
->bmiHeader
.biClrUsed
= 2;
1987 memset(brush_bits
, 0, 16 * 4);
1988 brush_bits
[0] = 0xf0;
1989 brush_bits
[4] = 0xf0;
1990 brush_bits
[8] = 0xf0;
1992 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1993 SelectObject(hdc
, dib_brush
);
1994 for(i
= 0, y
= 10; i
< 256; i
++)
1996 if(!rop_uses_src(rop3
[i
]))
1998 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1999 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
2004 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 1 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
2006 SelectObject(hdc
, orig_brush
);
2007 DeleteObject(dib_brush
);
2009 /* 1 bpp ddb pattern brush */
2011 old_text
= GetTextColor( hdc
);
2012 old_bkgnd
= GetBkColor( hdc
);
2013 bmp
= CreateBitmap( 16, 16, 1, 1, ddb_brush_bits
);
2014 dib_brush
= CreatePatternBrush( bmp
);
2015 SelectObject(hdc
, dib_brush
);
2016 for(i
= 0, y
= 10; i
< 256; i
++)
2018 SetTextColor(hdc
, RGB( i
, 2*i
, 255 - i
) );
2019 SetBkColor(hdc
, RGB( 255 - i
, i
/ 3, i
) );
2020 if(!rop_uses_src(rop3
[i
]))
2022 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
2023 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
2028 compare_hash_broken_todo(hdc
, bmi
, bits
, "1 bpp ddb brush patblt", dib_is_1bpp
? 3 : 0, dib_is_1bpp
);
2031 SelectObject(hdc
, orig_brush
);
2032 DeleteObject( dib_brush
);
2033 SetBrushOrgEx(hdc
, 0, 0, NULL
);
2034 SetTextColor(hdc
, old_text
);
2035 SetBkColor(hdc
, old_bkgnd
);
2039 SelectObject(hdc
, solid_pen
);
2040 SelectObject(hdc
, solid_brush
);
2042 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
2044 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
, rectangles
[i
].right
, rectangles
[i
].bottom
);
2047 SelectObject(hdc
, dashed_pen
);
2048 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
2050 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
+ 150, rectangles
[i
].right
, rectangles
[i
].bottom
+ 150);
2053 compare_hash(hdc
, bmi
, bits
, "rectangles");
2054 SelectObject(hdc
, solid_pen
);
2058 PaintRgn(hdc
, hrgn
);
2059 compare_hash(hdc
, bmi
, bits
, "PaintRgn");
2061 /* RTL rectangles */
2065 win_skip("Don't have SetLayout\n");
2070 pSetLayout(hdc
, LAYOUT_RTL
);
2071 PaintRgn(hdc
, hrgn
);
2072 PatBlt(hdc
, 10, 250, 10, 10, PATCOPY
);
2073 Rectangle(hdc
, 100, 250, 110, 260);
2074 compare_hash(hdc
, bmi
, bits
, "rtl");
2076 pSetLayout(hdc
, LAYOUT_LTR
);
2078 DeleteObject( hrgn
);
2080 for(i
= 0, y
= 10; i
< 256; i
++)
2082 if(!rop_uses_src(rop3
[i
]))
2084 for(hatch_style
= HS_HORIZONTAL
; hatch_style
<= HS_DIAGCROSS
; hatch_style
++)
2086 hatch_brush
= CreateHatchBrush(hatch_style
, RGB(0xff, 0, 0));
2087 SelectObject(hdc
, hatch_brush
);
2088 ret
= PatBlt(hdc
, 10 + i
+ 30 * hatch_style
, y
, 20, 20, rop3
[i
]);
2089 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
2090 SelectObject(hdc
, orig_brush
);
2091 DeleteObject(hatch_brush
);
2097 compare_hash_broken_todo(hdc
, bmi
, bits
, "hatch brushes", 1, FALSE
); /* nt4 is different */
2099 /* overlapping blits */
2101 orig_brush
= SelectObject(hdc
, solid_brush
);
2103 Rectangle(hdc
, 10, 10, 100, 100);
2104 Rectangle(hdc
, 20, 15, 30, 40);
2105 Rectangle(hdc
, 15, 15, 20, 20);
2106 Rectangle(hdc
, 15, 20, 50, 45);
2107 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, SRCCOPY
);
2108 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY +x, +y");
2110 Rectangle(hdc
, 10, 10, 100, 100);
2111 Rectangle(hdc
, 20, 15, 30, 40);
2112 Rectangle(hdc
, 15, 15, 20, 20);
2113 Rectangle(hdc
, 15, 20, 50, 45);
2114 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, SRCCOPY
);
2115 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
2116 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, -y",1, FALSE
);
2118 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, -y");
2120 Rectangle(hdc
, 10, 10, 100, 100);
2121 Rectangle(hdc
, 20, 15, 30, 40);
2122 Rectangle(hdc
, 15, 15, 20, 20);
2123 Rectangle(hdc
, 15, 20, 50, 45);
2124 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, SRCCOPY
);
2125 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY +x, -y");
2127 Rectangle(hdc
, 10, 10, 100, 100);
2128 Rectangle(hdc
, 20, 15, 30, 40);
2129 Rectangle(hdc
, 15, 15, 20, 20);
2130 Rectangle(hdc
, 15, 20, 50, 45);
2131 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, SRCCOPY
);
2132 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
2133 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, +y", 1, FALSE
);
2135 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, +y" );
2137 Rectangle(hdc
, 10, 10, 100, 100);
2138 Rectangle(hdc
, 20, 15, 30, 40);
2139 Rectangle(hdc
, 15, 15, 20, 20);
2140 Rectangle(hdc
, 15, 20, 50, 45);
2141 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, PATPAINT
);
2142 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, +y");
2144 Rectangle(hdc
, 10, 10, 100, 100);
2145 Rectangle(hdc
, 20, 15, 30, 40);
2146 Rectangle(hdc
, 15, 15, 20, 20);
2147 Rectangle(hdc
, 15, 20, 50, 45);
2148 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, PATPAINT
);
2149 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT -x, -y");
2151 Rectangle(hdc
, 10, 10, 100, 100);
2152 Rectangle(hdc
, 20, 15, 30, 40);
2153 Rectangle(hdc
, 15, 15, 20, 20);
2154 Rectangle(hdc
, 15, 20, 50, 45);
2155 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, PATPAINT
);
2156 if (bmi
->bmiHeader
.biBitCount
>= 24) /* Windows gets this one wrong */
2157 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, -y", 1, FALSE
);
2159 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, -y");
2161 Rectangle(hdc
, 10, 10, 100, 100);
2162 Rectangle(hdc
, 20, 15, 30, 40);
2163 Rectangle(hdc
, 15, 15, 20, 20);
2164 Rectangle(hdc
, 15, 20, 50, 45);
2165 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, PATPAINT
);
2166 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT -x, +y" );
2168 /* blitting with 32-bpp BI_RGB source */
2170 memset( dib_src_buf
, 0, sizeof(dib_src_buf
) );
2171 src_bi
->bmiHeader
.biSize
= sizeof(bmi
->bmiHeader
);
2172 src_bi
->bmiHeader
.biHeight
= 256;
2173 src_bi
->bmiHeader
.biWidth
= 256;
2174 src_bi
->bmiHeader
.biBitCount
= 32;
2175 src_bi
->bmiHeader
.biPlanes
= 1;
2176 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2177 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2178 SelectObject( src_dc
, bmp
);
2179 for (y
= 0; y
< 256; y
++)
2180 for (x
= 0; x
< 256; x
++)
2182 BYTE a
= (x
+ y
) * 2;
2183 BYTE r
= (BYTE
)(y
+ 2 * x
) * a
/ 255;
2184 BYTE g
= (BYTE
)(x
+ y
/ 3) * a
/ 255;
2185 BYTE b
= (BYTE
)(x
/ 3 + 2 * y
) * a
/ 255;
2186 ((DWORD
*)src_bits
)[y
* 256 + x
] = (a
<< 24) | RGB( r
, g
, b
);
2189 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2190 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2191 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp SRCCOPY", 1, FALSE
);
2193 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp SRCCOPY" );
2195 blend
.SourceConstantAlpha
= 0xd0;
2196 blend
.AlphaFormat
= 0;
2197 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2198 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2200 if (!pGdiAlphaBlend
) skip_compare(2);
2201 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp no alpha", 1, FALSE
);
2205 if (!pGdiAlphaBlend
) skip_compare(1);
2206 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp no alpha", 0, dib_is_1bpp
);
2209 blend
.SourceConstantAlpha
= 0xb0;
2210 blend
.AlphaFormat
= AC_SRC_ALPHA
;
2211 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 50, 50, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2212 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2214 if (!pGdiAlphaBlend
) skip_compare(2);
2215 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp alpha", 1, FALSE
);
2219 if (!pGdiAlphaBlend
) skip_compare(1);
2220 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp alpha", 0, dib_is_1bpp
);
2223 /* blitting with 32-bpp r10g10b10 source */
2225 src_bi
->bmiHeader
.biBitCount
= 32;
2226 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2227 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x3ff00000;
2228 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000ffc00;
2229 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000003ff;
2230 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2231 SelectObject( src_dc
, bmp
);
2232 for (y
= 0; y
< 256; y
++)
2233 for (x
= 0; x
< 256; x
++)
2235 WORD r
= (7 * x
+ 3 * y
) % 1024;
2236 WORD g
= (11 * x
+ y
/ 3) % 1024;
2237 WORD b
= (x
/ 3 + 9 * y
) % 1024;
2238 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
<< 20 | g
<< 10 | b
;
2241 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2242 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2243 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp r10g10b10 SRCCOPY", 1, FALSE
);
2245 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp r10g10b10 SRCCOPY" );
2247 /* blitting with 32-bpp b6g6r6 source */
2249 src_bi
->bmiHeader
.biBitCount
= 32;
2250 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2251 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00003f;
2252 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000fc0;
2253 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x03f000;
2254 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2255 SelectObject( src_dc
, bmp
);
2256 for (y
= 0; y
< 256; y
++)
2257 for (x
= 0; x
< 256; x
++)
2259 BYTE r
= (y
+ 2 * x
) % 64;
2260 BYTE g
= (x
+ y
/ 3) % 64;
2261 BYTE b
= (x
/ 3 + 2 * y
) % 64;
2262 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
| g
<< 6 | b
<< 12;
2265 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2266 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2267 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp b6g6r6 SRCCOPY", 1, FALSE
);
2269 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp b6g6r6 SRCCOPY" );
2271 /* blitting with 24-bpp source */
2273 src_bi
->bmiHeader
.biBitCount
= 24;
2274 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2275 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2276 DeleteObject( SelectObject( src_dc
, bmp
) );
2277 for (y
= 0; y
< 256; y
++)
2278 for (x
= 0; x
< 256; x
++)
2280 src_bits
[(y
* 256 + x
) * 3 + 0] = x
+ 3 * y
;
2281 src_bits
[(y
* 256 + x
) * 3 + 1] = 2 * x
+ 7 * y
;
2282 src_bits
[(y
* 256 + x
) * 3 + 2] = 5 * x
+ 12 * y
;
2285 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2286 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2287 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 24-bpp SRCCOPY", 1, FALSE
);
2289 compare_hash(hdc
, bmi
, bits
, "BitBlt src 24-bpp SRCCOPY" );
2291 blend
.SourceConstantAlpha
= 0xe0;
2292 blend
.AlphaFormat
= 0;
2293 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2294 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2296 if (!pGdiAlphaBlend
) skip_compare(2);
2297 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 24-bpp", 1, FALSE
);
2301 if (!pGdiAlphaBlend
) skip_compare(1);
2302 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 24-bpp", 0, dib_is_1bpp
);
2305 /* blitting with 16-bpp BI_RGB source */
2307 src_bi
->bmiHeader
.biBitCount
= 16;
2308 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2309 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2310 DeleteObject( SelectObject( src_dc
, bmp
) );
2311 for (y
= 0; y
< 256; y
++)
2312 for (x
= 0; x
< 256; x
++)
2313 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
2315 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2316 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
2317 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 16-bpp SRCCOPY", 1, FALSE
);
2319 compare_hash(hdc
, bmi
, bits
, "BitBlt src 16-bpp SRCCOPY" );
2321 /* blitting with 16-bpp b4g4r4 source */
2323 src_bi
->bmiHeader
.biBitCount
= 16;
2324 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2325 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00000f;
2326 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x0000f0;
2327 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000f00;
2328 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2329 DeleteObject( SelectObject( src_dc
, bmp
) );
2330 for (y
= 0; y
< 256; y
++)
2331 for (x
= 0; x
< 256; x
++)
2332 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
2334 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2335 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
2336 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 16-bpp b4g4r4 SRCCOPY", 1, FALSE
);
2338 compare_hash(hdc
, bmi
, bits
, "BitBlt src 16-bpp b4g4r4 SRCCOPY" );
2340 /* blitting with 8-bpp source */
2342 src_bi
->bmiHeader
.biBitCount
= 8;
2343 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2344 src_bi
->bmiHeader
.biClrUsed
= 160;
2345 for (i
= 0; i
< 256; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 3) << 8 | (i
/ 2) << 16;
2346 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2347 DeleteObject( SelectObject( src_dc
, bmp
) );
2348 for (y
= 0; y
< 256; y
++)
2349 for (x
= 0; x
< 256; x
++)
2350 src_bits
[y
* 256 + x
] = 3 * x
+ 5 * y
;
2352 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2353 compare_hash(hdc
, bmi
, bits
, "BitBlt src 8-bpp SRCCOPY" );
2355 blend
.SourceConstantAlpha
= 0xd0;
2356 blend
.AlphaFormat
= 0;
2357 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2358 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2360 if (!pGdiAlphaBlend
) skip_compare(2);
2361 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 8-bpp", 1, FALSE
);
2365 if (!pGdiAlphaBlend
) skip_compare(1);
2366 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 8-bpp", 0, dib_is_1bpp
);
2369 /* blitting with 4-bpp source */
2371 src_bi
->bmiHeader
.biBitCount
= 4;
2372 src_bi
->bmiHeader
.biClrUsed
= 12;
2373 for (i
= 0; i
< 16; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 5) << 8 | (i
* 19) << 16;
2374 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2375 DeleteObject( SelectObject( src_dc
, bmp
) );
2376 for (y
= 0; y
< 256; y
++)
2377 for (x
= 0; x
< 256; x
+= 2)
2378 src_bits
[(y
* 256 + x
) / 2] = 7 * x
+ 3 * y
;
2380 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2381 compare_hash(hdc
, bmi
, bits
, "BitBlt src 4-bpp SRCCOPY" );
2383 /* blitting with 1-bpp source */
2385 src_bi
->bmiHeader
.biBitCount
= 1;
2386 src_bi
->bmiHeader
.biClrUsed
= 0;
2387 for (i
= 0; i
< 2; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = (i
+ 37) | (i
* 91) << 8 | (i
* 53) << 16;
2388 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2389 DeleteObject( SelectObject( src_dc
, bmp
) );
2390 for (y
= 0; y
< 256; y
++)
2391 for (x
= 0; x
< 256; x
+= 8)
2392 src_bits
[(y
* 256 + x
) / 8] = 7 * x
+ 3 * y
;
2394 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2395 compare_hash(hdc
, bmi
, bits
, "BitBlt src 1-bpp SRCCOPY" );
2397 blend
.SourceConstantAlpha
= 0x90;
2398 blend
.AlphaFormat
= 0;
2399 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2400 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2402 if (!pGdiAlphaBlend
) skip_compare(2);
2403 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 1-bpp", 1, FALSE
);
2407 if (!pGdiAlphaBlend
) skip_compare(1);
2408 else compare_hash(hdc
, bmi
, bits
, "AlphaBlend src 1-bpp" );
2412 DeleteObject( bmp
);
2414 /* RLE StretchDIBits */
2415 src_bi
->bmiHeader
.biSize
= sizeof(src_bi
->bmiHeader
);
2416 src_bi
->bmiHeader
.biWidth
= 8;
2417 src_bi
->bmiHeader
.biHeight
= 8;
2418 src_bi
->bmiHeader
.biPlanes
= 1;
2419 src_bi
->bmiHeader
.biBitCount
= 8;
2420 src_bi
->bmiHeader
.biCompression
= BI_RLE8
;
2421 src_bi
->bmiHeader
.biClrUsed
= 0;
2422 src_bi
->bmiHeader
.biSizeImage
= sizeof(rle8_data
);
2424 for (i
= 0; i
< 256; i
++)
2426 src_bi
->bmiColors
[i
].rgbRed
= i
;
2427 src_bi
->bmiColors
[i
].rgbGreen
= i
;
2428 src_bi
->bmiColors
[i
].rgbBlue
= i
;
2429 src_bi
->bmiColors
[i
].rgbReserved
= 0;
2432 StretchDIBits( hdc
, 10, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2433 StretchDIBits( hdc
, 100, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2434 StretchDIBits( hdc
, 200, 10, 7, 7, 0, 1, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2435 StretchDIBits( hdc
, 300, 10, 7, 7, 1, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2436 StretchDIBits( hdc
, 400, 10, 16, 16, 0, 0, 8, 8, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2437 compare_hash_broken_todo(hdc
, bmi
, bits
, "rle stretchdibits", 0, dib_is_1bpp
);
2439 /* 32 bpp StretchDIBits */
2441 src_bi
->bmiHeader
.biWidth
= 4;
2442 src_bi
->bmiHeader
.biHeight
= 4;
2443 src_bi
->bmiHeader
.biPlanes
= 1;
2444 src_bi
->bmiHeader
.biBitCount
= 32;
2445 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2446 src_bi
->bmiHeader
.biClrUsed
= 0;
2447 src_bi
->bmiHeader
.biSizeImage
= 0;
2449 ret
= StretchDIBits( hdc
, 10, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2450 ok(ret
== 4, "got %d\n", ret
);
2451 ret
= StretchDIBits( hdc
, 20, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2452 ok(ret
== 4, "got %d\n", ret
);
2453 ret
= StretchDIBits( hdc
, 30, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2454 ok(ret
== 4, "got %d\n", ret
);
2455 ret
= StretchDIBits( hdc
, 40, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2456 ok(ret
== 4, "got %d\n", ret
);
2457 ret
= StretchDIBits( hdc
, 50, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2458 ok(ret
== 4, "got %d\n", ret
);
2459 ret
= StretchDIBits( hdc
, 60, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2460 ok(ret
== 4, "got %d\n", ret
);
2462 src_bi
->bmiHeader
.biHeight
= -4;
2464 ret
= StretchDIBits( hdc
, 10, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2465 ok(ret
== 4, "got %d\n", ret
);
2466 ret
= StretchDIBits( hdc
, 20, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2467 ok(ret
== -4, "got %d\n", ret
);
2468 ret
= StretchDIBits( hdc
, 30, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2469 ok(ret
== 4, "got %d\n", ret
);
2470 ret
= StretchDIBits( hdc
, 40, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2471 ok(ret
== -4, "got %d\n", ret
);
2472 ret
= StretchDIBits( hdc
, 50, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2473 ok(ret
== 4, "got %d\n", ret
);
2474 ret
= StretchDIBits( hdc
, 60, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2475 ok(ret
== -4, "got %d\n", ret
);
2477 compare_hash_broken_todo(hdc
, bmi
, bits
, "stretchdibits", dib_is_8bpp_gray
? 1 : 0, dib_is_8bpp_gray
);
2480 for (i
= 0; i
< 256; i
++)
2482 solid_patblt( hdc
, i
* 2, 10, 1, 1, DIBINDEX(i
) );
2483 solid_patblt( hdc
, i
* 2, 20, 1, 1, PALETTEINDEX(i
) );
2484 solid_patblt( hdc
, i
* 2, 30, 1, 1, RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2485 solid_patblt( hdc
, i
* 2, 40, 1, 1, PALETTERGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2486 for (j
= 0; j
< 256; j
++) solid_patblt( hdc
, i
* 2, 50 + j
, 1, 1, (j
<< 24) | i
);
2489 /* A few extra colors that are interesting in the 1bpp case */
2492 solid_patblt( hdc
, 0, 50, 1, 1, RGB( 0, 0xff, 0 ) );
2493 solid_patblt( hdc
, 2, 50, 1, 1, PALETTERGB( 0, 0xff, 0 ) );
2496 solid_patblt( hdc
, 4, 50, 1, 1, RGB( 0, 0x1, 0xff ) );
2497 solid_patblt( hdc
, 6, 50, 1, 1, PALETTERGB( 0, 0x1, 0xff ) );
2500 solid_patblt( hdc
, 8, 50, 1, 1, RGB( 0xff, 0, 0 ) );
2501 solid_patblt( hdc
, 10, 50, 1, 1, PALETTERGB( 0xff, 0, 0 ) );
2503 compare_hash(hdc
, bmi
, bits
, "Colors");
2505 for (i
= 0; i
< 256; i
++)
2508 s
= SetPixel( hdc
, i
* 2, 10, DIBINDEX(i
) );
2509 g
= GetPixel( hdc
, i
* 2, 10 );
2510 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2512 s
= SetPixel( hdc
, i
* 2, 20, PALETTEINDEX(i
) );
2513 g
= GetPixel( hdc
, i
* 2, 20 );
2514 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2516 s
= SetPixel( hdc
, i
* 2, 30, RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2517 g
= GetPixel( hdc
, i
* 2, 30 );
2518 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2520 s
= SetPixel( hdc
, i
* 2, 40, PALETTERGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2521 g
= GetPixel( hdc
, i
* 2, 40 );
2522 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2524 for (j
= 0; j
< 256; j
++)
2526 s
= SetPixel( hdc
, i
* 2, 50+j
, (j
<< 24) | RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ));
2527 g
= GetPixel( hdc
, i
* 2, 50+j
);
2528 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2530 s
= SetPixel( hdc
, i
* 2 + 1, 50+j
, (j
<< 24) | i
);
2531 g
= GetPixel( hdc
, i
* 2 + 1, 50+j
);
2532 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2536 compare_hash(hdc
, bmi
, bits
, "SetPixel");
2540 if (pGdiGradientFill
)
2544 { 1, 1, 0xff00, 0x8000, 0x0000, 0x8000 },
2545 { 200, 200, 0x0000, 0x0000, 0xff00, 0xff00 },
2546 { 180, 180, 0x1234, 0x5678, 0x9abc, 0xdef0 },
2547 { 300, 300, 0xff00, 0xff00, 0xff00, 0x0000 }
2549 GRADIENT_RECT rect
[] = { { 0, 1 }, { 2, 3 }, { 2, 1 } };
2553 { 250, 0, 0xff00, 0x0000, 0xff00, 0xff00 },
2554 { 500, 500, 0x0000, 0xff00, 0x0000, 0xff00 },
2555 { 0, 500, 0x0000, 0x0000, 0xff00, 0xff00 },
2557 { 10, 0, 0x8000, 0x0000, 0x8000, 0x8000 },
2558 { 0, 20, 0xff00, 0xff00, 0xff00, 0x0000 },
2559 { 5, 30, 0x4000, 0xc000, 0x7000, 0x9000 },
2561 { 30, 0, 0x9000, 0x8800, 0xcc00, 0xff00 },
2562 { 5, 12, 0x9900, 0xaa00, 0xbb00, 0xcc00 },
2563 { 0, 30, 0x5000, 0xd000, 0x9000, 0xbb00 },
2565 { 35, 3, 0xaa00, 0x6500, 0x4300, 0x2100 },
2566 { 50, 6, 0x9800, 0x9800, 0x9800, 0x2000 },
2567 { 60, 10, 0x0100, 0x0200, 0x0300, 0x3000 },
2569 { 60, 2, 0x0700, 0x0800, 0x0900, 0xff00 },
2570 { 73, 10, 0x9900, 0x8800, 0x7700, 0xff00 },
2571 { 66, 23, 0x1100, 0x2200, 0x3300, 0xff00 },
2573 { 80, 1, 0xa000, 0x6000, 0x4000, 0x2000 },
2574 { 76, 9, 0x7000, 0x5000, 0x3000, 0x1000 },
2575 { 85, 23, 0x3300, 0x3300, 0x3300, 0x3300 },
2577 { 90, 4, 0x4400, 0x5500, 0x6600, 0x9900 },
2578 { 95, 12, 0x4500, 0x5600, 0x6700, 0x9900 },
2579 { 85, 14, 0x4600, 0x5700, 0x6800, 0x9900 },
2581 GRADIENT_TRIANGLE tri
[] =
2583 { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 }, { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 },
2584 { 2, 1, 0 }, { 3, 5, 4 }, { 7, 6, 8 }, { 10, 11, 9 }, { 14, 13, 12 }, { 17, 15, 16 }, { 19, 20, 18 }