xref: /reactos/win32ss/gdi/diblib/DibLib.c (revision 1734f297)
1 
2 #include "DibLib.h"
3 
4 /*
5  *  M D S P    Generic function
6  * -----------------------
7  *  0 0 0 0    -> BLACKNESS, WHITENESS
8  *  0 0 0 1    -> PATCOPY, NOTPATCOPY
9  *  0 0 1 0    -> SRCCOPY, NOTSRCCOPY
10  *  0 0 1 1    SrcPatBlt
11  *  0 1 0 0    -> NOOP, DESTINVERT
12  *  0 1 0 1    PatPaint
13  *  0 1 1 0    SrcPaint
14  *  0 1 1 1    BitBlt
15  *  1 0 0 0    MaskCopy, -> SRCCOPY / SRCINVERT using Mask als source
16  *  1 0 0 1    MaskPatBlt
17  *  1 0 1 0    MaskSrcBlt
18  *  1 0 1 1    MaskSrcPatBlt
19  *  1 1 0 0    MaskPaint
20  *  1 1 0 1    MaskPatPaint
21  *  1 1 1 0    MaskSrcPaint
22  *  1 1 1 1    MaskBlt
23  */
24 
25 
26 const BYTE ajShift4[2] = {4, 0};
27 
28 enum
29 {
30     INDEX_BitBlt_NOOP,
31     INDEX_BitBlt_DSTINVERT,
32     INDEX_BitBlt_BLACKNESS,
33     INDEX_BitBlt_WHITENESS,
34     INDEX_BitBlt_PATCOPY,
35     INDEX_BitBlt_NOTPATCOPY,
36     INDEX_BitBlt_SRCCOPY,
37     INDEX_BitBlt_NOTSRCCOPY,
38     INDEX_BitBlt_SRCERASE,
39     INDEX_BitBlt_NOTSRCERASE,
40     INDEX_BitBlt_PATINVERT,
41     INDEX_BitBlt_SRCINVERT,
42     INDEX_BitBlt_SRCAND,
43     INDEX_BitBlt_MERGEPAINT,
44     INDEX_BitBlt_MERGECOPY,
45     INDEX_BitBlt_SRCPAINT,
46     INDEX_BitBlt_PATPAINT,
47     INDEX_SrcPatBlt,
48     INDEX_PatPaint,
49     INDEX_SrcPaint,
50     INDEX_BitBlt,
51 };
52 
53 const PFN_DIBFUNCTION
54 gapfnDibFunction[] =
55 {
56     Dib_BitBlt_NOOP,
57     Dib_BitBlt_DSTINVERT,
58     Dib_BitBlt_BLACKNESS,
59     Dib_BitBlt_WHITENESS,
60     Dib_BitBlt_PATCOPY,
61     Dib_BitBlt_NOTPATCOPY,
62     Dib_BitBlt_SRCCOPY,
63     Dib_BitBlt_NOTSRCCOPY,
64     Dib_BitBlt_SRCERASE,
65     Dib_BitBlt_NOTSRCERASE,
66     Dib_BitBlt_PATINVERT,
67     Dib_BitBlt_SRCINVERT,
68     Dib_BitBlt_SRCAND,
69     Dib_BitBlt_MERGEPAINT,
70     Dib_BitBlt_MERGECOPY,
71     Dib_BitBlt_SRCPAINT,
72     Dib_BitBlt_PATPAINT,
73     Dib_SrcPatBlt,
74     Dib_PatPaint,
75     Dib_SrcPaint,
76     Dib_BitBlt,
77 };
78 
79 const UCHAR
80 gajIndexPerRop[256] =
81 {
82     INDEX_BitBlt_BLACKNESS, // BLACKNESS
83     INDEX_BitBlt, // DPSoon,
84     INDEX_BitBlt, // DPSona,
85     INDEX_SrcPatBlt, // PSon,
86     INDEX_BitBlt, // SDPona,
87     INDEX_PatPaint, // DPon,
88     INDEX_BitBlt, // PDSxnon,
89     INDEX_BitBlt, // PDSaon,
90     INDEX_BitBlt, // SDPnaa,
91     INDEX_BitBlt, // PDSxon,
92     INDEX_PatPaint, // DPna,
93     INDEX_BitBlt, // PSDnaon,
94     INDEX_SrcPatBlt, // SPna,
95     INDEX_BitBlt, // PDSnaon,
96     INDEX_BitBlt, // PDSonon,
97     INDEX_BitBlt_NOTPATCOPY, // Pn,
98     INDEX_BitBlt, // PDSona,
99     INDEX_BitBlt_NOTSRCERASE, // DSon / NOTSRCERASE
100     INDEX_BitBlt, // SDPxnon,
101     INDEX_BitBlt, // SDPaon,
102     INDEX_BitBlt, // DPSxnon,
103     INDEX_BitBlt, // DPSaon,
104     INDEX_BitBlt, // PSDPSanaxx,
105     INDEX_BitBlt, // SSPxDSxaxn,
106     INDEX_BitBlt, // SPxPDxa,
107     INDEX_BitBlt, // SDPSanaxn,
108     INDEX_BitBlt, // PDSPaox,
109     INDEX_BitBlt, // SDPSxaxn,
110     INDEX_BitBlt, // PSDPaox,
111     INDEX_BitBlt, // DSPDxaxn,
112     INDEX_BitBlt, // PDSox,
113     INDEX_BitBlt, // PDSoan,
114     INDEX_BitBlt, // DPSnaa,
115     INDEX_BitBlt, // SDPxon,
116     INDEX_SrcPaint, // DSna,
117     INDEX_BitBlt, // SPDnaon,
118     INDEX_BitBlt, // SPxDSxa,
119     INDEX_BitBlt, // PDSPanaxn,
120     INDEX_BitBlt, // SDPSaox,
121     INDEX_BitBlt, // SDPSxnox,
122     INDEX_BitBlt, // DPSxa,
123     INDEX_BitBlt, // PSDPSaoxxn,
124     INDEX_BitBlt, // DPSana,
125     INDEX_BitBlt, // SSPxPDxaxn,
126     INDEX_BitBlt, // SPDSoax,
127     INDEX_BitBlt, // PSDnox,
128     INDEX_BitBlt, // PSDPxox,
129     INDEX_BitBlt, // PSDnoan,
130     INDEX_SrcPatBlt, // PSna,
131     INDEX_BitBlt, // SDPnaon,
132     INDEX_BitBlt, // SDPSoox,
133     INDEX_BitBlt_NOTSRCCOPY, // Sn / NOTSRCCOPY
134     INDEX_BitBlt, // SPDSaox,
135     INDEX_BitBlt, // SPDSxnox,
136     INDEX_BitBlt, // SDPox,
137     INDEX_BitBlt, // SDPoan,
138     INDEX_BitBlt, // PSDPoax,
139     INDEX_BitBlt, // SPDnox,
140     INDEX_BitBlt, // SPDSxox,
141     INDEX_BitBlt, // SPDnoan,
142     INDEX_SrcPatBlt, // PSx,
143     INDEX_BitBlt, // SPDSonox,
144     INDEX_BitBlt, // SPDSnaox,
145     INDEX_SrcPatBlt, // PSan,
146     INDEX_BitBlt, // PSDnaa,
147     INDEX_BitBlt, // DPSxon,
148     INDEX_BitBlt, // SDxPDxa,
149     INDEX_BitBlt, // SPDSanaxn,
150     INDEX_BitBlt_SRCERASE, // SDna / SRCERASE
151     INDEX_BitBlt, // DPSnaon,
152     INDEX_BitBlt, // DSPDaox,
153     INDEX_BitBlt, // PSDPxaxn,
154     INDEX_BitBlt, // SDPxa,
155     INDEX_BitBlt, // PDSPDaoxxn,
156     INDEX_BitBlt, // DPSDoax,
157     INDEX_BitBlt, // PDSnox,
158     INDEX_BitBlt, // SDPana,
159     INDEX_BitBlt, // SSPxDSxoxn,
160     INDEX_BitBlt, // PDSPxox,
161     INDEX_BitBlt, // PDSnoan,
162     INDEX_PatPaint, // PDna,
163     INDEX_BitBlt, // DSPnaon,
164     INDEX_BitBlt, // DPSDaox,
165     INDEX_BitBlt, // SPDSxaxn,
166     INDEX_BitBlt, // DPSonon,
167     INDEX_BitBlt_DSTINVERT, // Dn / DSTINVERT
168     INDEX_BitBlt, // DPSox,
169     INDEX_BitBlt, // DPSoan,
170     INDEX_BitBlt, // PDSPoax,
171     INDEX_BitBlt, // DPSnox,
172     INDEX_BitBlt_PATINVERT, // DPx / PATINVERT
173     INDEX_BitBlt, // DPSDonox,
174     INDEX_BitBlt, // DPSDxox,
175     INDEX_BitBlt, // DPSnoan,
176     INDEX_BitBlt, // DPSDnaox,
177     INDEX_PatPaint, // DPan,
178     INDEX_BitBlt, // PDSxa,
179     INDEX_BitBlt, // DSPDSaoxxn,
180     INDEX_BitBlt, // DSPDoax,
181     INDEX_BitBlt, // SDPnox,
182     INDEX_BitBlt, // SDPSoax,
183     INDEX_BitBlt, // DSPnox,
184     INDEX_BitBlt_SRCINVERT, // DSx / SRCINVERT
185     INDEX_BitBlt, // SDPSonox,
186     INDEX_BitBlt, // DSPDSonoxxn,
187     INDEX_BitBlt, // PDSxxn,
188     INDEX_BitBlt, // DPSax,
189     INDEX_BitBlt, // PSDPSoaxxn,
190     INDEX_BitBlt, // SDPax,
191     INDEX_BitBlt, // PDSPDoaxxn,
192     INDEX_BitBlt, // SDPSnoax,
193     INDEX_BitBlt, // PDSxnan,
194     INDEX_BitBlt, // PDSana,
195     INDEX_BitBlt, // SSDxPDxaxn,
196     INDEX_BitBlt, // SDPSxox,
197     INDEX_BitBlt, // SDPnoan,
198     INDEX_BitBlt, // DSPDxox,
199     INDEX_BitBlt, // DSPnoan,
200     INDEX_BitBlt, // SDPSnaox,
201     INDEX_SrcPaint, // DSan,
202     INDEX_BitBlt, // PDSax,
203     INDEX_BitBlt, // DSPDSoaxxn,
204     INDEX_BitBlt, // DPSDnoax,
205     INDEX_BitBlt, // SDPxnan,
206     INDEX_BitBlt, // SPDSnoax,
207     INDEX_BitBlt, // DPSxnan,
208     INDEX_BitBlt, // SPxDSxo,
209     INDEX_BitBlt, // DPSaan,
210     INDEX_BitBlt, // DPSaa,
211     INDEX_BitBlt, // SPxDSxon,
212     INDEX_BitBlt, // DPSxna,
213     INDEX_BitBlt, // SPDSnoaxn,
214     INDEX_BitBlt, // SDPxna,
215     INDEX_BitBlt, // PDSPnoaxn,
216     INDEX_BitBlt, // DSPDSoaxx,
217     INDEX_BitBlt, // PDSaxn,
218     INDEX_BitBlt_SRCAND, // DSa / SRCAND
219     INDEX_BitBlt, // SDPSnaoxn,
220     INDEX_BitBlt, // DSPnoa,
221     INDEX_BitBlt, // DSPDxoxn,
222     INDEX_BitBlt, // SDPnoa,
223     INDEX_BitBlt, // SDPSxoxn,
224     INDEX_BitBlt, // SSDxPDxax,
225     INDEX_BitBlt, // PDSanan,
226     INDEX_BitBlt, // PDSxna,
227     INDEX_BitBlt, // SDPSnoaxn,
228     INDEX_BitBlt, // DPSDPoaxx,
229     INDEX_BitBlt, // SPDaxn,
230     INDEX_BitBlt, // PSDPSoaxx,
231     INDEX_BitBlt, // DPSaxn,
232     INDEX_BitBlt, // DPSxx,
233     INDEX_BitBlt, // PSDPSonoxx,
234     INDEX_BitBlt, // SDPSonoxn,
235     INDEX_SrcPaint, // DSxn,
236     INDEX_BitBlt, // DPSnax,
237     INDEX_BitBlt, // SDPSoaxn,
238     INDEX_BitBlt, // SPDnax,
239     INDEX_BitBlt, // DSPDoaxn,
240     INDEX_BitBlt, // DSPDSaoxx,
241     INDEX_BitBlt, // PDSxan,
242     INDEX_PatPaint, // DPa,
243     INDEX_BitBlt, // PDSPnaoxn,
244     INDEX_BitBlt, // DPSnoa,
245     INDEX_BitBlt, // DPSDxoxn,
246     INDEX_BitBlt, // PDSPonoxn,
247     INDEX_PatPaint, // PDxn,
248     INDEX_BitBlt, // DSPnax,
249     INDEX_BitBlt, // PDSPoaxn,
250     INDEX_BitBlt, // DPSoa,
251     INDEX_BitBlt, // DPSoxn,
252     INDEX_BitBlt_NOOP, // D,
253     INDEX_BitBlt, // DPSono,
254     INDEX_BitBlt, // SPDSxax,
255     INDEX_BitBlt, // DPSDaoxn,
256     INDEX_BitBlt, // DSPnao,
257     INDEX_PatPaint, // DPno,
258     INDEX_BitBlt, // PDSnoa,
259     INDEX_BitBlt, // PDSPxoxn,
260     INDEX_BitBlt, // SSPxDSxox,
261     INDEX_BitBlt, // SDPanan,
262     INDEX_BitBlt, // PSDnax,
263     INDEX_BitBlt, // DPSDoaxn,
264     INDEX_BitBlt, // DPSDPaoxx,
265     INDEX_BitBlt, // SDPxan,
266     INDEX_BitBlt, // PSDPxax,
267     INDEX_BitBlt, // DSPDaoxn,
268     INDEX_BitBlt, // DPSnao,
269     INDEX_BitBlt_MERGEPAINT, // DSno / MERGEPAINT
270     INDEX_BitBlt, // SPDSanax,
271     INDEX_BitBlt, // SDxPDxan,
272     INDEX_BitBlt, // DPSxo,
273     INDEX_BitBlt, // DPSano,
274     INDEX_BitBlt_MERGECOPY, // PSa / MERGECOPY
275     INDEX_BitBlt, // SPDSnaoxn,
276     INDEX_BitBlt, // SPDSonoxn,
277     INDEX_SrcPatBlt, // PSxn,
278     INDEX_BitBlt, // SPDnoa,
279     INDEX_BitBlt, // SPDSxoxn,
280     INDEX_BitBlt, // SDPnax,
281     INDEX_BitBlt, // PSDPoaxn,
282     INDEX_BitBlt, // SDPoa,
283     INDEX_BitBlt, // SPDoxn,
284     INDEX_BitBlt, // DPSDxax,
285     INDEX_BitBlt, // SPDSaoxn,
286     INDEX_BitBlt_SRCCOPY, // S / SRCCOPY
287     INDEX_BitBlt, // SDPono,
288     INDEX_BitBlt, // SDPnao,
289     INDEX_SrcPatBlt, // SPno,
290     INDEX_BitBlt, // PSDnoa,
291     INDEX_BitBlt, // PSDPxoxn,
292     INDEX_BitBlt, // PDSnax,
293     INDEX_BitBlt, // SPDSoaxn,
294     INDEX_BitBlt, // SSPxPDxax,
295     INDEX_BitBlt, // DPSanan,
296     INDEX_BitBlt, // PSDPSaoxx,
297     INDEX_BitBlt, // DPSxan,
298     INDEX_BitBlt, // PDSPxax,
299     INDEX_BitBlt, // SDPSaoxn,
300     INDEX_BitBlt, // DPSDanax,
301     INDEX_BitBlt, // SPxDSxan,
302     INDEX_BitBlt, // SPDnao,
303     INDEX_SrcPaint, // SDno,
304     INDEX_BitBlt, // SDPxo,
305     INDEX_BitBlt, // SDPano,
306     INDEX_BitBlt, // PDSoa,
307     INDEX_BitBlt, // PDSoxn,
308     INDEX_BitBlt, // DSPDxax,
309     INDEX_BitBlt, // PSDPaoxn,
310     INDEX_BitBlt, // SDPSxax,
311     INDEX_BitBlt, // PDSPaoxn,
312     INDEX_BitBlt, // SDPSanax,
313     INDEX_BitBlt, // SPxPDxan,
314     INDEX_BitBlt, // SSPxDSxax,
315     INDEX_BitBlt, // DSPDSanaxxn,
316     INDEX_BitBlt, // DPSao,
317     INDEX_BitBlt, // DPSxno,
318     INDEX_BitBlt, // SDPao,
319     INDEX_BitBlt, // SDPxno,
320     INDEX_BitBlt_SRCPAINT, // DSo / SRCPAINT
321     INDEX_BitBlt, // SDPnoo,
322     INDEX_BitBlt_PATCOPY, // P / PATCOPY
323     INDEX_BitBlt, // PDSono,
324     INDEX_BitBlt, // PDSnao,
325     INDEX_SrcPatBlt, // PSno,
326     INDEX_BitBlt, // PSDnao,
327     INDEX_PatPaint, // PDno,
328     INDEX_BitBlt, // PDSxo,
329     INDEX_BitBlt, // PDSano,
330     INDEX_BitBlt, // PDSao,
331     INDEX_BitBlt, // PDSxno,
332     INDEX_PatPaint, // DPo,
333     INDEX_BitBlt_PATPAINT, // DPSnoo, // PATPAINT
334     INDEX_SrcPatBlt, // PSo,
335     INDEX_BitBlt, // PSDnoo,
336     INDEX_BitBlt, // DPSoo,
337     INDEX_BitBlt_WHITENESS //WHITENESS
338 };
339 
340 const PFN_DIBFUNCTION
341 gapfnMaskFunction[8] =
342 {
343     Dib_MaskCopy,
344     Dib_MaskPatBlt,
345     Dib_MaskSrcBlt,
346     Dib_MaskSrcPatBlt,
347     Dib_MaskPaint,
348     Dib_MaskPatPaint,
349     Dib_MaskSrcPaint,
350     Dib_MaskBlt
351 };
352