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 "50d19fe68b2ab4fdbb5d590cdca6dc84a95bab68",
140 "a1fde1094d2c19ddb20871842dae1da73618709e",
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 "50d19fe68b2ab4fdbb5d590cdca6dc84a95bab68",
213 "a1fde1094d2c19ddb20871842dae1da73618709e",
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 "1cb1810b127f509117b38d62a15b67b2347b9145",
286 "f05b3294f25de5fa6d1114104bca97871052ea5a",
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 "467ff4af1e105855874f27fbf84d1d2b0417ab5d",
359 "fb0dcff8a67a88313557ee8b588aaa2004fe7b8b",
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 "a9c2158329c207638cfd2c82cd8a6218efdb28d2",
432 "7f0c4e6874f0c36cee64ff5dec76258ca8822cb2",
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 "6776e0612410e7e200c853721b4ab6ad8b6b81f5",
505 "620a5a520d81971a2d9c30b8d836ba696e11b8dd",
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 "e313ae8f7261b88999757ed0c6f26df85b4f01a5",
582 "47d0bab8664ae0aaa927495d07bb3537cce35f16",
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 "7d80b8289da8a65931f03c74a9ef0aff5f8eb551",
654 "a7a986097e5b553c71bd93fd0ec6037e6bd0f2d1",
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 "9b1cc7b24f8ce15db2af7f4aa8cde8687784dfa2",
732 "cc4a4cea622d825700bccef7d90a5a447d9ca39d",
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 "cb9ea8137eca1450e049879772f5c11a0e11ff0a",
814 "a4b04ed35484de0de61832a8a28bbc7def645622",
815 "515897610714251dd3b54f54fe76a9ed3fd12c53",
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 "d4f3a5ea033adc405c44e1ca137dc908c606dad6",
891 "7103d428ec9a959778120fd6f0dc62dd608ddd63",
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 "1a23839d71d2379ed4e709a5ae6c14639fbe3ab8",
963 "09f8416a780d80be61cbda3d8a05aee418d0ea00",
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 "43560b856907f552df3b9dd1f91e1aa8ab9ff17e",
1035 "8cefa6dcb658487d0715598d5d120677dbfdab42",
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 "ad674a4104c6a1eacaee8f20effdfe31775b4409",
1056 "a7cc69f957d7b533a0a330859a143d701daac73c",
1057 "a955bf088c5edb129289ce65caace48ec95632e4",
1058 "5316d3c558c254479883133cf58cd07ab521d3f0",
1059 "fcbfdb5d60716ea05f2d1896fae7a6e7a8249d35",
1060 "2c140b39cc8d21358fded8959cd655f03d7f0f89",
1061 "121423a38b4ac4743bd516e0a7e88a3863796313",
1062 "7c17635c6c7f62dbf8fd4773d0c503358553d2c7",
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 "f0316a5765a0404760e94cd05b7dc956cae07d26",
1126 "781d8c5cbc28591fd48fce06f984c502fdc6b363",
1127 "df510792a7790cc699532b1420d43c6d4da2ae2f",
1128 "55c26d22f11d80b73383fa57d0fac552d705b092",
1129 "14443b33a9879bf829ed3b06e1aef0d7dcf662cc",
1130 "53ab1fcccd09fa5cbff77497f36a70a3b3cb8b81",
1131 "4842a30dd7fdf38ddc3ddec85c08efe13a0e2e0b",
1132 "cc76db6da5ba1776f20240a5ad97a26a9cdf96b0",
1133 "014f477664a7f4ce4a948d6359a2707119afc8e2",
1134 "1ee4e951743efc8764249fbc7adecefbfec0428e",
1135 "9ab50a663b74577b656e9849484a909d7ac52eeb",
1136 "128eefd2ee043d59dc37918065f687e378e5ca95",
1137 "c642abc651f525332d9d635049646d309e877839",
1138 "8d34215487088b5d4ef63062270ce25c2862643d",
1139 "3dc3075b0c87fdcaabbbae8928303fb2358c15c2",
1140 "bbae6f0659e095a42b420082079663f937065813",
1141 "ca711c69165e1fa5be72993b9a7870ef6d485249",
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(BITMAPINFO
*bmi
)
1219 return ((bmi
->bmiHeader
.biBitCount
* bmi
->bmiHeader
.biWidth
+ 31) >> 3) & ~3;
1222 static inline DWORD
get_dib_size(BITMAPINFO
*bmi
)
1224 return get_stride(bmi
) * abs(bmi
->bmiHeader
.biHeight
);
1227 static char *hash_dib(BITMAPINFO
*bmi
, 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
, 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 todo_wine
ok( ok_cond
, "%s: %s: expected hash %s got %s\n",
1327 dst_format
, info
, *current_sha1
, hash
);
1329 ok( ok_cond
, "%s: %s: expected hash %s got %s\n",
1330 dst_format
, info
, *current_sha1
, hash
);
1332 current_sha1
+= num_broken
+ 1;
1334 HeapFree(GetProcessHeap(), 0, hash
);
1336 compare_bounds( hdc
, info
);
1339 static void compare_hash(HDC hdc
, BITMAPINFO
*bmi
, BYTE
*bits
, const char *info
)
1341 compare_hash_broken_todo(hdc
, bmi
, bits
, info
, 0, FALSE
);
1344 static const RECT bias_check
[] =
1346 {100, 100, 200, 150},
1347 {100, 100, 150, 200},
1348 {100, 100, 50, 200},
1356 static const RECT hline_clips
[] =
1358 {120, 120, 140, 120}, /* unclipped */
1359 {100, 122, 140, 122}, /* l edgecase */
1360 { 99, 124, 140, 124}, /* l edgecase clipped */
1361 {120, 126, 200, 126}, /* r edgecase */
1362 {120, 128, 201, 128}, /* r edgecase clipped */
1363 { 99, 130, 201, 130}, /* l and r clipped */
1364 {120, 100, 140, 100}, /* t edgecase */
1365 {120, 99, 140, 99}, /* t edgecase clipped */
1366 {120, 199, 140, 199}, /* b edgecase */
1367 {120, 200, 140, 200}, /* b edgecase clipped */
1368 {120, 132, 310, 132}, /* inside two clip rects */
1369 { 10, 134, 101, 134}, /* r end on l edgecase */
1370 { 10, 136, 100, 136}, /* r end on l edgecase clipped */
1371 {199, 138, 220, 138}, /* l end on r edgecase */
1372 {200, 140, 220, 140} /* l end on r edgecase clipped */
1375 static const RECT vline_clips
[] =
1377 {120, 120, 120, 140}, /* unclipped */
1378 {100, 120, 100, 140}, /* l edgecase */
1379 { 99, 120, 99, 140}, /* l edgecase clipped */
1380 {199, 120, 199, 140}, /* r edgecase */
1381 {200, 120, 200, 140}, /* r edgecase clipped */
1382 {122, 99, 122, 201}, /* t and b clipped */
1383 {124, 100, 124, 140}, /* t edgecase */
1384 {126, 99, 126, 140}, /* t edgecase clipped */
1385 {128, 120, 128, 200}, /* b edgecase */
1386 {130, 120, 130, 201}, /* b edgecase clipped */
1387 {132, 12, 132, 140}, /* inside two clip rects */
1388 {134, 90, 134, 101}, /* b end on t edgecase */
1389 {136, 90, 136, 100}, /* b end on t edgecase clipped */
1390 {138, 199, 138, 220}, /* t end on b edgecase */
1391 {140, 200, 140, 220} /* t end on b edgecase clipped */
1394 static const RECT line_clips
[] =
1396 { 90, 110, 310, 120},
1397 { 90, 120, 295, 130},
1398 { 90, 190, 110, 240}, /* totally clipped, moving outcodes */
1399 { 90, 130, 100, 135}, /* totally clipped, end pt on l edge */
1400 { 90, 132, 101, 137}, /* end pt just inside l edge */
1401 {200, 140, 210, 141}, /* totally clipped, start pt on r edge */
1402 {199, 142, 210, 143} /* start pt just inside r edge */
1405 static const RECT wide_lines
[] =
1411 { 10, 100, 10, 200},
1412 { 21, 100, 21, 200},
1413 { 40, 200, 40, 100},
1414 { 61, 200, 61, 100},
1417 static const POINT poly_lines
[] =
1419 {100, 100}, {200, 100}, {200, 200}, {100, 200}
1422 static const POINT polypoly_lines
[] =
1424 {100, 100}, {200, 100}, {200, 100}, {200, 200}
1427 static const DWORD polypoly_counts
[] =
1429 sizeof(polypoly_lines
)/sizeof(polypoly_lines
[0])
1432 static const RECT patblt_clips
[] =
1434 {120, 120, 140, 126}, /* unclipped */
1435 {100, 130, 140, 136}, /* l edgecase */
1436 { 99, 140, 140, 146}, /* l edgecase clipped */
1437 {180, 130, 200, 136}, /* r edgecase */
1438 {180, 140, 201, 146}, /* r edgecase clipped */
1439 {120, 100, 130, 110}, /* t edgecase */
1440 {140, 99, 150, 110}, /* t edgecase clipped */
1441 {120, 180, 130, 200}, /* b edgecase */
1442 {140, 180, 150, 201}, /* b edgecase */
1443 {199, 150, 210, 156}, /* l edge on r edgecase */
1444 {200, 160, 210, 166}, /* l edge on r edgecase clipped */
1445 { 90, 150, 101, 156}, /* r edge on l edgecase */
1446 { 90, 160, 100, 166}, /* r edge on l edgecase clipped */
1447 {160, 90, 166, 101}, /* b edge on t edgecase */
1448 {170, 90, 176, 101}, /* b edge on t edgecase clipped */
1449 {160, 199, 166, 210}, /* t edge on b edgecase */
1450 {170, 200, 176, 210}, /* t edge on b edgecase clipped */
1453 static const RECT rectangles
[] =
1456 {250, 100, 350, 10},
1457 {120, 10, 120, 20}, /* zero width */
1458 {120, 10, 130, 10}, /* zero height */
1459 {120, 40, 121, 41}, /* 1 x 1 */
1460 {130, 50, 132, 52}, /* 2 x 2 */
1461 {140, 60, 143, 63}, /* 3 x 3 */
1462 {150, 70, 154, 74}, /* 4 x 4 */
1463 {120, 20, 121, 30}, /* width == 1 */
1464 {130, 20, 132, 30}, /* width == 2 */
1465 {140, 20, 143, 30}, /* width == 3 */
1466 {200, 20, 210, 21}, /* height == 1 */
1467 {200, 30, 210, 32}, /* height == 2 */
1468 {200, 40, 210, 43} /* height == 3 */
1471 static const BITMAPINFOHEADER dib_brush_header_8888
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 32, BI_RGB
, 0, 0, 0, 0, 0};
1472 static const BITMAPINFOHEADER dib_brush_header_24
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 24, BI_RGB
, 0, 0, 0, 0, 0};
1473 static const BITMAPINFOHEADER dib_brush_header_555
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 16, BI_RGB
, 0, 0, 0, 0, 0};
1474 static const BITMAPINFOHEADER dib_brush_header_8
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 8, BI_RGB
, 0, 0, 0, 0, 0};
1475 static const BITMAPINFOHEADER dib_brush_header_4
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 4, BI_RGB
, 0, 0, 0, 0, 0};
1476 static const BITMAPINFOHEADER dib_brush_header_1
= {sizeof(BITMAPINFOHEADER
), 16, -16, 1, 1, BI_RGB
, 0, 0, 0, 0, 0};
1478 static const BYTE rle8_data
[20] = { 0x03, 0x02, 0x04, 0xf0, 0x00, 0x00, /* 2, 2, 2, f0, f0, f0, f0, <eol> */
1479 0x00, 0x03, 0x04, 0x05, 0x06, 0x00, /* 4, 5, 6, <pad> */
1480 0x00, 0x02, 0x01, 0x02, 0x05, 0x80, /* dx=1, dy=2, 80, 80, 80, 80, (80) */
1481 0x00, 0x01 }; /* <eod> */
1483 static const DWORD four_by_four_data
[16] = { 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1484 0xffffff, 0x00ffff, 0xff00ff, 0xffff00,
1485 0x000000, 0xff0000, 0x00ff00, 0x0000ff,
1486 0xffffff, 0x00ffff, 0xff00ff, 0xffff00 };
1488 static const DWORD ddb_brush_bits
[8] = { 0x11112222, 0x33334444, 0x55556666, 0x77778888,
1489 0xaaaaaaaa, 0x00000000, 0x98765432, 0xabcdef00 };
1491 static inline void solid_patblt( HDC hdc
, int x
, int y
, int width
, int height
, COLORREF color
)
1493 HBRUSH brush
= CreateSolidBrush( color
);
1494 brush
= SelectObject( hdc
, brush
);
1495 PatBlt( hdc
, x
, y
, width
, height
, PATCOPY
);
1496 DeleteObject( SelectObject( hdc
, brush
) );
1499 static void draw_graphics(HDC hdc
, BITMAPINFO
*bmi
, BYTE
*bits
)
1501 char pal_buffer
[sizeof(LOGPALETTE
) + 255 * sizeof(PALETTEENTRY
)];
1502 LOGPALETTE
*pal
= (LOGPALETTE
*)pal_buffer
;
1503 PALETTEENTRY
*entries
= pal
->palPalEntry
;
1504 HPEN solid_pen
, dashed_pen
, wide_pen
, orig_pen
;
1506 HBRUSH solid_brush
, dib_brush
, hatch_brush
, orig_brush
;
1508 INT i
, j
, x
, y
, hatch_style
;
1511 BYTE dib_src_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
)];
1512 BYTE dib_brush_buf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
) + 16 * 16 * sizeof(DWORD
)]; /* Enough for 16 x 16 at 32 bpp */
1513 BITMAPINFO
*src_bi
= (BITMAPINFO
*)dib_src_buf
;
1514 BITMAPINFO
*brush_bi
= (BITMAPINFO
*)dib_brush_buf
;
1515 RGBQUAD
*brush_colors
= brush_bi
->bmiColors
;
1516 BYTE
*brush_bits
, *src_bits
;
1517 BOOL ret
, dib_is_1bpp
= (bmi
->bmiHeader
.biBitCount
== 1);
1518 BOOL dib_is_8bpp_gray
= (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiColors
[1].rgbRed
== 1);
1519 BLENDFUNCTION blend
;
1520 COLORREF old_text
, old_bkgnd
;
1523 blend
.BlendOp
= AC_SRC_OVER
;
1524 blend
.BlendFlags
= 0;
1526 reset_bounds( hdc
);
1528 memset(bits
, 0xcc, get_dib_size(bmi
));
1529 compare_hash(hdc
, bmi
, bits
, "empty");
1531 src_dc
= CreateCompatibleDC( 0 );
1532 solid_pen
= CreatePen(PS_SOLID
, 1, RGB(0, 0, 0xff));
1533 orig_pen
= SelectObject(hdc
, solid_pen
);
1534 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1536 /* horizontal and vertical lines */
1537 for(i
= 1; i
<= 16; i
++)
1540 MoveToEx(hdc
, 10, i
* 3, NULL
);
1541 LineTo(hdc
, 100, i
* 3); /* l -> r */
1542 MoveToEx(hdc
, 100, 50 + i
* 3, NULL
);
1543 LineTo(hdc
, 10, 50 + i
* 3); /* r -> l */
1544 MoveToEx(hdc
, 120 + i
* 3, 10, NULL
);
1545 LineTo(hdc
, 120 + i
* 3, 100); /* t -> b */
1546 MoveToEx(hdc
, 170 + i
* 3, 100, NULL
);
1547 LineTo(hdc
, 170 + i
* 3, 10); /* b -> t */
1549 compare_hash(hdc
, bmi
, bits
, "h and v solid lines");
1551 /* diagonal lines */
1552 SetROP2(hdc
, R2_COPYPEN
);
1553 for(i
= 0; i
< 16; i
++)
1555 double s
= sin(M_PI
* i
/ 8.0);
1556 double c
= cos(M_PI
* i
/ 8.0);
1558 MoveToEx(hdc
, 200.5 + 10 * c
, 200.5 + 10 * s
, NULL
);
1559 LineTo(hdc
, 200.5 + 100 * c
, 200.5 + 100 * s
);
1561 compare_hash(hdc
, bmi
, bits
, "diagonal solid lines");
1563 for(i
= 0; i
< sizeof(bias_check
) / sizeof(bias_check
[0]); i
++)
1565 MoveToEx(hdc
, bias_check
[i
].left
, bias_check
[i
].top
, NULL
);
1566 LineTo(hdc
, bias_check
[i
].right
, bias_check
[i
].bottom
);
1568 compare_hash(hdc
, bmi
, bits
, "more diagonal solid lines");
1570 /* solid brush PatBlt */
1571 solid_brush
= CreateSolidBrush(RGB(0x33, 0xaa, 0xff));
1572 orig_brush
= SelectObject(hdc
, solid_brush
);
1574 for(i
= 0, y
= 10; i
< 256; i
++)
1576 ret
= PatBlt(hdc
, 10, y
, 100, 10, rop3
[i
]);
1578 if(rop_uses_src(rop3
[i
]))
1579 ok(ret
== FALSE
, "got TRUE for %x\n", rop3
[i
]);
1582 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1587 compare_hash(hdc
, bmi
, bits
, "solid patblt");
1590 hrgn
= CreateRectRgn(10, 10, 200, 20);
1591 hrgn2
= CreateRectRgn(100, 100, 200, 200);
1592 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1593 SetRectRgn(hrgn2
, 290, 100, 300, 200);
1594 CombineRgn(hrgn
, hrgn
, hrgn2
, RGN_OR
);
1595 ExtSelectClipRgn(hdc
, hrgn
, RGN_COPY
);
1596 DeleteObject(hrgn2
);
1598 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1600 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1601 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1603 compare_hash(hdc
, bmi
, bits
, "clipped solid hlines");
1605 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1607 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1608 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1610 compare_hash(hdc
, bmi
, bits
, "clipped solid vlines");
1612 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1614 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1615 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1617 compare_hash(hdc
, bmi
, bits
, "clipped solid diagonal lines");
1619 /* clipped PatBlt */
1620 for(i
= 0; i
< sizeof(patblt_clips
) / sizeof(patblt_clips
[0]); i
++)
1622 PatBlt(hdc
, patblt_clips
[i
].left
, patblt_clips
[i
].top
,
1623 patblt_clips
[i
].right
- patblt_clips
[i
].left
,
1624 patblt_clips
[i
].bottom
- patblt_clips
[i
].top
, PATCOPY
);
1626 compare_hash(hdc
, bmi
, bits
, "clipped patblt");
1628 /* clipped dashed lines */
1629 dashed_pen
= CreatePen(PS_DASH
, 1, RGB(0xff, 0, 0));
1630 SelectObject(hdc
, dashed_pen
);
1631 SetBkMode(hdc
, TRANSPARENT
);
1632 SetBkColor(hdc
, RGB(0, 0xff, 0));
1634 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1636 MoveToEx(hdc
, hline_clips
[i
].left
, hline_clips
[i
].top
, NULL
);
1637 LineTo(hdc
, hline_clips
[i
].right
, hline_clips
[i
].bottom
);
1639 compare_hash(hdc
, bmi
, bits
, "clipped dashed hlines");
1641 for(i
= 0; i
< sizeof(hline_clips
)/sizeof(hline_clips
[0]); i
++)
1643 MoveToEx(hdc
, hline_clips
[i
].right
- 1, hline_clips
[i
].bottom
, NULL
);
1644 LineTo(hdc
, hline_clips
[i
].left
- 1, hline_clips
[i
].top
);
1646 compare_hash(hdc
, bmi
, bits
, "clipped dashed hlines r -> l");
1648 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1650 MoveToEx(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
, NULL
);
1651 LineTo(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
);
1653 compare_hash(hdc
, bmi
, bits
, "clipped dashed vlines");
1655 for(i
= 0; i
< sizeof(vline_clips
)/sizeof(vline_clips
[0]); i
++)
1657 MoveToEx(hdc
, vline_clips
[i
].right
, vline_clips
[i
].bottom
- 1, NULL
);
1658 LineTo(hdc
, vline_clips
[i
].left
, vline_clips
[i
].top
- 1);
1660 compare_hash(hdc
, bmi
, bits
, "clipped dashed vlines b -> t");
1662 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1664 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1665 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1667 compare_hash(hdc
, bmi
, bits
, "clipped dashed diagonal lines");
1669 SetBkMode(hdc
, OPAQUE
);
1671 for(i
= 0; i
< sizeof(line_clips
)/sizeof(line_clips
[0]); i
++)
1673 MoveToEx(hdc
, line_clips
[i
].left
, line_clips
[i
].top
, NULL
);
1674 LineTo(hdc
, line_clips
[i
].right
, line_clips
[i
].bottom
);
1676 compare_hash(hdc
, bmi
, bits
, "clipped opaque dashed diagonal lines");
1678 ExtSelectClipRgn(hdc
, NULL
, RGN_COPY
);
1680 /* 8888 DIB pattern brush */
1682 brush_bi
->bmiHeader
= dib_brush_header_8888
;
1683 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1684 memset(brush_bits
, 0, 16 * 16 * sizeof(DWORD
));
1685 brush_bits
[2] = 0xff;
1686 brush_bits
[6] = 0xff;
1687 brush_bits
[14] = 0xff;
1688 brush_bits
[65] = 0xff;
1689 brush_bits
[69] = 0xff;
1690 brush_bits
[72] = 0xff;
1692 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1694 SelectObject(hdc
, dib_brush
);
1695 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1697 for(i
= 0, y
= 10; i
< 256; i
++)
1699 if(!rop_uses_src(rop3
[i
]))
1701 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1702 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1706 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1707 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8888 dib brush patblt", 1, FALSE
);
1709 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1711 SelectObject(hdc
, orig_brush
);
1712 DeleteObject(dib_brush
);
1714 /* 8888 bottom-up DIB pattern brush */
1716 brush_bi
->bmiHeader
.biHeight
= -brush_bi
->bmiHeader
.biHeight
;
1718 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1720 SelectObject(hdc
, dib_brush
);
1722 /* This used to set the x origin to 100 as well, but
1723 there's a Windows bug for 24 bpp where the brush's x offset
1724 is incorrectly calculated for rops that involve both D and P */
1725 SetBrushOrgEx(hdc
, 4, 100, NULL
);
1727 for(i
= 0, y
= 10; i
< 256; i
++)
1729 if(!rop_uses_src(rop3
[i
]))
1731 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1732 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1736 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1737 compare_hash_broken_todo(hdc
, bmi
, bits
, "bottom-up 8888 dib brush patblt", 1, FALSE
);
1739 compare_hash_broken_todo(hdc
, bmi
, bits
, "bottom-up 8888 dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1741 SelectObject(hdc
, orig_brush
);
1742 DeleteObject(dib_brush
);
1744 /* 24 bpp dib pattern brush */
1746 brush_bi
->bmiHeader
= dib_brush_header_24
;
1747 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1748 memset(brush_bits
, 0, 16 * 16 * 3);
1749 brush_bits
[0] = brush_bits
[3] = brush_bits
[6] = brush_bits
[8] = 0xff;
1750 brush_bits
[49] = brush_bits
[52] = 0xff;
1752 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1754 SelectObject(hdc
, dib_brush
);
1755 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1757 for(i
= 0, y
= 10; i
< 256; i
++)
1759 if(!rop_uses_src(rop3
[i
]))
1761 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1762 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1766 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1767 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 24 bpp brush patblt", 1, FALSE
);
1769 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 24 bpp brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1771 SelectObject(hdc
, orig_brush
);
1772 DeleteObject(dib_brush
);
1774 /* 555 dib pattern brush */
1776 brush_bi
->bmiHeader
= dib_brush_header_555
;
1777 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
);
1778 memset(brush_bits
, 0, 16 * 16 * sizeof(WORD
));
1779 brush_bits
[0] = brush_bits
[1] = 0xff;
1780 brush_bits
[32] = brush_bits
[34] = 0x7c;
1782 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1784 SelectObject(hdc
, dib_brush
);
1785 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1787 for(i
= 0, y
= 10; i
< 256; i
++)
1789 if(!rop_uses_src(rop3
[i
]))
1791 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1792 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1796 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
== 256) /* 8-bpp grayscale broken on NT4 */
1797 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 555 dib brush patblt", 1, FALSE
);
1799 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 555 dib brush patblt", dib_is_1bpp
? 1 : 0, dib_is_1bpp
);
1801 SelectObject(hdc
, orig_brush
);
1802 DeleteObject(dib_brush
);
1804 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1806 /* 8 bpp dib pattern brush */
1808 brush_bi
->bmiHeader
= dib_brush_header_8
;
1809 brush_bi
->bmiHeader
.biClrUsed
= 3;
1810 memset(brush_colors
, 0, brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
));
1811 brush_colors
[0].rgbRed
= 0xff;
1812 brush_colors
[1].rgbRed
= 0xff;
1813 brush_colors
[1].rgbGreen
= 0xff;
1814 brush_colors
[1].rgbBlue
= 0xff;
1816 brush_bits
= (BYTE
*)brush_bi
+ sizeof(BITMAPINFOHEADER
) + brush_bi
->bmiHeader
.biClrUsed
* sizeof(RGBQUAD
);
1817 memset(brush_bits
, 0, 16 * 16 * sizeof(BYTE
));
1818 brush_bits
[0] = brush_bits
[1] = 1;
1819 brush_bits
[16] = brush_bits
[17] = 2;
1820 brush_bits
[32] = brush_bits
[33] = 6;
1822 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1824 SelectObject(hdc
, dib_brush
);
1825 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1827 for(i
= 0, y
= 10; i
< 256; i
++)
1829 if(!rop_uses_src(rop3
[i
]))
1831 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1832 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1836 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 8 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1838 SelectObject(hdc
, orig_brush
);
1839 DeleteObject(dib_brush
);
1841 /* 4 bpp dib pattern brush */
1843 brush_bi
->bmiHeader
= dib_brush_header_4
;
1844 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1846 SelectObject(hdc
, dib_brush
);
1847 SetBrushOrgEx(hdc
, 1, 1, NULL
);
1849 for(i
= 0, y
= 10; i
< 256; i
++)
1851 if(!rop_uses_src(rop3
[i
]))
1853 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1854 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1858 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 4 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1860 SelectObject(hdc
, orig_brush
);
1861 DeleteObject(dib_brush
);
1863 /* 1 bpp dib pattern brush */
1865 brush_bi
->bmiHeader
= dib_brush_header_1
;
1866 brush_bi
->bmiHeader
.biClrUsed
= 2;
1867 memset(brush_bits
, 0, 16 * 4);
1868 brush_bits
[0] = 0xf0;
1869 brush_bits
[4] = 0xf0;
1870 brush_bits
[8] = 0xf0;
1872 dib_brush
= CreateDIBPatternBrushPt(brush_bi
, DIB_RGB_COLORS
);
1873 SelectObject(hdc
, dib_brush
);
1874 for(i
= 0, y
= 10; i
< 256; i
++)
1876 if(!rop_uses_src(rop3
[i
]))
1878 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1879 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1884 compare_hash_broken_todo(hdc
, bmi
, bits
, "top-down 1 bpp dib brush patblt", dib_is_1bpp
? 2 : 0, dib_is_1bpp
);
1886 SelectObject(hdc
, orig_brush
);
1887 DeleteObject(dib_brush
);
1889 /* 1 bpp ddb pattern brush */
1891 old_text
= GetTextColor( hdc
);
1892 old_bkgnd
= GetBkColor( hdc
);
1893 bmp
= CreateBitmap( 16, 16, 1, 1, ddb_brush_bits
);
1894 dib_brush
= CreatePatternBrush( bmp
);
1895 SelectObject(hdc
, dib_brush
);
1896 for(i
= 0, y
= 10; i
< 256; i
++)
1898 SetTextColor(hdc
, RGB( i
, 2*i
, 255 - i
) );
1899 SetBkColor(hdc
, RGB( 255 - i
, i
/ 3, i
) );
1900 if(!rop_uses_src(rop3
[i
]))
1902 ret
= PatBlt(hdc
, 10 + i
, y
, 100, 20, rop3
[i
]);
1903 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1908 compare_hash_broken_todo(hdc
, bmi
, bits
, "1 bpp ddb brush patblt", dib_is_1bpp
? 3 : 0, dib_is_1bpp
);
1911 SelectObject(hdc
, orig_brush
);
1912 DeleteObject( dib_brush
);
1913 SetBrushOrgEx(hdc
, 0, 0, NULL
);
1914 SetTextColor(hdc
, old_text
);
1915 SetBkColor(hdc
, old_bkgnd
);
1919 SelectObject(hdc
, solid_pen
);
1920 SelectObject(hdc
, solid_brush
);
1922 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
1924 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
, rectangles
[i
].right
, rectangles
[i
].bottom
);
1927 SelectObject(hdc
, dashed_pen
);
1928 for(i
= 0; i
< sizeof(rectangles
)/sizeof(rectangles
[0]); i
++)
1930 Rectangle(hdc
, rectangles
[i
].left
, rectangles
[i
].top
+ 150, rectangles
[i
].right
, rectangles
[i
].bottom
+ 150);
1933 compare_hash(hdc
, bmi
, bits
, "rectangles");
1934 SelectObject(hdc
, solid_pen
);
1938 PaintRgn(hdc
, hrgn
);
1939 compare_hash(hdc
, bmi
, bits
, "PaintRgn");
1941 /* RTL rectangles */
1945 win_skip("Don't have SetLayout\n");
1950 pSetLayout(hdc
, LAYOUT_RTL
);
1951 PaintRgn(hdc
, hrgn
);
1952 PatBlt(hdc
, 10, 250, 10, 10, PATCOPY
);
1953 Rectangle(hdc
, 100, 250, 110, 260);
1954 compare_hash(hdc
, bmi
, bits
, "rtl");
1956 pSetLayout(hdc
, LAYOUT_LTR
);
1958 DeleteObject( hrgn
);
1960 for(i
= 0, y
= 10; i
< 256; i
++)
1962 if(!rop_uses_src(rop3
[i
]))
1964 for(hatch_style
= HS_HORIZONTAL
; hatch_style
<= HS_DIAGCROSS
; hatch_style
++)
1966 hatch_brush
= CreateHatchBrush(hatch_style
, RGB(0xff, 0, 0));
1967 SelectObject(hdc
, hatch_brush
);
1968 ret
= PatBlt(hdc
, 10 + i
+ 30 * hatch_style
, y
, 20, 20, rop3
[i
]);
1969 ok(ret
, "got FALSE for %x\n", rop3
[i
]);
1970 SelectObject(hdc
, orig_brush
);
1971 DeleteObject(hatch_brush
);
1977 compare_hash_broken_todo(hdc
, bmi
, bits
, "hatch brushes", 1, FALSE
); /* nt4 is different */
1979 /* overlapping blits */
1981 orig_brush
= SelectObject(hdc
, solid_brush
);
1983 Rectangle(hdc
, 10, 10, 100, 100);
1984 Rectangle(hdc
, 20, 15, 30, 40);
1985 Rectangle(hdc
, 15, 15, 20, 20);
1986 Rectangle(hdc
, 15, 20, 50, 45);
1987 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, SRCCOPY
);
1988 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY +x, +y");
1990 Rectangle(hdc
, 10, 10, 100, 100);
1991 Rectangle(hdc
, 20, 15, 30, 40);
1992 Rectangle(hdc
, 15, 15, 20, 20);
1993 Rectangle(hdc
, 15, 20, 50, 45);
1994 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, SRCCOPY
);
1995 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
1996 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, -y",1, FALSE
);
1998 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, -y");
2000 Rectangle(hdc
, 10, 10, 100, 100);
2001 Rectangle(hdc
, 20, 15, 30, 40);
2002 Rectangle(hdc
, 15, 15, 20, 20);
2003 Rectangle(hdc
, 15, 20, 50, 45);
2004 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, SRCCOPY
);
2005 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY +x, -y");
2007 Rectangle(hdc
, 10, 10, 100, 100);
2008 Rectangle(hdc
, 20, 15, 30, 40);
2009 Rectangle(hdc
, 15, 15, 20, 20);
2010 Rectangle(hdc
, 15, 20, 50, 45);
2011 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, SRCCOPY
);
2012 if (bmi
->bmiHeader
.biBitCount
== 1) /* Windows gets this one wrong */
2013 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, +y", 1, FALSE
);
2015 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt SRCCOPY -x, +y" );
2017 Rectangle(hdc
, 10, 10, 100, 100);
2018 Rectangle(hdc
, 20, 15, 30, 40);
2019 Rectangle(hdc
, 15, 15, 20, 20);
2020 Rectangle(hdc
, 15, 20, 50, 45);
2021 BitBlt( hdc
, 20, 20, 100, 100, hdc
, 10, 10, PATPAINT
);
2022 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, +y");
2024 Rectangle(hdc
, 10, 10, 100, 100);
2025 Rectangle(hdc
, 20, 15, 30, 40);
2026 Rectangle(hdc
, 15, 15, 20, 20);
2027 Rectangle(hdc
, 15, 20, 50, 45);
2028 BitBlt( hdc
, 10, 10, 100, 100, hdc
, 20, 20, PATPAINT
);
2029 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT -x, -y");
2031 Rectangle(hdc
, 10, 10, 100, 100);
2032 Rectangle(hdc
, 20, 15, 30, 40);
2033 Rectangle(hdc
, 15, 15, 20, 20);
2034 Rectangle(hdc
, 15, 20, 50, 45);
2035 BitBlt( hdc
, 20, 10, 100, 100, hdc
, 10, 20, PATPAINT
);
2036 if (bmi
->bmiHeader
.biBitCount
>= 24) /* Windows gets this one wrong */
2037 compare_hash_broken_todo(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, -y", 1, FALSE
);
2039 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT +x, -y");
2041 Rectangle(hdc
, 10, 10, 100, 100);
2042 Rectangle(hdc
, 20, 15, 30, 40);
2043 Rectangle(hdc
, 15, 15, 20, 20);
2044 Rectangle(hdc
, 15, 20, 50, 45);
2045 BitBlt( hdc
, 10, 20, 100, 100, hdc
, 20, 10, PATPAINT
);
2046 compare_hash(hdc
, bmi
, bits
, "overlapping BitBlt PATPAINT -x, +y" );
2048 /* blitting with 32-bpp BI_RGB source */
2050 memset( dib_src_buf
, 0, sizeof(dib_src_buf
) );
2051 src_bi
->bmiHeader
.biSize
= sizeof(bmi
->bmiHeader
);
2052 src_bi
->bmiHeader
.biHeight
= 256;
2053 src_bi
->bmiHeader
.biWidth
= 256;
2054 src_bi
->bmiHeader
.biBitCount
= 32;
2055 src_bi
->bmiHeader
.biPlanes
= 1;
2056 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2057 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2058 SelectObject( src_dc
, bmp
);
2059 for (y
= 0; y
< 256; y
++)
2060 for (x
= 0; x
< 256; x
++)
2062 BYTE a
= (x
+ y
) * 2;
2063 BYTE r
= (BYTE
)(y
+ 2 * x
) * a
/ 255;
2064 BYTE g
= (BYTE
)(x
+ y
/ 3) * a
/ 255;
2065 BYTE b
= (BYTE
)(x
/ 3 + 2 * y
) * a
/ 255;
2066 ((DWORD
*)src_bits
)[y
* 256 + x
] = (a
<< 24) | RGB( r
, g
, b
);
2069 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2070 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2071 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp SRCCOPY", 1, FALSE
);
2073 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp SRCCOPY" );
2075 blend
.SourceConstantAlpha
= 0xd0;
2076 blend
.AlphaFormat
= 0;
2077 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2078 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2080 if (!pGdiAlphaBlend
) skip_compare(2);
2081 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp no alpha", 1, FALSE
);
2085 if (!pGdiAlphaBlend
) skip_compare(1);
2086 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp no alpha", 0, dib_is_1bpp
);
2089 blend
.SourceConstantAlpha
= 0xb0;
2090 blend
.AlphaFormat
= AC_SRC_ALPHA
;
2091 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 50, 50, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2092 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2094 if (!pGdiAlphaBlend
) skip_compare(2);
2095 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp alpha", 1, FALSE
);
2099 if (!pGdiAlphaBlend
) skip_compare(1);
2100 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 32-bpp alpha", 0, dib_is_1bpp
);
2103 /* blitting with 32-bpp r10g10b10 source */
2105 src_bi
->bmiHeader
.biBitCount
= 32;
2106 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2107 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x3ff00000;
2108 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000ffc00;
2109 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000003ff;
2110 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2111 SelectObject( src_dc
, bmp
);
2112 for (y
= 0; y
< 256; y
++)
2113 for (x
= 0; x
< 256; x
++)
2115 WORD r
= (7 * x
+ 3 * y
) % 1024;
2116 WORD g
= (11 * x
+ y
/ 3) % 1024;
2117 WORD b
= (x
/ 3 + 9 * y
) % 1024;
2118 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
<< 20 | g
<< 10 | b
;
2121 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2122 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2123 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp r10g10b10 SRCCOPY", 1, FALSE
);
2125 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp r10g10b10 SRCCOPY" );
2127 /* blitting with 32-bpp b6g6r6 source */
2129 src_bi
->bmiHeader
.biBitCount
= 32;
2130 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2131 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00003f;
2132 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x000fc0;
2133 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x03f000;
2134 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2135 SelectObject( src_dc
, bmp
);
2136 for (y
= 0; y
< 256; y
++)
2137 for (x
= 0; x
< 256; x
++)
2139 BYTE r
= (y
+ 2 * x
) % 64;
2140 BYTE g
= (x
+ y
/ 3) % 64;
2141 BYTE b
= (x
/ 3 + 2 * y
) % 64;
2142 ((DWORD
*)src_bits
)[y
* 256 + x
] = r
| g
<< 6 | b
<< 12;
2145 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2146 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2147 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 32-bpp b6g6r6 SRCCOPY", 1, FALSE
);
2149 compare_hash(hdc
, bmi
, bits
, "BitBlt src 32-bpp b6g6r6 SRCCOPY" );
2151 /* blitting with 24-bpp source */
2153 src_bi
->bmiHeader
.biBitCount
= 24;
2154 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2155 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2156 DeleteObject( SelectObject( src_dc
, bmp
) );
2157 for (y
= 0; y
< 256; y
++)
2158 for (x
= 0; x
< 256; x
++)
2160 src_bits
[(y
* 256 + x
) * 3 + 0] = x
+ 3 * y
;
2161 src_bits
[(y
* 256 + x
) * 3 + 1] = 2 * x
+ 7 * y
;
2162 src_bits
[(y
* 256 + x
) * 3 + 2] = 5 * x
+ 12 * y
;
2165 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2166 if (bmi
->bmiHeader
.biBitCount
== 8) /* broken on NT4 */
2167 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 24-bpp SRCCOPY", 1, FALSE
);
2169 compare_hash(hdc
, bmi
, bits
, "BitBlt src 24-bpp SRCCOPY" );
2171 blend
.SourceConstantAlpha
= 0xe0;
2172 blend
.AlphaFormat
= 0;
2173 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2174 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2176 if (!pGdiAlphaBlend
) skip_compare(2);
2177 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 24-bpp", 1, FALSE
);
2181 if (!pGdiAlphaBlend
) skip_compare(1);
2182 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 24-bpp", 0, dib_is_1bpp
);
2185 /* blitting with 16-bpp BI_RGB source */
2187 src_bi
->bmiHeader
.biBitCount
= 16;
2188 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2189 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2190 DeleteObject( SelectObject( src_dc
, bmp
) );
2191 for (y
= 0; y
< 256; y
++)
2192 for (x
= 0; x
< 256; x
++)
2193 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
2195 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2196 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
2197 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 16-bpp SRCCOPY", 1, FALSE
);
2199 compare_hash(hdc
, bmi
, bits
, "BitBlt src 16-bpp SRCCOPY" );
2201 /* blitting with 16-bpp b4g4r4 source */
2203 src_bi
->bmiHeader
.biBitCount
= 16;
2204 src_bi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2205 ((DWORD
*)src_bi
->bmiColors
)[0] = 0x00000f;
2206 ((DWORD
*)src_bi
->bmiColors
)[1] = 0x0000f0;
2207 ((DWORD
*)src_bi
->bmiColors
)[2] = 0x000f00;
2208 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2209 DeleteObject( SelectObject( src_dc
, bmp
) );
2210 for (y
= 0; y
< 256; y
++)
2211 for (x
= 0; x
< 256; x
++)
2212 ((WORD
*)src_bits
)[y
* 256 + x
] = x
| x
<< 4 | x
<< 8 | y
<< 3 | y
<< 7;
2214 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2215 if (bmi
->bmiHeader
.biBitCount
== 8 && bmi
->bmiHeader
.biClrUsed
> 5) /* broken on NT4 */
2216 compare_hash_broken_todo(hdc
, bmi
, bits
, "BitBlt src 16-bpp b4g4r4 SRCCOPY", 1, FALSE
);
2218 compare_hash(hdc
, bmi
, bits
, "BitBlt src 16-bpp b4g4r4 SRCCOPY" );
2220 /* blitting with 8-bpp source */
2222 src_bi
->bmiHeader
.biBitCount
= 8;
2223 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2224 src_bi
->bmiHeader
.biClrUsed
= 160;
2225 for (i
= 0; i
< 256; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 3) << 8 | (i
/ 2) << 16;
2226 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2227 DeleteObject( SelectObject( src_dc
, bmp
) );
2228 for (y
= 0; y
< 256; y
++)
2229 for (x
= 0; x
< 256; x
++)
2230 src_bits
[y
* 256 + x
] = 3 * x
+ 5 * y
;
2232 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2233 compare_hash(hdc
, bmi
, bits
, "BitBlt src 8-bpp SRCCOPY" );
2235 blend
.SourceConstantAlpha
= 0xd0;
2236 blend
.AlphaFormat
= 0;
2237 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2238 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2240 if (!pGdiAlphaBlend
) skip_compare(2);
2241 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 8-bpp", 1, FALSE
);
2245 if (!pGdiAlphaBlend
) skip_compare(1);
2246 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 8-bpp", 0, dib_is_1bpp
);
2249 /* blitting with 4-bpp source */
2251 src_bi
->bmiHeader
.biBitCount
= 4;
2252 src_bi
->bmiHeader
.biClrUsed
= 12;
2253 for (i
= 0; i
< 16; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = i
| (i
* 5) << 8 | (i
* 19) << 16;
2254 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2255 DeleteObject( SelectObject( src_dc
, bmp
) );
2256 for (y
= 0; y
< 256; y
++)
2257 for (x
= 0; x
< 256; x
+= 2)
2258 src_bits
[(y
* 256 + x
) / 2] = 7 * x
+ 3 * y
;
2260 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2261 compare_hash(hdc
, bmi
, bits
, "BitBlt src 4-bpp SRCCOPY" );
2263 /* blitting with 1-bpp source */
2265 src_bi
->bmiHeader
.biBitCount
= 1;
2266 src_bi
->bmiHeader
.biClrUsed
= 0;
2267 for (i
= 0; i
< 2; i
++) ((DWORD
*)src_bi
->bmiColors
)[i
] = (i
+ 37) | (i
* 91) << 8 | (i
* 53) << 16;
2268 bmp
= CreateDIBSection(0, src_bi
, DIB_RGB_COLORS
, (void**)&src_bits
, NULL
, 0);
2269 DeleteObject( SelectObject( src_dc
, bmp
) );
2270 for (y
= 0; y
< 256; y
++)
2271 for (x
= 0; x
< 256; x
+= 8)
2272 src_bits
[(y
* 256 + x
) / 8] = 7 * x
+ 3 * y
;
2274 BitBlt( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, SRCCOPY
);
2275 compare_hash(hdc
, bmi
, bits
, "BitBlt src 1-bpp SRCCOPY" );
2277 blend
.SourceConstantAlpha
= 0x90;
2278 blend
.AlphaFormat
= 0;
2279 if (pGdiAlphaBlend
) pGdiAlphaBlend( hdc
, 100, 100, 256, 256, src_dc
, 0, 0, 256, 256, blend
);
2280 if (bmi
->bmiHeader
.biBitCount
== 16 && bmi
->bmiHeader
.biCompression
== BI_RGB
) /* 555 broken on w2k */
2282 if (!pGdiAlphaBlend
) skip_compare(2);
2283 else compare_hash_broken_todo(hdc
, bmi
, bits
, "AlphaBlend src 1-bpp", 1, FALSE
);
2287 if (!pGdiAlphaBlend
) skip_compare(1);
2288 else compare_hash(hdc
, bmi
, bits
, "AlphaBlend src 1-bpp" );
2292 DeleteObject( bmp
);
2294 /* RLE StretchDIBits */
2295 src_bi
->bmiHeader
.biSize
= sizeof(src_bi
->bmiHeader
);
2296 src_bi
->bmiHeader
.biWidth
= 8;
2297 src_bi
->bmiHeader
.biHeight
= 8;
2298 src_bi
->bmiHeader
.biPlanes
= 1;
2299 src_bi
->bmiHeader
.biBitCount
= 8;
2300 src_bi
->bmiHeader
.biCompression
= BI_RLE8
;
2301 src_bi
->bmiHeader
.biClrUsed
= 0;
2302 src_bi
->bmiHeader
.biSizeImage
= sizeof(rle8_data
);
2304 for (i
= 0; i
< 256; i
++)
2306 src_bi
->bmiColors
[i
].rgbRed
= i
;
2307 src_bi
->bmiColors
[i
].rgbGreen
= i
;
2308 src_bi
->bmiColors
[i
].rgbBlue
= i
;
2309 src_bi
->bmiColors
[i
].rgbReserved
= 0;
2312 StretchDIBits( hdc
, 10, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2313 StretchDIBits( hdc
, 100, 10, 7, 7, 0, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2314 StretchDIBits( hdc
, 200, 10, 7, 7, 0, 1, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2315 StretchDIBits( hdc
, 300, 10, 7, 7, 1, 0, 7, 7, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2316 StretchDIBits( hdc
, 400, 10, 16, 16, 0, 0, 8, 8, rle8_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2317 compare_hash_broken_todo(hdc
, bmi
, bits
, "rle stretchdibits", 0, dib_is_1bpp
);
2319 /* 32 bpp StretchDIBits */
2321 src_bi
->bmiHeader
.biWidth
= 4;
2322 src_bi
->bmiHeader
.biHeight
= 4;
2323 src_bi
->bmiHeader
.biPlanes
= 1;
2324 src_bi
->bmiHeader
.biBitCount
= 32;
2325 src_bi
->bmiHeader
.biCompression
= BI_RGB
;
2326 src_bi
->bmiHeader
.biClrUsed
= 0;
2327 src_bi
->bmiHeader
.biSizeImage
= 0;
2329 ret
= StretchDIBits( hdc
, 10, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2330 ok(ret
== 4, "got %d\n", ret
);
2331 ret
= StretchDIBits( hdc
, 20, 10, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2332 ok(ret
== 4, "got %d\n", ret
);
2333 ret
= StretchDIBits( hdc
, 30, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2334 ok(ret
== 4, "got %d\n", ret
);
2335 ret
= StretchDIBits( hdc
, 40, 10, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2336 ok(ret
== 4, "got %d\n", ret
);
2337 ret
= StretchDIBits( hdc
, 50, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2338 ok(ret
== 4, "got %d\n", ret
);
2339 ret
= StretchDIBits( hdc
, 60, 10, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2340 ok(ret
== 4, "got %d\n", ret
);
2342 src_bi
->bmiHeader
.biHeight
= -4;
2344 ret
= StretchDIBits( hdc
, 10, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2345 ok(ret
== 4, "got %d\n", ret
);
2346 ret
= StretchDIBits( hdc
, 20, 100, 4, 4, 0, 0, 4, 4, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2347 ok(ret
== -4, "got %d\n", ret
);
2348 ret
= StretchDIBits( hdc
, 30, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2349 ok(ret
== 4, "got %d\n", ret
);
2350 ret
= StretchDIBits( hdc
, 40, 100, 3, 3, 1, 1, 3, 3, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2351 ok(ret
== -4, "got %d\n", ret
);
2352 ret
= StretchDIBits( hdc
, 50, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCCOPY
);
2353 ok(ret
== 4, "got %d\n", ret
);
2354 ret
= StretchDIBits( hdc
, 60, 100, -2, -2, 2, 3, -2, -2, four_by_four_data
, src_bi
, DIB_RGB_COLORS
, SRCAND
);
2355 ok(ret
== -4, "got %d\n", ret
);
2357 compare_hash_broken_todo(hdc
, bmi
, bits
, "stretchdibits", dib_is_8bpp_gray
? 1 : 0, dib_is_8bpp_gray
);
2360 for (i
= 0; i
< 256; i
++)
2362 solid_patblt( hdc
, i
* 2, 10, 1, 1, DIBINDEX(i
) );
2363 solid_patblt( hdc
, i
* 2, 20, 1, 1, PALETTEINDEX(i
) );
2364 solid_patblt( hdc
, i
* 2, 30, 1, 1, RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2365 solid_patblt( hdc
, i
* 2, 40, 1, 1, PALETTERGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2366 for (j
= 0; j
< 256; j
++) solid_patblt( hdc
, i
* 2, 50 + j
, 1, 1, (j
<< 24) | i
);
2369 /* A few extra colors that are interesting in the 1bpp case */
2372 solid_patblt( hdc
, 0, 50, 1, 1, RGB( 0, 0xff, 0 ) );
2373 solid_patblt( hdc
, 2, 50, 1, 1, PALETTERGB( 0, 0xff, 0 ) );
2376 solid_patblt( hdc
, 4, 50, 1, 1, RGB( 0, 0x1, 0xff ) );
2377 solid_patblt( hdc
, 6, 50, 1, 1, PALETTERGB( 0, 0x1, 0xff ) );
2380 solid_patblt( hdc
, 8, 50, 1, 1, RGB( 0xff, 0, 0 ) );
2381 solid_patblt( hdc
, 10, 50, 1, 1, PALETTERGB( 0xff, 0, 0 ) );
2383 compare_hash(hdc
, bmi
, bits
, "Colors");
2385 for (i
= 0; i
< 256; i
++)
2388 s
= SetPixel( hdc
, i
* 2, 10, DIBINDEX(i
) );
2389 g
= GetPixel( hdc
, i
* 2, 10 );
2390 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2392 s
= SetPixel( hdc
, i
* 2, 20, PALETTEINDEX(i
) );
2393 g
= GetPixel( hdc
, i
* 2, 20 );
2394 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2396 s
= SetPixel( hdc
, i
* 2, 30, RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2397 g
= GetPixel( hdc
, i
* 2, 30 );
2398 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2400 s
= SetPixel( hdc
, i
* 2, 40, PALETTERGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ) );
2401 g
= GetPixel( hdc
, i
* 2, 40 );
2402 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2404 for (j
= 0; j
< 256; j
++)
2406 s
= SetPixel( hdc
, i
* 2, 50+j
, (j
<< 24) | RGB( (i
& 0x07) << 5, (i
& 0x38) << 2, i
& 0xc0 ));
2407 g
= GetPixel( hdc
, i
* 2, 50+j
);
2408 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2410 s
= SetPixel( hdc
, i
* 2 + 1, 50+j
, (j
<< 24) | i
);
2411 g
= GetPixel( hdc
, i
* 2 + 1, 50+j
);
2412 ok( s
== g
, "got %08x and %08x\n", s
, g
);
2416 compare_hash(hdc
, bmi
, bits
, "SetPixel");
2420 if (pGdiGradientFill
)
2424 { 1, 1, 0xff00, 0x8000, 0x0000, 0x8000 },
2425 { 200, 200, 0x0000, 0x0000, 0xff00, 0xff00 },
2426 { 180, 180, 0x1234, 0x5678, 0x9abc, 0xdef0 },
2427 { 300, 300, 0xff00, 0xff00, 0xff00, 0x0000 }
2429 GRADIENT_RECT rect
[] = { { 0, 1 }, { 2, 3 }, { 2, 1 } };
2433 { 250, 0, 0xff00, 0x0000, 0xff00, 0xff00 },
2434 { 500, 500, 0x0000, 0xff00, 0x0000, 0xff00 },
2435 { 0, 500, 0x0000, 0x0000, 0xff00, 0xff00 },
2437 { 10, 0, 0x8000, 0x0000, 0x8000, 0x8000 },
2438 { 0, 20, 0xff00, 0xff00, 0xff00, 0x0000 },
2439 { 5, 30, 0x4000, 0xc000, 0x7000, 0x9000 },
2441 { 30, 0, 0x9000, 0x8800, 0xcc00, 0xff00 },
2442 { 5, 12, 0x9900, 0xaa00, 0xbb00, 0xcc00 },
2443 { 0, 30, 0x5000, 0xd000, 0x9000, 0xbb00 },
2445 { 35, 3, 0xaa00, 0x6500, 0x4300, 0x2100 },
2446 { 50, 6, 0x9800, 0x9800, 0x9800, 0x2000 },
2447 { 60, 10, 0x0100, 0x0200, 0x0300, 0x3000 },
2449 { 60, 2, 0x0700, 0x0800, 0x0900, 0xff00 },
2450 { 73, 10, 0x9900, 0x8800, 0x7700, 0xff00 },
2451 { 66, 23, 0x1100, 0x2200, 0x3300, 0xff00 },
2453 { 80, 1, 0xa000, 0x6000, 0x4000, 0x2000 },
2454 { 76, 9, 0x7000, 0x5000, 0x3000, 0x1000 },
2455 { 85, 23, 0x3300, 0x3300, 0x3300, 0x3300 },
2457 { 90, 4, 0x4400, 0x5500, 0x6600, 0x9900 },
2458 { 95, 12, 0x4500, 0x5600, 0x6700, 0x9900 },
2459 { 85, 14, 0x4600, 0x5700, 0x6800, 0x9900 },
2461 GRADIENT_TRIANGLE tri
[] =
2463 { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 }, { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 },
2464 { 2, 1, 0 }, { 3, 5, 4 }, { 7, 6, 8 }, { 10, 11, 9 }, { 14, 13, 12 }, { 17, 15, 16 }, { 19, 20, 18 }
2467 pGdiGradientFill( hdc
, vrect
, 4, rect
, 2, GRADIENT_FILL_RECT_H
);
2468 for (i
= 0; i
< 4; i
++) vrect
[i
].y
+= 250;
2469 pGdiGradientFill( hdc
, vrect
, 4, rect
, 2, GRADIENT_FILL_RECT_V
);
2471 if (bmi
->bmiHeader
.biBitCount
<= 8) /* Wine's 8-bit dithering isn't identical to Windows */
2472 compare_hash_broken_todo(hdc
, bmi
, bits
, "GdiGradientFill", 0, 1 );
2474 compare_hash(hdc
, bmi
, bits
, "GdiGradientFill" );
2476 pGdiGradientFill( hdc
, vtri
, 7*3, tri
, 7, GRADIENT_FILL_TRIANGLE
);
2477 for (i
= 0; i
< 7*3; i
++) vtri
[i
].y
+= 100;
2478 pGdiGradientFill( hdc
, vtri
, 7*3, tri
+ 7, 7, GRADIENT_FILL_TRIANGLE
);
2479 if (bmi
->bmiHeader
.biBitCount
<= 8) /* Wine's 8-bit dithering isn't identical to Windows */
2480 compare_hash_broken_todo(hdc
, bmi
, bits
, "GdiGradientFill", 0, 1 );
2482 compare_hash(hdc
, bmi
, bits
, "GdiGradientFill" );
2486 win_skip( "GdiGradientFill not supported\n" );
2493 wide_pen
= CreatePen( PS_SOLID
, 7, RGB( 0xff, 0, 0 ) );
2494 SelectObject( hdc
, wide_pen
);
2496 for (i
= 0; i
< sizeof( wide_lines
) / sizeof( wide_lines
[0] ); i
++)
2498 MoveToEx( hdc
, wide_lines
[i
].left
, wide_lines
[i
].top
, NULL
);
2499 LineTo( hdc
, wide_lines
[i
].right
, wide_lines
[i
].bottom
);
2502 compare_hash(hdc
, bmi
, bits
, "wide pen" );
2504 SelectObject( hdc
, orig_pen
);
2505 DeleteObject( wide_pen
);
2507 log_brush
.lbStyle
= BS_SOLID
;
2508 log_brush
.lbColor
= RGB(0xff, 0, 0);
2509 log_brush
.lbHatch
= 0;
2511 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_FLAT
| PS_JOIN_MITER
| PS_SOLID
,
2512 9, &log_brush
, 0, NULL
);
2513 SelectObject( hdc
, wide_pen
);
2515 Polyline( hdc
, poly_lines
, sizeof(poly_lines
) / sizeof(poly_lines
[0]) );
2516 compare_hash(hdc
, bmi
, bits
, "wide pen - flat caps, mitred" );
2518 SelectObject( hdc
, orig_pen
);
2519 DeleteObject( wide_pen
);
2521 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_SQUARE
| PS_JOIN_BEVEL
| PS_SOLID
,
2522 16, &log_brush
, 0, NULL
);
2523 SelectObject( hdc
, wide_pen
);
2525 Polyline( hdc
, poly_lines
, sizeof(poly_lines
) / sizeof(poly_lines
[0]) );
2526 compare_hash(hdc
, bmi
, bits
, "wide pen - square caps, bevelled" );
2528 SelectObject( hdc
, orig_pen
);
2529 DeleteObject( wide_pen
);
2531 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_FLAT
| PS_JOIN_MITER
| PS_SOLID
,
2532 9, &log_brush
, 0, NULL
);
2533 SelectObject( hdc
, wide_pen
);
2535 PolyPolyline( hdc
, polypoly_lines
, polypoly_counts
, sizeof(polypoly_counts
)/sizeof(polypoly_counts
[0]) );
2536 compare_hash(hdc
, bmi
, bits
, "wide pen - empty segments" );
2538 SelectObject( hdc
, orig_pen
);
2539 DeleteObject( wide_pen
);
2541 /* brushed wide pen */
2543 old_text
= GetTextColor( hdc
);
2544 old_bkgnd
= GetBkColor( hdc
);
2545 bmp
= CreateBitmap( 16, 16, 1, 1, ddb_brush_bits
);
2546 log_brush
.lbStyle
= BS_PATTERN
;
2547 log_brush
.lbColor
= 0;
2548 log_brush
.lbHatch
= (ULONG_PTR
)bmp
;
2549 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_FLAT
| PS_JOIN_BEVEL
| PS_SOLID
,
2550 12, &log_brush
, 0, NULL
);
2551 ok( wide_pen
!= 0, "failed to create pen\n" );
2552 SelectObject( hdc
, wide_pen
);
2553 Polyline( hdc
, poly_lines
, sizeof(poly_lines
) / sizeof(poly_lines
[0]) );
2555 for (i
= 1; i
< 20; i
++)
2557 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_FLAT
| PS_JOIN_BEVEL
| PS_SOLID
,
2558 i
, &log_brush
, 0, NULL
);
2559 ok( wide_pen
!= 0, "failed to create pen\n" );
2560 DeleteObject( SelectObject( hdc
, wide_pen
));
2561 SetTextColor(hdc
, RGB( 2*i
, i
, 255 - i
) );
2562 SetBkColor(hdc
, RGB( 255 - i
, i
, i
/ 3 ) );
2563 MoveToEx( hdc
, 10 * i
, 10, NULL
);
2564 LineTo( hdc
, 10 * i
, 200 + i
);
2565 LineTo( hdc
, 20 * i
, 200 + i
);
2567 /* NT4 broken for all cases, W2K for 1 bpp only */
2568 compare_hash_broken_todo(hdc
, bmi
, bits
, "wide brushed pen", 1 + dib_is_1bpp
, dib_is_1bpp
);
2570 for (i
= 1; i
< 20; i
++)
2572 wide_pen
= ExtCreatePen( PS_GEOMETRIC
| PS_ENDCAP_FLAT
| PS_JOIN_BEVEL
| (i
% 5),
2573 i
, &log_brush
, 0, NULL
);
2574 DeleteObject( SelectObject( hdc
, wide_pen
));
2575 SetTextColor(hdc
, RGB( 2*i
, i
, 255 - i
) );
2576 SetBkColor(hdc
, RGB( i
, 255 - i
, i
/ 3 ) );
2577 MoveToEx( hdc
, 10 * i
, 10, NULL
);
2578 LineTo( hdc
, 10 * i
, 200 + i
);
2579 LineTo( hdc
, 20 * i
, 200 + i
);
2581 /* NT4 broken for all cases, W2K for 1 bpp only */
2582 compare_hash_broken_todo(hdc
, bmi
, bits
, "dashed wide brushed pen", 1 + dib_is_1bpp
, dib_is_1bpp
);
2585 SetTextColor(hdc
, old_text
);
2586 SetBkColor(hdc
, old_bkgnd
);
2587 SelectObject( hdc
, orig_pen
);
2591 solid_brush
= CreateSolidBrush( PALETTEINDEX(3) );
2592 solid_pen
= CreatePen( PS_DASH
, 1, PALETTEINDEX(5) );
2593 SetTextColor( hdc
, PALETTEINDEX(38) );
2594 SetBkColor( hdc
, PALETTEINDEX(9) );
2595 SelectObject( hdc
, solid_brush
);
2596 SelectObject( hdc
, solid_pen
);
2598 pal
->palVersion
= 0x300;
2599 pal
->palNumEntries
= 40;
2600 for (i
= 0; i
< 80; i
++)
2602 entries
[i
].peRed
= i
* 3;
2603 entries
[i
].peGreen
= i
* 7;
2604 entries
[i
].peBlue
= 128 - i
;
2605 entries
[i
].peFlags
= 0;
2607 hpal
= CreatePalette( pal
);
2608 SelectPalette( hdc
, hpal
, FALSE
);
2610 solid_patblt( hdc
, 20, 10, 10, 10, PALETTEINDEX(15) );
2611 Rectangle( hdc
, 0, 0, 10, 10 );
2612 SetPaletteEntries( hpal
, 0, 40, entries
+ 40 );
2613 Rectangle( hdc
, 10, 0, 10, 10 );
2614 SelectObject( hdc
, orig_brush
);
2615 DeleteObject( solid_brush
);
2617 solid_brush
= CreateHatchBrush( HS_CROSS
, PALETTEINDEX(7) );
2618 DeleteObject( SelectObject( hdc
, solid_brush
));
2619 PatBlt( hdc
, 20, 0, 10, 10, PATCOPY
);
2620 SetPaletteEntries( hpal
, 0, 40, entries
);
2621 PatBlt( hdc
, 30, 0, 10, 10, PATCOPY
);
2622 SelectObject( hdc
, orig_brush
);
2623 DeleteObject( solid_brush
);
2625 bmp
= CreateBitmap( 16, 16, 1, 1, ddb_brush_bits
);
2626 dib_brush
= CreatePatternBrush( bmp
);
2627 SelectObject( hdc
, dib_brush
);
2628 PatBlt( hdc
, 40, 0, 10, 10, PATCOPY
);
2629 SetPaletteEntries( hpal
, 0, 40, entries
+ 40 );
2630 PatBlt( hdc
, 50, 0, 10, 10, PATCOPY
);
2631 DeleteObject( bmp
);
2632 SelectObject( hdc
, orig_brush
);
2633 DeleteObject( dib_brush
);
2635 SelectPalette( hdc
, GetStockObject(DEFAULT_PALETTE
), FALSE
);
2636 DeleteObject( hpal
);
2638 /* NT4 broken for all cases, W2K for 1 bpp only */
2639 compare_hash_broken_todo(hdc
, bmi
, bits
, "PALETTEINDEX", 1 + dib_is_1bpp
, dib_is_1bpp
);
2643 solid_patblt( hdc
, 0, 0, 512, 512, RGB( 0, 0, 0xff ) );
2644 solid_patblt( hdc
, 10, 10, 200, 200, RGB( 0, 0xff, 0 ) );
2645 solid_patblt( hdc
, 10, 50, 50, 50, RGB( 0, 0, 0xff ) );
2646 solid_patblt( hdc
, 100, 160, 50, 50, RGB( 0, 0, 0xff ) );
2647 solid_patblt( hdc
, 90, 160, 70, 10, RGB( 0, 0, 0xff ) );
2649 /* add a vertical 'bar' to show that the clip rgn stops the flooding */
2650 hrgn
= CreateRectRgn( 180, 10, 190, 210 );
2651 ExtSelectClipRgn( hdc
, hrgn
, RGN_DIFF
);
2652 DeleteObject( hrgn
);
2654 solid_brush
= CreateSolidBrush( RGB( 0xff, 0, 0 ) );
2655 SelectObject( hdc
, solid_brush
);
2657 ret
= ExtFloodFill( hdc
, 100, 100, RGB( 0, 0xff, 0 ), FLOODFILLSURFACE
);
2658 ok (!ret
== !!dib_is_1bpp
, "got ret %d\n", ret
);
2659 compare_hash(hdc
, bmi
, bits
, "flood fill" );
2661 ExtSelectClipRgn( hdc
, NULL
, RGN_COPY
);
2663 SelectObject(hdc
, orig_brush
);
2664 SelectObject(hdc
, orig_pen
);
2665 DeleteObject(solid_brush
);
2666 DeleteObject(wide_pen
);
2667 DeleteObject(dashed_pen
);
2668 DeleteObject(solid_pen
);
2671 static const BYTE ramp
[17] =
2673 0, 0x4d, 0x68, 0x7c,
2674 0x8c, 0x9a, 0xa7, 0xb2,
2675 0xbd, 0xc7, 0xd0, 0xd9,
2676 0xe1, 0xe9, 0xf0, 0xf8,
2680 static inline void get_range(BYTE alpha
, DWORD text_comp
, BYTE
*min_comp
, BYTE
*max_comp
)
2682 *min_comp
= (ramp
[alpha
] * text_comp
) / 0xff;
2683 *max_comp
= ramp
[16 - alpha
] + ((0xff - ramp
[16 - alpha
]) * text_comp
) / 0xff;
2686 static inline BYTE
aa_comp(BYTE dst
, BYTE text
, BYTE alpha
)
2688 BYTE min_comp
, max_comp
;
2690 if (alpha
== 16) return text
;
2691 if (alpha
<= 1) return dst
;
2692 if (text
== dst
) return dst
;
2694 get_range( alpha
, text
, &min_comp
, &max_comp
);
2698 DWORD diff
= dst
- text
;
2699 DWORD range
= max_comp
- text
;
2700 dst
= text
+ (diff
* range
) / (0xff - text
);
2705 DWORD diff
= text
- dst
;
2706 DWORD range
= text
- min_comp
;
2707 dst
= text
- (diff
* range
) / text
;
2712 static inline COLORREF
aa_colorref( COLORREF dst
, COLORREF text
, BYTE glyph
)
2716 ret
= RGB( aa_comp( GetRValue(dst
), GetRValue(text
), glyph
),
2717 aa_comp( GetGValue(dst
), GetGValue(text
), glyph
),
2718 aa_comp( GetBValue(dst
), GetBValue(text
), glyph
) );
2722 static const BYTE masks
[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
2724 static void draw_text_2( HDC hdc
, BITMAPINFO
*bmi
, BYTE
*bits
, BOOL aa
)
2726 DWORD dib_size
= get_dib_size(bmi
), ret
;
2731 int i
, stride
, x
, y
;
2732 static const MAT2 identity
= { {0,1}, {0,0}, {0,0}, {0,1} };
2733 char *eto_hash
= NULL
, *diy_hash
= NULL
;
2734 static const char *str
= "Hello Wine";
2735 POINT origin
, g_org
;
2736 static const BYTE vals
[4] = { 0x00, 0x00, 0x00, 0x00 };
2738 COLORREF text_color
;
2740 for(i
= 0; i
< dib_size
; i
++)
2741 bits
[i
] = vals
[i
% 4];
2743 memset( &lf
, 0, sizeof(lf
) );
2744 strcpy( lf
.lfFaceName
, "Tahoma" );
2746 lf
.lfQuality
= aa
? ANTIALIASED_QUALITY
: NONANTIALIASED_QUALITY
;
2748 font
= CreateFontIndirect( &lf
);
2749 font
= SelectObject( hdc
, font
);
2751 GetTextMetrics( hdc
, &tm
);
2752 if (!(tm
.tmPitchAndFamily
& TMPF_VECTOR
))
2754 skip( "skipping as a bitmap font has been selected for Tahoma.\n" );
2755 DeleteObject( SelectObject( hdc
, font
) );
2759 SetTextColor( hdc
, RGB(0xff, 0x00, 0x00) );
2760 SetTextAlign( hdc
, TA_BASELINE
);
2761 SetBkMode( hdc
, TRANSPARENT
);
2765 ExtTextOut( hdc
, origin
.x
, origin
.y
, 0, NULL
, str
, strlen(str
), NULL
);
2766 eto_hash
= hash_dib( bmi
, bits
);
2768 for(i
= 0; i
< dib_size
; i
++)
2769 bits
[i
] = vals
[i
% 4];
2771 if (bmi
->bmiHeader
.biBitCount
<= 8) aa
= FALSE
;
2773 text_color
= GetTextColor( hdc
);
2774 for (i
= 0; i
< strlen(str
); i
++)
2776 DWORD ggo_flags
= aa
? GGO_GRAY4_BITMAP
: GGO_BITMAP
;
2778 ret
= GetGlyphOutline( hdc
, str
[i
], ggo_flags
, &gm
, 0, NULL
, &identity
);
2780 if (ret
== GDI_ERROR
) continue;
2782 if (ret
) GetGlyphOutline( hdc
, str
[i
], ggo_flags
, &gm
, sizeof(g_buf
), g_buf
, &identity
);
2784 g_org
.x
= origin
.x
+ gm
.gmptGlyphOrigin
.x
;
2785 g_org
.y
= origin
.y
- gm
.gmptGlyphOrigin
.y
;
2787 origin
.x
+= gm
.gmCellIncX
;
2788 origin
.y
+= gm
.gmCellIncY
;
2794 stride
= (gm
.gmBlackBoxX
+ 3) & ~3;
2796 for (y
= 0; y
< gm
.gmBlackBoxY
; y
++)
2798 BYTE
*g_ptr
= g_buf
+ y
* stride
;
2801 for (x
= 0; x
< gm
.gmBlackBoxX
; x
++)
2803 if (g_ptr
[x
] <= 1) continue;
2804 if (g_ptr
[x
] >= 16) val
= text_color
;
2807 val
= GetPixel( hdc
, g_org
.x
+ x
, g_org
.y
+ y
);
2808 val
= aa_colorref( val
, text_color
, g_ptr
[x
] );
2810 SetPixel( hdc
, g_org
.x
+ x
, g_org
.y
+ y
, val
);
2816 stride
= ((gm
.gmBlackBoxX
+ 31) >> 3) & ~3;
2818 for (y
= 0; y
< gm
.gmBlackBoxY
; y
++)
2820 BYTE
*g_ptr
= g_buf
+ y
* stride
;
2821 for (x
= 0; x
< gm
.gmBlackBoxX
; x
++)
2823 if (g_ptr
[x
/ 8] & masks
[x
% 8])
2824 SetPixel( hdc
, g_org
.x
+ x
, g_org
.y
+ y
, text_color
);
2830 diy_hash
= hash_dib( bmi
, bits
);
2831 ok( !strcmp( eto_hash
, diy_hash
), "hash mismatch - aa %d\n", aa
);
2833 HeapFree( GetProcessHeap(), 0, diy_hash
);
2834 HeapFree( GetProcessHeap(), 0, eto_hash
);
2836 font
= SelectObject( hdc
, font
);
2837 DeleteObject( font
);
2840 static void draw_text( HDC hdc
, BITMAPINFO
*bmi
, BYTE
*bits
)
2842 draw_text_2( hdc
, bmi
, bits
, FALSE
);
2844 /* Rounding errors make these cases hard to test */
2845 if ((bmi
->bmiHeader
.biCompression
== BI_BITFIELDS
&& ((DWORD
*)bmi
->bmiColors
)[0] == 0x3f000) ||
2846 (bmi
->bmiHeader
.biBitCount
== 16))
2849 draw_text_2( hdc
, bmi
, bits
, TRUE
);
2852 static void test_simple_graphics(void)
2854 char bmibuf
[sizeof(BITMAPINFO
) + 256 * sizeof(RGBQUAD
)];
2855 BITMAPINFO
*bmi
= (BITMAPINFO
*)bmibuf
;
2856 RGBQUAD
*colors
= bmi
->bmiColors
;
2857 DWORD
*bit_fields
= (DWORD
*)(bmibuf
+ sizeof(BITMAPINFOHEADER
));
2860 HBITMAP dib
, orig_bm
;
2864 mem_dc
= CreateCompatibleDC(NULL
);
2868 memset(bmi
, 0, sizeof(bmibuf
));
2869 bmi
->bmiHeader
.biSize
= sizeof(bmi
->bmiHeader
);
2870 bmi
->bmiHeader
.biHeight
= 512;
2871 bmi
->bmiHeader
.biWidth
= 512;
2872 bmi
->bmiHeader
.biBitCount
= 32;
2873 bmi
->bmiHeader
.biPlanes
= 1;
2874 bmi
->bmiHeader
.biCompression
= BI_RGB
;
2876 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2877 ok(dib
!= NULL
, "ret NULL\n");
2878 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2879 ok(ds
.dsBitfields
[0] == 0, "got %08x\n", ds
.dsBitfields
[0]);
2880 ok(ds
.dsBitfields
[1] == 0, "got %08x\n", ds
.dsBitfields
[1]);
2881 ok(ds
.dsBitfields
[2] == 0, "got %08x\n", ds
.dsBitfields
[2]);
2882 ok(ds
.dsBmih
.biCompression
== BI_RGB
||
2883 broken(ds
.dsBmih
.biCompression
== BI_BITFIELDS
), /* nt4 sp1 and 2 */
2884 "got %x\n", ds
.dsBmih
.biCompression
);
2886 orig_bm
= SelectObject(mem_dc
, dib
);
2888 dst_format
= "8888";
2889 current_sha1
= sha1_graphics_a8r8g8b8
;
2890 draw_graphics(mem_dc
, bmi
, bits
);
2891 draw_text(mem_dc
, bmi
, bits
);
2893 SelectObject(mem_dc
, orig_bm
);
2896 /* a8r8g8b8 - bitfields. Should be the same as the regular 32 bit case.*/
2897 trace("8888 - bitfields\n");
2898 bmi
->bmiHeader
.biBitCount
= 32;
2899 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2900 bit_fields
[0] = 0xff0000;
2901 bit_fields
[1] = 0x00ff00;
2902 bit_fields
[2] = 0x0000ff;
2904 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2905 ok(dib
!= NULL
, "ret NULL\n");
2906 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2907 ok(ds
.dsBitfields
[0] == 0xff0000, "got %08x\n", ds
.dsBitfields
[0]);
2908 ok(ds
.dsBitfields
[1] == 0x00ff00, "got %08x\n", ds
.dsBitfields
[1]);
2909 ok(ds
.dsBitfields
[2] == 0x0000ff, "got %08x\n", ds
.dsBitfields
[2]);
2910 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2912 orig_bm
= SelectObject(mem_dc
, dib
);
2914 dst_format
= "8888 - bitfields";
2915 current_sha1
= sha1_graphics_a8r8g8b8_bitfields
;
2916 draw_graphics(mem_dc
, bmi
, bits
);
2917 draw_text(mem_dc
, bmi
, bits
);
2919 SelectObject(mem_dc
, orig_bm
);
2923 trace("a8b8g8r8\n");
2924 bmi
->bmiHeader
.biBitCount
= 32;
2925 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2926 bit_fields
[0] = 0x0000ff;
2927 bit_fields
[1] = 0x00ff00;
2928 bit_fields
[2] = 0xff0000;
2930 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2931 ok(dib
!= NULL
, "ret NULL\n");
2932 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2933 ok(ds
.dsBitfields
[0] == 0x0000ff, "got %08x\n", ds
.dsBitfields
[0]);
2934 ok(ds
.dsBitfields
[1] == 0x00ff00, "got %08x\n", ds
.dsBitfields
[1]);
2935 ok(ds
.dsBitfields
[2] == 0xff0000, "got %08x\n", ds
.dsBitfields
[2]);
2936 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2938 orig_bm
= SelectObject(mem_dc
, dib
);
2940 dst_format
= "a8b8g8r8";
2941 current_sha1
= sha1_graphics_a8b8g8r8
;
2942 draw_graphics(mem_dc
, bmi
, bits
);
2943 draw_text(mem_dc
, bmi
, bits
);
2945 SelectObject(mem_dc
, orig_bm
);
2949 trace("r10g10b10\n");
2950 bmi
->bmiHeader
.biBitCount
= 32;
2951 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2952 bit_fields
[0] = 0x3ff00000;
2953 bit_fields
[1] = 0x000ffc00;
2954 bit_fields
[2] = 0x000003ff;
2956 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2957 ok(dib
!= NULL
, "ret NULL\n");
2958 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2959 ok(ds
.dsBitfields
[0] == 0x3ff00000, "got %08x\n", ds
.dsBitfields
[0]);
2960 ok(ds
.dsBitfields
[1] == 0x000ffc00, "got %08x\n", ds
.dsBitfields
[1]);
2961 ok(ds
.dsBitfields
[2] == 0x000003ff, "got %08x\n", ds
.dsBitfields
[2]);
2962 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2964 orig_bm
= SelectObject(mem_dc
, dib
);
2966 dst_format
= "r10g10b10";
2967 current_sha1
= sha1_graphics_r10g10b10
;
2968 draw_graphics(mem_dc
, bmi
, bits
);
2969 draw_text(mem_dc
, bmi
, bits
);
2971 SelectObject(mem_dc
, orig_bm
);
2976 bmi
->bmiHeader
.biBitCount
= 32;
2977 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
2978 bit_fields
[0] = 0x0003f000;
2979 bit_fields
[1] = 0x00000fc0;
2980 bit_fields
[2] = 0x0000003f;
2982 dib
= CreateDIBSection(mem_dc
, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
2983 ok(dib
!= NULL
, "ret NULL\n");
2984 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
2985 ok(ds
.dsBitfields
[0] == 0x0003f000, "got %08x\n", ds
.dsBitfields
[0]);
2986 ok(ds
.dsBitfields
[1] == 0x00000fc0, "got %08x\n", ds
.dsBitfields
[1]);
2987 ok(ds
.dsBitfields
[2] == 0x0000003f, "got %08x\n", ds
.dsBitfields
[2]);
2988 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
2990 orig_bm
= SelectObject(mem_dc
, dib
);
2992 dst_format
= "r6g6b6";
2993 current_sha1
= sha1_graphics_r6g6b6
;
2994 draw_graphics(mem_dc
, bmi
, bits
);
2995 draw_text(mem_dc
, bmi
, bits
);
2997 SelectObject(mem_dc
, orig_bm
);
3002 bmi
->bmiHeader
.biBitCount
= 24;
3003 bmi
->bmiHeader
.biCompression
= BI_RGB
;
3005 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3006 ok(dib
!= NULL
, "ret NULL\n");
3007 orig_bm
= SelectObject(mem_dc
, dib
);
3010 current_sha1
= sha1_graphics_24
;
3011 draw_graphics(mem_dc
, bmi
, bits
);
3012 draw_text(mem_dc
, bmi
, bits
);
3014 SelectObject(mem_dc
, orig_bm
);
3019 bmi
->bmiHeader
.biBitCount
= 16;
3020 bmi
->bmiHeader
.biCompression
= BI_RGB
;
3022 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3023 ok(dib
!= NULL
, "ret NULL\n");
3024 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
3025 ok(ds
.dsBitfields
[0] == 0x7c00, "got %08x\n", ds
.dsBitfields
[0]);
3026 ok(ds
.dsBitfields
[1] == 0x03e0, "got %08x\n", ds
.dsBitfields
[1]);
3027 ok(ds
.dsBitfields
[2] == 0x001f, "got %08x\n", ds
.dsBitfields
[2]);
3028 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
3030 orig_bm
= SelectObject(mem_dc
, dib
);
3032 dst_format
= "r5g5b5";
3033 current_sha1
= sha1_graphics_r5g5b5
;
3034 draw_graphics(mem_dc
, bmi
, bits
);
3035 draw_text(mem_dc
, bmi
, bits
);
3037 SelectObject(mem_dc
, orig_bm
);
3042 bmi
->bmiHeader
.biBitCount
= 16;
3043 bmi
->bmiHeader
.biCompression
= BI_BITFIELDS
;
3044 bit_fields
[0] = 0x0f00;
3045 bit_fields
[1] = 0x00f0;
3046 bit_fields
[2] = 0x000f;
3047 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3048 ok(dib
!= NULL
, "ret NULL\n");
3049 ok(GetObjectW( dib
, sizeof(ds
), &ds
), "GetObject failed\n");
3050 ok(ds
.dsBitfields
[0] == 0x0f00, "got %08x\n", ds
.dsBitfields
[0]);
3051 ok(ds
.dsBitfields
[1] == 0x00f0, "got %08x\n", ds
.dsBitfields
[1]);
3052 ok(ds
.dsBitfields
[2] == 0x000f, "got %08x\n", ds
.dsBitfields
[2]);
3053 ok(ds
.dsBmih
.biCompression
== BI_BITFIELDS
, "got %x\n", ds
.dsBmih
.biCompression
);
3055 orig_bm
= SelectObject(mem_dc
, dib
);
3057 dst_format
= "r4g4b4";
3058 current_sha1
= sha1_graphics_r4g4b4
;
3059 draw_graphics(mem_dc
, bmi
, bits
);
3060 draw_text(mem_dc
, bmi
, bits
);
3062 SelectObject(mem_dc
, orig_bm
);
3067 bmi
->bmiHeader
.biBitCount
= 8;
3068 bmi
->bmiHeader
.biCompression
= BI_RGB
;
3069 bmi
->bmiHeader
.biClrUsed
= 236;
3070 for (i
= 0; i
< 236; i
++)
3072 colors
[i
].rgbRed
= (i
& 0x07) << 5;
3073 colors
[i
].rgbGreen
= (i
& 0x38) << 2;
3074 colors
[i
].rgbBlue
= i
& 0xc0;
3076 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3077 ok(dib
!= NULL
, "ret NULL\n");
3079 orig_bm
= SelectObject(mem_dc
, dib
);
3081 dst_format
= "8 color";
3082 current_sha1
= sha1_graphics_8_color
;
3083 draw_graphics(mem_dc
, bmi
, bits
);
3084 draw_text(mem_dc
, bmi
, bits
);
3086 SelectObject(mem_dc
, orig_bm
);
3090 trace("8 grayscale\n");
3091 bmi
->bmiHeader
.biBitCount
= 8;
3092 bmi
->bmiHeader
.biCompression
= BI_RGB
;
3093 bmi
->bmiHeader
.biClrUsed
= 256;
3094 for (i
= 0; i
< 256; i
++) colors
[i
].rgbRed
= colors
[i
].rgbGreen
= colors
[i
].rgbBlue
= i
;
3096 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3097 ok(dib
!= NULL
, "ret NULL\n");
3099 orig_bm
= SelectObject(mem_dc
, dib
);
3101 dst_format
= "8 grayscale";
3102 current_sha1
= sha1_graphics_8_grayscale
;
3103 draw_graphics(mem_dc
, bmi
, bits
);
3104 draw_text(mem_dc
, bmi
, bits
);
3106 SelectObject(mem_dc
, orig_bm
);
3111 bmi
->bmiHeader
.biBitCount
= 8;
3112 bmi
->bmiHeader
.biCompression
= BI_RGB
;
3113 bmi
->bmiHeader
.biClrUsed
= 5;
3114 colors
[0].rgbRed
= 0xff;
3115 colors
[0].rgbGreen
= 0xff;
3116 colors
[0].rgbBlue
= 0xff;
3117 colors
[1].rgbRed
= 0;
3118 colors
[1].rgbGreen
= 0;
3119 colors
[1].rgbBlue
= 0;
3120 colors
[2].rgbRed
= 0xff;
3121 colors
[2].rgbGreen
= 0;
3122 colors
[2].rgbBlue
= 0;
3123 colors
[3].rgbRed
= 0;
3124 colors
[3].rgbGreen
= 0xff;
3125 colors
[3].rgbBlue
= 0;
3126 colors
[4].rgbRed
= 0;
3127 colors
[4].rgbGreen
= 0;
3128 colors
[4].rgbBlue
= 0xff;
3130 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3131 ok(dib
!= NULL
, "ret NULL\n");
3133 orig_bm
= SelectObject(mem_dc
, dib
);
3136 current_sha1
= sha1_graphics_8
;
3137 draw_graphics(mem_dc
, bmi
, bits
);
3138 draw_text(mem_dc
, bmi
, bits
);
3140 SelectObject(mem_dc
, orig_bm
);
3145 bmi
->bmiHeader
.biBitCount
= 4;
3147 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3148 ok(dib
!= NULL
, "ret NULL\n");
3150 orig_bm
= SelectObject(mem_dc
, dib
);
3153 current_sha1
= sha1_graphics_4
;
3154 draw_graphics(mem_dc
, bmi
, bits
);
3155 draw_text(mem_dc
, bmi
, bits
);
3157 SelectObject(mem_dc
, orig_bm
);
3161 trace("4 grayscale\n");
3162 bmi
->bmiHeader
.biClrUsed
= 16;
3163 for (i
= 0; i
< 16; i
++) colors
[i
].rgbRed
= colors
[i
].rgbGreen
= colors
[i
].rgbBlue
= i
* 17;
3165 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3166 ok(dib
!= NULL
, "ret NULL\n");
3168 orig_bm
= SelectObject(mem_dc
, dib
);
3170 dst_format
= "4 grayscale";
3171 current_sha1
= sha1_graphics_4_grayscale
;
3172 draw_graphics(mem_dc
, bmi
, bits
);
3173 draw_text(mem_dc
, bmi
, bits
);
3175 SelectObject(mem_dc
, orig_bm
);
3180 bmi
->bmiHeader
.biBitCount
= 1;
3181 bmi
->bmiHeader
.biClrUsed
= 2;
3183 colors
[0].rgbRed
= 0x00;
3184 colors
[0].rgbGreen
= 0x01;
3185 colors
[0].rgbBlue
= 0xff;
3186 colors
[1].rgbRed
= 0xff;
3187 colors
[1].rgbGreen
= 0x00;
3188 colors
[1].rgbBlue
= 0x00;
3190 dib
= CreateDIBSection(0, bmi
, DIB_RGB_COLORS
, (void**)&bits
, NULL
, 0);
3191 ok(dib
!= NULL
, "ret NULL\n");
3193 orig_bm
= SelectObject(mem_dc
, dib
);
3196 current_sha1
= sha1_graphics_1
;
3197 draw_graphics(mem_dc
, bmi
, bits
);
3198 draw_text(mem_dc
, bmi
, bits
);
3200 SelectObject(mem_dc
, orig_bm
);
3208 HMODULE mod
= GetModuleHandleA("gdi32.dll");
3209 pSetLayout
= (void *)GetProcAddress( mod
, "SetLayout" );
3210 pGdiAlphaBlend
= (void *)GetProcAddress( mod
, "GdiAlphaBlend" );
3211 pGdiGradientFill
= (void *)GetProcAddress( mod
, "GdiGradientFill" );
3213 CryptAcquireContextW(&crypt_prov
, NULL
, NULL
, PROV_RSA_FULL
, CRYPT_VERIFYCONTEXT
);
3215 test_simple_graphics();
3217 CryptReleaseContext(crypt_prov
, 0);