Fixed some compiler warnings
[reactos.git] / reactos / subsys / win32k / dib / dib1bpp.c
1 #undef WIN32_LEAN_AND_MEAN
2 #include <windows.h>
3 #include <stdlib.h>
4 #include <win32k/bitmaps.h>
5 #include <win32k/debug.h>
6 #include <debug.h>
7 #include <ddk/winddi.h>
8 #include "../eng/objects.h"
9 #include "dib.h"
10
11 VOID DIB_1BPP_PutPixel(PSURFOBJ SurfObj, LONG x, LONG y, ULONG c)
12 {
13 PBYTE addr = SurfObj->pvBits;
14
15 addr += y * SurfObj->lDelta + (x >> 3);
16
17 if(c == 0)
18 {
19 *addr = (*addr ^ mask1Bpp[x % 8]);
20 }
21 else
22 {
23 *addr = (*addr | mask1Bpp[x % 8]);
24 }
25 }
26
27 ULONG DIB_1BPP_GetPixel(PSURFOBJ SurfObj, LONG x, LONG y)
28 {
29 PBYTE addr = SurfObj->pvBits + y * SurfObj->lDelta + (x >> 3);
30
31 return (*addr & mask1Bpp[x % 8] ? 1 : 0);
32 }
33
34 VOID DIB_1BPP_HLine(PSURFOBJ SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
35 {
36 while(x1 < x2) {
37 DIB_1BPP_PutPixel(SurfObj, x1, y, c);
38 x1++;
39 }
40 }
41
42 VOID DIB_1BPP_VLine(PSURFOBJ SurfObj, LONG x, LONG y1, LONG y2, ULONG c)
43 {
44 while(y1 < y2) {
45 DIB_1BPP_PutPixel(SurfObj, x, y1, c);
46 y1++;
47 }
48 }
49
50 BOOLEAN DIB_To_1BPP_Bitblt( SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
51 SURFGDI *DestGDI, SURFGDI *SourceGDI,
52 PRECTL DestRect, POINTL *SourcePoint,
53 LONG Delta, XLATEOBJ *ColorTranslation)
54 {
55 LONG i, j, sx, sy = SourcePoint->y;
56
57 switch(SourceGDI->BitsPerPixel)
58 {
59 case 1:
60 for (j=DestRect->top; j<DestRect->bottom; j++)
61 {
62 sx = SourcePoint->x;
63 for (i=DestRect->left; i<DestRect->right; i++)
64 {
65 if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
66 {
67 DIB_1BPP_PutPixel(DestSurf, i, j, 0);
68 } else {
69 DIB_1BPP_PutPixel(DestSurf, i, j, 1);
70 }
71 sx++;
72 }
73 sy++;
74 }
75 break;
76
77 case 4:
78 for (j=DestRect->top; j<DestRect->bottom; j++)
79 {
80 sx = SourcePoint->x;
81 for (i=DestRect->left; i<DestRect->right; i++)
82 {
83 if(XLATEOBJ_iXlate(ColorTranslation, DIB_4BPP_GetPixel(SourceSurf, sx, sy)) == 0)
84 {
85 DIB_1BPP_PutPixel(DestSurf, i, j, 0);
86 } else {
87 DIB_1BPP_PutPixel(DestSurf, i, j, 1);
88 }
89 sx++;
90 }
91 sy++;
92 }
93 break;
94
95 case 24:
96 for (j=DestRect->top; j<DestRect->bottom; j++)
97 {
98 sx = SourcePoint->x;
99 for (i=DestRect->left; i<DestRect->right; i++)
100 {
101 if(XLATEOBJ_iXlate(ColorTranslation, DIB_24BPP_GetPixel(SourceSurf, sx, sy)) == 0)
102 {
103 DIB_1BPP_PutPixel(DestSurf, i, j, 0);
104 } else {
105 DIB_1BPP_PutPixel(DestSurf, i, j, 1);
106 }
107 sx++;
108 }
109 sy++;
110 }
111 break;
112
113 default:
114 DbgPrint("DIB_1BPP_Bitblt: Unhandled Source BPP: %u\n", SourceGDI->BitsPerPixel);
115 return FALSE;
116 }
117
118 return TRUE;
119 }