source: trunk/src/wing32/wing32.cpp@ 21916

Last change on this file since 21916 was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

File size: 33.3 KB
Line 
1/* $Id: wing32.cpp,v 1.2 2000-08-02 15:51:35 bird Exp $ */
2#include <memory.h>
3#include <wingdi.h>
4#include <winuser.h>
5#include "wing32impl.h"
6#pragma pack(1)
7
8RGBTRIPLE RGBTable[] = {
9 {0x00,0x00,0x00},
10 {0x80,0x00,0x00},
11 {0x00,0x80,0x00},
12 {0x80,0x80,0x00},
13 {0x00,0x00,0x80},
14 {0x80,0x00,0x80},
15 {0x00,0x80,0x80},
16 {0xC0,0xC0,0xC0},
17 {0xC0,0xDC,0xC0},
18 {0xA6,0xCA,0xF0},
19 {0x04,0x04,0x04},
20 {0x08,0x08,0x08},
21 {0x0C,0x0C,0x0C},
22 {0x11,0x11,0x11},
23 {0x16,0x16,0x16},
24 {0x1C,0x1C,0x1C},
25 {0x22,0x22,0x22},
26 {0x29,0x29,0x29},
27 {0x55,0x55,0x55},
28 {0x4D,0x4D,0x4D},
29 {0x42,0x42,0x42},
30 {0x39,0x39,0x39},
31 {0x81,0x81,0x81},
32 {0x81,0x00,0x00},
33 {0x00,0x81,0x00},
34 {0x81,0x81,0x00},
35 {0x00,0x00,0x81},
36 {0x81,0x00,0x81},
37 {0x00,0x81,0x81},
38 {0x33,0x00,0x00},
39 {0x66,0x00,0x00},
40 {0x99,0x00,0x00},
41 {0xCC,0x00,0x00},
42 {0x00,0x33,0x00},
43 {0x33,0x33,0x00},
44 {0x66,0x33,0x00},
45 {0x99,0x33,0x00},
46 {0xCC,0x33,0x00},
47 {0xFF,0x33,0x00},
48 {0x00,0x66,0x00},
49 {0x33,0x66,0x00},
50 {0x66,0x66,0x00},
51 {0x99,0x66,0x00},
52 {0xCC,0x66,0x00},
53 {0xFF,0x66,0x00},
54 {0x00,0x99,0x00},
55 {0x33,0x99,0x00},
56 {0x66,0x99,0x00},
57 {0x99,0x99,0x00},
58 {0xCC,0x99,0x00},
59 {0xFF,0x99,0x00},
60 {0x00,0xCC,0x00},
61 {0x33,0xCC,0x00},
62 {0x66,0xCC,0x00},
63 {0x99,0xCC,0x00},
64 {0xCC,0xCC,0x00},
65 {0xFF,0xCC,0x00},
66 {0x66,0xFF,0x00},
67 {0x99,0xFF,0x00},
68 {0xCC,0xFF,0x00},
69 {0x00,0x00,0x33},
70 {0x33,0x00,0x33},
71 {0x66,0x00,0x33},
72 {0x99,0x00,0x33},
73 {0xCC,0x00,0x33},
74 {0xFF,0x00,0x33},
75 {0x00,0x33,0x33},
76 {0x33,0x33,0x33},
77 {0x66,0x33,0x33},
78 {0x99,0x33,0x33},
79 {0xCC,0x33,0x33},
80 {0xFF,0x33,0x33},
81 {0x00,0x66,0x33},
82 {0x33,0x66,0x33},
83 {0x66,0x66,0x33},
84 {0x99,0x66,0x33},
85 {0xCC,0x66,0x33},
86 {0xFF,0x66,0x33},
87 {0x00,0x99,0x33},
88 {0x33,0x99,0x33},
89 {0x66,0x99,0x33},
90 {0x99,0x99,0x33},
91 {0xCC,0x99,0x33},
92 {0xFF,0x99,0x33},
93 {0x00,0xCC,0x33},
94 {0x33,0xCC,0x33},
95 {0x66,0xCC,0x33},
96 {0x99,0xCC,0x33},
97 {0xCC,0xCC,0x33},
98 {0xFF,0xCC,0x33},
99 {0x33,0xFF,0x33},
100 {0x66,0xFF,0x33},
101 {0x99,0xFF,0x33},
102 {0xCC,0xFF,0x33},
103 {0xFF,0xFF,0x33},
104 {0x00,0x00,0x66},
105 {0x33,0x00,0x66},
106 {0x66,0x00,0x66},
107 {0x99,0x00,0x66},
108 {0xCC,0x00,0x66},
109 {0xFF,0x00,0x66},
110 {0x00,0x33,0x66},
111 {0x33,0x33,0x66},
112 {0x66,0x33,0x66},
113 {0x99,0x33,0x66},
114 {0xCC,0x33,0x66},
115 {0xFF,0x33,0x66},
116 {0x00,0x66,0x66},
117 {0x33,0x66,0x66},
118 {0x66,0x66,0x66},
119 {0x99,0x66,0x66},
120 {0xCC,0x66,0x66},
121 {0x00,0x99,0x66},
122 {0x33,0x99,0x66},
123 {0x66,0x99,0x66},
124 {0x99,0x99,0x66},
125 {0xCC,0x99,0x66},
126 {0xFF,0x99,0x66},
127 {0x00,0xCC,0x66},
128 {0x33,0xCC,0x66},
129 {0x99,0xCC,0x66},
130 {0xCC,0xCC,0x66},
131 {0xFF,0xCC,0x66},
132 {0x00,0xFF,0x66},
133 {0x33,0xFF,0x66},
134 {0x99,0xFF,0x66},
135 {0xCC,0xFF,0x66},
136 {0xFF,0x00,0xCC},
137 {0xCC,0x00,0xFF},
138 {0x00,0x99,0x99},
139 {0x99,0x33,0x99},
140 {0x99,0x00,0x99},
141 {0xCC,0x00,0x99},
142 {0x00,0x00,0x99},
143 {0x33,0x33,0x99},
144 {0x66,0x00,0x99},
145 {0xCC,0x33,0x99},
146 {0xFF,0x00,0x99},
147 {0x00,0x66,0x99},
148 {0x33,0x33,0x99},
149 {0x33,0x66,0x99},
150 {0x66,0x33,0x99},
151 {0x99,0x33,0x99},
152 {0xCC,0x66,0x99},
153 {0xFF,0x33,0x99},
154 {0x33,0x99,0x99},
155 {0x66,0x99,0x99},
156 {0x99,0x99,0x99},
157 {0xCC,0x99,0x99},
158 {0xFF,0x99,0x99},
159 {0x00,0xCC,0x99},
160 {0x33,0xCC,0x99},
161 {0x66,0xCC,0x66},
162 {0x99,0xCC,0x99},
163 {0xCC,0xCC,0x99},
164 {0xFF,0xCC,0x99},
165 {0x00,0xFF,0x99},
166 {0x33,0xFF,0x99},
167 {0x66,0xCC,0x99},
168 {0x99,0xFF,0x99},
169 {0xCC,0xFF,0x99},
170 {0xFF,0xFF,0x99},
171 {0x00,0x00,0xCC},
172 {0x33,0x00,0x99},
173 {0x66,0x00,0xCC},
174 {0x99,0x00,0xCC},
175 {0xCC,0x00,0xCC},
176 {0x00,0x33,0x99},
177 {0x33,0x33,0xCC},
178 {0x66,0x33,0xCC},
179 {0x99,0x33,0xCC},
180 {0xCC,0x33,0xCC},
181 {0xFF,0x33,0xCC},
182 {0x00,0x66,0xCC},
183 {0x33,0x66,0xCC},
184 {0x66,0x66,0x99},
185 {0x99,0x66,0xCC},
186 {0xCC,0x66,0xCC},
187 {0xFF,0x66,0x99},
188 {0x00,0x99,0xCC},
189 {0x33,0x99,0xCC},
190 {0x66,0x99,0xCC},
191 {0x99,0x99,0xCC},
192 {0xCC,0x99,0xCC},
193 {0xFF,0x99,0xCC},
194 {0x00,0xCC,0xCC},
195 {0x33,0xCC,0xCC},
196 {0x66,0xCC,0xCC},
197 {0x99,0xCC,0xCC},
198 {0xCC,0xCC,0xCC},
199 {0xFF,0xCC,0xCC},
200 {0x00,0xFF,0xCC},
201 {0x33,0xFF,0xCC},
202 {0x66,0xFF,0x99},
203 {0x99,0xFF,0xCC},
204 {0xCC,0xFF,0xCC},
205 {0xFF,0xFF,0xCC},
206 {0x33,0x00,0xCC},
207 {0x66,0x00,0xFF},
208 {0x99,0x00,0xFF},
209 {0x00,0x33,0xCC},
210 {0x33,0x33,0xFF},
211 {0x66,0x33,0xFF},
212 {0x99,0x33,0xFF},
213 {0xCC,0x33,0xFF},
214 {0xFF,0x33,0xFF},
215 {0x00,0x66,0xFF},
216 {0x33,0x66,0xFF},
217 {0x66,0x66,0xCC},
218 {0x99,0x66,0xFF},
219 {0xCC,0x66,0xFF},
220 {0xFF,0x66,0xCC},
221 {0x00,0x99,0xFF},
222 {0x33,0x99,0xFF},
223 {0x66,0x99,0xFF},
224 {0x99,0x99,0xFF},
225 {0xCC,0x99,0xFF},
226 {0xFF,0x99,0xFF},
227 {0x00,0xCC,0xFF},
228 {0x33,0xCC,0xFF},
229 {0x66,0xCC,0xFF},
230 {0x99,0xCC,0xFF},
231 {0xCC,0xCC,0xFF},
232 {0xFF,0xCC,0xFF},
233 {0x33,0xFF,0xFF},
234 {0x66,0xFF,0xCC},
235 {0x99,0xFF,0xFF},
236 {0xCC,0xFF,0xFF},
237 {0xFF,0x66,0x66},
238 {0x66,0xFF,0x66},
239 {0xFF,0xFF,0x66},
240 {0x66,0x66,0xFF},
241 {0xFF,0x66,0xFF},
242 {0x66,0xFF,0xFF},
243 {0xC1,0xC1,0xC1},
244 {0x5F,0x5F,0x5F},
245 {0x77,0x77,0x77},
246 {0x86,0x86,0x86},
247 {0x96,0x96,0x96},
248 {0xCB,0xCB,0xCB},
249 {0xB2,0xB2,0xB2},
250 {0xD7,0xD7,0xD7},
251 {0xDD,0xDD,0xDD},
252 {0xE3,0xE3,0xE3},
253 {0xEA,0xEA,0xEA},
254 {0xF1,0xF1,0xF1},
255 {0xF8,0xF8,0xF8},
256 {0xFF,0xFB,0xF0},
257 {0xA0,0xA0,0xA4},
258 {0x80,0x80,0x80},
259 {0xFF,0x00,0x00},
260 {0x00,0xFF,0x00},
261 {0xFF,0xFF,0x00},
262 {0x00,0x00,0xFF},
263 {0xFF,0x00,0xFF},
264 {0x00,0xFF,0xFF},
265 {0xFF,0xFF,0xFF}
266 };
267
268BYTE bLookupTable1[216] = { 0x00, 0x1D, 0x1E, 0x1F, 0x20, 0xF9, 0x21, 0x22,
269 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A,
270 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,
271 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0xFA, 0xFA,
272 0x39, 0x3A, 0x3B, 0xFB, 0x3C, 0x3D, 0x3E, 0x3F,
273 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
274 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
275 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
276 0x58, 0x59, 0xFA, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
277 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
278 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
279 0x6F, 0xE3, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
280 0x76, 0x77, 0x97, 0x78, 0x79, 0x7A, 0x7B, 0x7C,
281 0xE4, 0x7D, 0x7E, 0xE5, 0x85, 0xA2, 0x87,
282 0x83, 0x84, 0x89, 0xA6, 0x86, 0x8C, 0x82, 0x88,
283 0x8F, 0x8A, 0x8B, 0xAE, 0x8D, 0x8E, 0xB1, 0x81,
284 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x9D,
285 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0xC0, 0x9E, 0x9F,
286 0xA0, 0xA1, 0xC4, 0xA3, 0xA4, 0xA5, 0x7F,
287 0xC7, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC,
288 0xAD, 0xCF, 0xAF, 0xB0, 0xD2, 0xB2, 0xB3,
289 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA,
290 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xE0, 0xC1,
291 0xC2, 0xC3, 0xFC, 0xFC, 0xC5, 0xC6, 0x80,
292 0xFD, 0xFC, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC,
293 0xCD, 0xCE, 0xE6, 0xD0, 0xD1, 0xE7, 0xD3,
294 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
295 0xDB, 0xDC, 0xDD, 0xDE, 0xFE, 0xDF, 0xE8,
296 0xE1, 0xE2, 0xFF
297 };
298
299BYTE bLookupTable2[512] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00,
303 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
304 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
305 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
306 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
307 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
308 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
309 0x01, 0x01, 0x01,
310 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
311 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
312 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
313 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
314 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
315 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
316 0x02, 0x02, 0x02,
317 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
318 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
319 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
320 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
321 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
322 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
323 0x03, 0x03, 0x03,
324 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
325 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
326 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
327 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
328 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
329 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
330 0x04, 0x04, 0x04,
331 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
332 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
333 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
334 0x05, 0x05,
335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
338 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
340 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341 0x00, 0x00, 0x00,
342 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
343 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
344 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
345 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
346 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
347 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
348 0x01, 0x01, 0x01,
349 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
350 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
351 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
352 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
353 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
354 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
355 0x02, 0x02, 0x02,
356 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
357 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
358 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
359 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
360 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
361 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
362 0x03, 0x03, 0x03,
363 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
364 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
365 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
366 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
367 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
368 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
369 0x04, 0x04, 0x04,
370 0x05
371 };
372
373BYTE bLookupTable3[256] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
374 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
375 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
376 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
377 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
378 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
379 0x30, 0x31, 0x32,
380 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
381 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
382 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
383 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
384 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
385 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
386 0x30, 0x31, 0x32,
387 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
388 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
389 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
390 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
391 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
392 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
393 0x30, 0x31, 0x32,
394 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
395 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
396 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
397 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
398 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
399 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
400 0x30, 0x31, 0x32,
401 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
402 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
403 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
404 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
405 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
406 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
407 0x30, 0x31, 0x32,
408 0x00
409
410 };
411
412
413BYTE bLookupTable4[8] = { 0x00, 0x06, 0x0C, 0x12, 0x18, 0x1E, 0x00, 0x00
414 };
415
416BYTE bLookupTable5[112] = { 0x00, 0x24, 0x48, 0x6C, 0x90, 0xB4, 0x00, 0x00,
417 0x00, 0x26, 0x09, 0x2F, 0x02, 0x28, 0x0B, 0x32,
418 0x19, 0x0C, 0x23, 0x16, 0x1B, 0x0F, 0x25, 0x18,
419 0x06, 0x2C, 0x03, 0x29, 0x08, 0x2F, 0x05, 0x2B,
420 0x1F, 0x13, 0x1C, 0x0F, 0x22, 0x15, 0x1F, 0x12,
421 0x01, 0x27, 0x0B, 0x31, 0x00, 0x27, 0x0A, 0x30,
422 0x1B, 0x0E, 0x24, 0x17, 0x1A, 0x0D, 0x23, 0x17,
423 0x07, 0x2E, 0x04, 0x2B, 0x07, 0x2D, 0x03, 0x2A,
424 0x21, 0x14, 0x1E, 0x11, 0x20, 0x13, 0x1D, 0x10,
425 0x00, 0x19, 0x06, 0x1F, 0x26, 0x0C, 0x2C, 0x13,
426 0x09, 0x23, 0x03, 0x1C, 0x2F, 0x16, 0x29, 0x0F,
427 0x29, 0x03, 0x09, 0x1C, 0x23, 0x0F, 0x16, 0x2F,
428 0x06, 0x19, 0x26, 0x00, 0x13, 0x2C, 0x1F, 0x0C,
429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
430 };
431
432BYTE bLookupTable6[64] = { 0x00, 0x00, 0x0A, 0x04, 0x0B, 0x08, 0x0C, 0x0C,
433 0x0D, 0x11, 0x0E, 0x16, 0x0F, 0x1C, 0x10, 0x22,
434 0x11, 0x29, 0x43, 0x33, 0x15, 0x39, 0x14, 0x42,
435 0x13, 0x4D, 0x12, 0x55, 0xEA, 0x5F, 0x6D, 0x66,
436 0xEB, 0x77, 0x16, 0x80, 0xEC, 0x86, 0xED, 0x96,
437 0x92, 0x99, 0xEF, 0xB2, 0xE9, 0xC0, 0xEE, 0xCB,
438 0xBC, 0xCC, 0xF0, 0xD7, 0xF1, 0xDD, 0xF2, 0xE3,
439 0xF3, 0xEA, 0xF4, 0xF1, 0xF5, 0xF8, 0xFF, 0xFF
440 };
441
442#pragma pack()
443
444#pragma pack(2)
445
446static struct
447{
448 WORD palVersion;
449 WORD palNumEntries;
450 PALETTEENTRY palPalEntry[256];
451} HalfTonePal;
452
453#pragma pack()
454
455BYTE DitherBmp8x8[64];
456HBITMAP hbmpPattern;
457DWORD dwTotalPixels;
458DWORD dwCapsRaster;
459
460static struct {
461 BITMAPINFOHEADER bmiHeader;
462 RGBQUAD bmiColors[256];
463} bmiPattern;
464
465
466HDC WINAPI WinGCreateDC()
467{
468 return CreateCompatibleDC(NULL);
469}
470
471BOOL WINAPI WinGRecommendDIBFormat(BITMAPINFO *bmpi)
472{
473 memset( bmpi, 0, sizeof(BITMAPINFO) );
474 bmpi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
475 bmpi->bmiHeader.biWidth = 1;
476 bmpi->bmiHeader.biHeight = 1;
477 bmpi->bmiHeader.biPlanes = 1;
478 bmpi->bmiHeader.biBitCount = 8;
479
480 return TRUE;
481}
482
483HBITMAP WINAPI WinGCreateBitmap( HDC hdc,
484 BITMAPINFO *bmpi,
485 LPVOID *bits)
486{
487 return CreateDIBSection( hdc, bmpi, 0, bits, 0, 0);
488}
489
490LPVOID WINAPI WinGGetDIBPointer(HBITMAP hWinGBitmap, BITMAPINFO* bmpi)
491{
492 DIBSECTION dibSect ;
493 DWORD rc;
494 rc = GetObjectA( hWinGBitmap,
495 sizeof(DIBSECTION),
496 &dibSect);
497 if(0==rc)
498 {
499 memcpy( bmpi,
500 &dibSect.dsBmih,
501 sizeof(BITMAPINFOHEADER));
502 if( bmpi->bmiHeader.biCompression == BI_RGB)
503 {
504 // Copy 3 RGB values
505 memcpy( bmpi->bmiColors,
506 &dibSect.dsBitfields,
507 sizeof(*dibSect.dsBitfields));
508 }
509 }
510
511 return dibSect.dsBm.bmBits;
512}
513
514UINT WINAPI WinGGetDIBColorTable(HDC hdc, UINT start, UINT num, RGBQUAD *colors)
515{
516 return GetDIBColorTable(hdc,start,num,colors);
517}
518
519UINT WINAPI WinGSetDIBColorTable(HDC hdc, UINT start, UINT num, RGBQUAD *colors)
520{
521 return SetDIBColorTable(hdc,start,num,colors);
522}
523
524BOOL WINAPI WinGBitBlt( HDC destDC, UINT xDest, UINT yDest,
525 UINT widDest, UINT heiDest, HDC srcDC,
526 UINT xSrc, UINT ySrc)
527{
528 return BitBlt( destDC,
529 xDest,
530 yDest,
531 widDest,
532 heiDest,
533 srcDC,
534 xSrc,
535 ySrc,
536 SRCCOPY);
537}
538
539BOOL WINAPI WinGStretchBlt( HDC destDC, UINT xDest, UINT yDest,
540 UINT widDest, UINT heiDest,
541 HDC srcDC, UINT xSrc, UINT ySrc,
542 UINT widSrc, UINT heiSrc)
543{
544 INT iOldMode;
545 BOOL fRC;
546 iOldMode = SetStretchBltMode( destDC, COLORONCOLOR);
547 fRC= StretchBlt( destDC,
548 xDest,
549 yDest,
550 widDest,
551 heiDest,
552 srcDC,
553 xSrc,
554 ySrc,
555 widSrc,
556 heiSrc,
557 SRCCOPY);
558 SetStretchBltMode(destDC,iOldMode);
559 return fRC;
560}
561
562// Todo check this and move to right include etc..
563#define WING_DITHER_TYPE DWORD
564
565HBRUSH WINAPI WinGCreateHalftoneBrush( HDC winDC,
566 COLORREF col,
567 WING_DITHER_TYPE type)
568{
569 DWORD Idx;
570 BYTE bI;
571
572 if(NULL==winDC)
573 return NULL;
574
575 if(type>2)
576 return NULL;
577
578 if(!(0x01000000 & col)) // Color is PALETTEINDEX
579 {
580 Idx = (col & 0xFF) *3;
581 return CreateSolidBrush( PALETTERGB( RGBTable[Idx].rgbtRed, RGBTable[Idx].rgbtGreen, RGBTable[Idx].rgbtBlue));
582 }
583 else
584 {
585 if( ( (col&0xFF) == ((col>>8)&0xFF) ) && ( (col&0xFF) == ((col>>16)&0xFF) ) )
586 {
587 // All colors equal find index
588 Idx = ((((col &0xFF)<<5)-(col&0xFF))/0xFF)&0xFF;
589 if(bLookupTable6[Idx*2+1] <= (BYTE)((col>>8)& 0xFF))
590 do
591 {
592 Idx--;
593 }
594 while(bLookupTable6[Idx*2+1] > (BYTE)((col>>8)& 0xFF));
595
596 while(Idx<31)
597 {
598 if(bLookupTable6[Idx*2+2] >=(BYTE)(col& 0xFF))
599 break;
600 Idx++;
601 }
602
603 if(Idx!=31)
604 {
605 if(bLookupTable6[Idx*2] !=(BYTE)((col>>16)& 0xFF))
606 {
607 }
608 if(col & 0x02000000)
609 {
610 }
611 }
612 else
613 {
614 bI = bLookupTable6[Idx*2];
615 col = PALETTERGB(RGBTable[bI].rgbtRed, RGBTable[bI].rgbtGreen, RGBTable[bI].rgbtBlue);
616 }
617 return CreateSolidBrush(col);
618 }
619 else
620 {
621 DWORD dwHlp;
622
623 if(col & 0x02000000) // PaletteRGB ?
624 {
625 Idx = col&0xFF;
626 if( (0!=bLookupTable3[col&0xFF]) ||
627 (0!=bLookupTable3[(col>>16)&0xFF]) ||
628 (0!=bLookupTable3[(col>>8)&0xFF]) )
629 {
630
631 switch(type)
632 {
633 case 0:
634 SetupDitherBit2(col, (BYTE*)&DitherBmp8x8, &bLookupTable5[0x48]);
635 break;
636 case 1:
637 SetupDitherBit1(col, (BYTE*)&DitherBmp8x8);
638 break;
639 case 2:
640 SetupDitherBit2(col, (BYTE*)&DitherBmp8x8, &bLookupTable5[0x58]);
641 break;
642 }
643 return CreatePatternHTBrush( winDC,(BYTE*) &DitherBmp8x8);
644 }
645 }
646
647 bI = bLookupTable2[(col>>16)&0xFF];
648 dwHlp = bLookupTable4[bI];
649 bI = bLookupTable2[col&0xFF];
650 dwHlp += bLookupTable4[bI];
651 bI = bLookupTable2[(col>>8)&0xFF];
652 Idx = bLookupTable1[dwHlp+bI];
653
654 return CreateSolidBrush(PALETTERGB(RGBTable[Idx].rgbtRed, RGBTable[Idx].rgbtGreen, RGBTable[Idx].rgbtBlue));
655 }
656 }
657}
658
659void SetupDitherBit1(COLORREF col, BYTE *pBits)
660{
661 BYTE b1,b2,b3,b4,
662 b5,b6,b7,b8,
663 b9,bA,bB,bC,
664 bD,bE;
665 BYTE *ptr;
666
667 b5 = bLookupTable2[256+(col&0xFF)];
668 b6 = bLookupTable3[col&0xFF];
669 b3 = bLookupTable2[256+((col>>8)&0xFF)];
670 b4 = bLookupTable3[(col>>8)&0xFF];
671 b2 = bLookupTable2[256+((col>>16)&0xFF)];
672 b1 = bLookupTable3[(col>>16)&0xFF];
673
674 ptr = &bLookupTable5[8];
675 for(int i=0;i<8;i++)
676 {
677 bE = ptr[0]>b6?b5+1:b5;
678 pBits[0] = bLookupTable1[bLookupTable4[((ptr[0]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[0]<b2)?b1+1:b1)&0xFF]+bE];
679
680 bD = ptr[1]>b6?b5+1:b5;
681 pBits[1] = bLookupTable1[bLookupTable4[((ptr[1]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[1]<b2)?b1+1:b1)&0xFF]+bD];
682
683 bC = ptr[2]>b6?b5+1:b5;
684 pBits[2] = bLookupTable1[bLookupTable4[((ptr[2]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[2]<b2)?b1+1:b1)&0xFF]+bC];
685
686 bB = ptr[3]>b6?b5+1:b5;
687 pBits[3] = bLookupTable1[bLookupTable4[((ptr[3]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[3]<b2)?b1+1:b1)&0xFF]+bB];
688
689 bA = ptr[4]>b6?b5+1:b5;
690 pBits[4] = bLookupTable1[bLookupTable4[((ptr[4]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[4]<b2)?b1+1:b1)&0xFF]+bA];
691
692 b9 = ptr[5]>b6?b5+1:b5;
693 pBits[5] = bLookupTable1[bLookupTable4[((ptr[5]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[5]<b2)?b1+1:b1)&0xFF]+b9];
694
695 b8 = ptr[6]>b6?b5+1:b5;
696 pBits[6] = bLookupTable1[bLookupTable4[((ptr[6]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[6]<b2)?b1+1:b1)&0xFF]+b8];
697
698 b7 = ptr[7]>b6?b5+1:b5;
699 pBits[7] = bLookupTable1[bLookupTable4[((ptr[7]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[7]<b2)?b1+1:b1)&0xFF]+b7];
700
701 pBits+=8;
702 ptr+=8;
703 }
704}
705
706void SetupDitherBit2(COLORREF col, BYTE *pBits, BYTE *ptr)
707{
708 BYTE b1,b2,b3,b4,
709 b5,b6,b7,b8,
710 b9,bA;
711
712 b5 = bLookupTable2[256+(col&0xFF)];
713 b6 = bLookupTable3[col&0xFF];
714 b3 = bLookupTable2[256+((col>>8)&0xFF)];
715 b4 = bLookupTable3[(col>>8)&0xFF];
716 b2 = bLookupTable2[256+((col>>16)&0xFF)];
717 b1 = bLookupTable3[(col>>16)&0xFF];
718
719 for(int i=0;i<4;i++)
720 {
721 bA = ptr[0]<b6?b5+1:b5;
722 pBits[0] = bLookupTable1[ bLookupTable4[((ptr[0]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[0]>b2)?b1+1:b1)&0xFF]+bA];
723 pBits[4] = pBits[0];
724 pBits[32] = pBits[0];
725 pBits[36] = pBits[0];
726
727 b9 = ptr[1]<b6?b5+1:b5;
728 pBits[1] = bLookupTable1[ bLookupTable4[((ptr[1]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[1]>b2)?b1+1:b1)&0xFF]+b9];
729 pBits[5] = pBits[1];
730 pBits[33] = pBits[1];
731 pBits[37] = pBits[1];
732
733 b8 = ptr[2]<b6?b5+1:b5;
734 pBits[2] = bLookupTable1[ bLookupTable4[((ptr[2]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[2]>b2)?b1+1:b1)&0xFF]+b8];
735 pBits[6] = pBits[2];
736 pBits[34] = pBits[2];
737 pBits[38] = pBits[2];
738
739 b7 = ptr[3]<b6?b5+1:b5;
740 pBits[3] = bLookupTable1[ bLookupTable4[((ptr[3]>b4)?b3+1:b3)&0xFF]+bLookupTable5[((ptr[3]>b2)?b1+1:b1)&0xFF]+b7];
741 pBits[7] = pBits[3];
742 pBits[35] = pBits[3];
743 pBits[39] = pBits[3];
744
745 pBits+=8;
746
747 ptr+=4;
748 }
749}
750
751DWORD InitWing32()
752{
753 HDC hdc;
754
755 hdc = GetDC(NULL);
756
757 if(NULL==hdc)
758 return 0;
759
760 dwTotalPixels = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
761 dwCapsRaster = GetDeviceCaps(hdc, RASTERCAPS);
762 hbmpPattern = CreateCompatibleBitmap(hdc,8,8);
763
764 ReleaseDC(0, hdc);
765
766 return 1;
767}
768
769
770HBRUSH CreatePatternHTBrush(HDC hdc, BYTE *pBits)
771{
772 if( 0==bmiPattern.bmiHeader.biSize)
773 {
774 bmiPattern.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
775 bmiPattern.bmiHeader.biWidth = 8;
776 bmiPattern.bmiHeader.biHeight = 8;
777 bmiPattern.bmiHeader.biPlanes = 1;
778 bmiPattern.bmiHeader.biBitCount = 8;
779
780 for(int i=0;i <256;i++)
781 {
782 bmiPattern.bmiColors[i].rgbRed = RGBTable[i].rgbtRed;
783 bmiPattern.bmiColors[i].rgbGreen = RGBTable[i].rgbtGreen;
784 bmiPattern.bmiColors[i].rgbBlue = RGBTable[i].rgbtBlue;
785 bmiPattern.bmiColors[i].rgbReserved = 0;
786 }
787 }
788 if( (8==dwTotalPixels) &&
789 (RC_PALETTE & dwCapsRaster))
790 {
791 SetBitmapBits( hbmpPattern, 64, &DitherBmp8x8);
792 }
793 else
794 {
795 SetDIBits( hdc,
796 hbmpPattern,
797 0,
798 8,
799 pBits,
800 (LPBITMAPINFO)&bmiPattern,
801 0);
802 }
803 return CreatePatternBrush(hbmpPattern);
804}
805
806
807HPALETTE WINAPI WinGCreateHalftonePalette()
808{
809 if(HalfTonePal.palVersion!=0)
810 {
811 return CreatePalette((PLOGPALETTE)&HalfTonePal);
812 }
813 else
814 {
815 HDC hdc;
816 HPALETTE hPal;
817 int iRasterCaps,
818 iSizePal,
819 iNumResCol,
820 iPalEntry,
821 iRGBIndex;
822
823 hdc = GetDC(0);
824
825 if(NULL==hdc)
826 return NULL;
827
828 HalfTonePal.palVersion = 0x0300;
829 HalfTonePal.palNumEntries = 0x0100;
830
831 iRasterCaps = GetDeviceCaps(hdc, RASTERCAPS);
832 if((RC_PALETTE & iRasterCaps))
833 {
834 // Mode has a paette
835 iSizePal = GetDeviceCaps(hdc, SIZEPALETTE);
836 iNumResCol = GetDeviceCaps(hdc, NUMRESERVED);
837 if(iNumResCol<iSizePal)
838 {
839 GetSystemPaletteEntries( hdc,
840 0,
841 iNumResCol/2,
842 (LPPALETTEENTRY)&HalfTonePal.palPalEntry);
843 GetSystemPaletteEntries( hdc,
844 iSizePal-(iNumResCol/2),
845 (iNumResCol/2),
846 (LPPALETTEENTRY)&HalfTonePal.palPalEntry[256-iNumResCol/2]);
847 iRGBIndex = 10;
848 iPalEntry = iNumResCol/2;
849 while(&HalfTonePal.palPalEntry[iPalEntry] != &HalfTonePal.palPalEntry[256-iNumResCol/2])
850 {
851 HalfTonePal.palPalEntry[iPalEntry].peBlue = RGBTable[iRGBIndex].rgbtBlue;
852 HalfTonePal.palPalEntry[iPalEntry].peGreen = RGBTable[iRGBIndex].rgbtGreen;
853 HalfTonePal.palPalEntry[iPalEntry].peRed = RGBTable[iRGBIndex].rgbtRed;
854 }
855 }
856 }
857 else
858 {
859 // Hi/TrueColor Mode
860 for(iPalEntry=0;iPalEntry<256;iPalEntry++)
861 {
862 HalfTonePal.palPalEntry[iPalEntry].peBlue = RGBTable[iPalEntry].rgbtBlue;
863 HalfTonePal.palPalEntry[iPalEntry].peGreen = RGBTable[iPalEntry].rgbtGreen;
864 HalfTonePal.palPalEntry[iPalEntry].peRed = RGBTable[iPalEntry].rgbtRed;
865 }
866 }
867
868 hPal = CreatePalette((PLOGPALETTE)&HalfTonePal);
869 ReleaseDC(0,hdc);
870 return hPal;
871 }
872}
Note: See TracBrowser for help on using the repository browser.