@@ -99,6 +99,68 @@ FtfdCopyBits_S1D4(
99
99
}
100
100
}
101
101
102
+ #define CT_OPAQUE 0x2a
103
+
104
+ static
105
+ VOID
106
+ FtfdCopyBits_S1D8 (
107
+ GLYPHBITS * pgb ,
108
+ FT_Bitmap * ftbitmap )
109
+ {
110
+ ULONG ulRows , ulSrcDelta ;
111
+ PBYTE pjDstLine , pjSrcLine ;
112
+
113
+ pjDstLine = pgb -> aj ;
114
+
115
+ pjSrcLine = ftbitmap -> buffer ;
116
+ ulSrcDelta = abs (ftbitmap -> pitch );
117
+
118
+ ulRows = pgb -> sizlBitmap .cy ;
119
+ while (ulRows -- )
120
+ {
121
+ ULONG ulWidth = pgb -> sizlBitmap .cx ;
122
+ BYTE j , * pjSrc ;
123
+ pjSrc = pjSrcLine ;
124
+
125
+ /* Get 8 pixels */
126
+ j = (* pjSrc ++ );
127
+
128
+ while (ulWidth >= 8 )
129
+ {
130
+ /* Set 8 pixels */
131
+ * pjDstLine ++ = (j & 128 ) ? CT_OPAQUE : 0 ;
132
+ * pjDstLine ++ = (j & 64 ) ? CT_OPAQUE : 0 ;
133
+ * pjDstLine ++ = (j & 32 ) ? CT_OPAQUE : 0 ;
134
+ * pjDstLine ++ = (j & 16 ) ? CT_OPAQUE : 0 ;
135
+ * pjDstLine ++ = (j & 8 ) ? CT_OPAQUE : 0 ;
136
+ * pjDstLine ++ = (j & 4 ) ? CT_OPAQUE : 0 ;
137
+ * pjDstLine ++ = (j & 2 ) ? CT_OPAQUE : 0 ;
138
+ * pjDstLine ++ = (j & 1 ) ? CT_OPAQUE : 0 ;
139
+
140
+ /* Next 8 pixels */
141
+ j = (* pjSrc ++ );
142
+ ulWidth -= 8 ;
143
+ }
144
+
145
+ /* Set remaining pixels (max 7) */
146
+ switch (ulWidth )
147
+ {
148
+ case 7 : pjDstLine [6 ] = (j & 2 ) ? CT_OPAQUE : 0 ;
149
+ case 6 : pjDstLine [5 ] = (j & 4 ) ? CT_OPAQUE : 0 ;
150
+ case 5 : pjDstLine [4 ] = (j & 8 ) ? CT_OPAQUE : 0 ;
151
+ case 4 : pjDstLine [3 ] = (j & 16 ) ? CT_OPAQUE : 0 ;
152
+ case 3 : pjDstLine [2 ] = (j & 32 ) ? CT_OPAQUE : 0 ;
153
+ case 2 : pjDstLine [1 ] = (j & 64 ) ? CT_OPAQUE : 0 ;
154
+ case 1 : pjDstLine [0 ] = (j & 128 ) ? CT_OPAQUE : 0 ;
155
+ }
156
+
157
+ pjDstLine += ulWidth ;
158
+
159
+ /* Go to the next source line */
160
+ pjSrcLine += ulSrcDelta ;
161
+ }
162
+ }
163
+
102
164
static
103
165
VOID
104
166
FtfdCopyBits_S8D4 (
@@ -137,6 +199,47 @@ FtfdCopyBits_S8D4(
137
199
}
138
200
}
139
201
202
+ static
203
+ VOID
204
+ FtfdCopyBits_LCD_X (
205
+ GLYPHBITS * pgb ,
206
+ FT_Bitmap * ftbitmap )
207
+ {
208
+ ULONG ulRows , ulDstDelta , ulSrcDelta ;
209
+ PBYTE pjDstLine , pjSrcLine ;
210
+
211
+ pjDstLine = pgb -> aj ;
212
+ ulDstDelta = pgb -> sizlBitmap .cx ;
213
+
214
+ pjSrcLine = ftbitmap -> buffer ;
215
+ ulSrcDelta = abs (ftbitmap -> pitch );
216
+
217
+ ulRows = pgb -> sizlBitmap .cy ;
218
+ while (ulRows -- )
219
+ {
220
+ ULONG ulWidth = ulDstDelta ;
221
+ BYTE * pjSrc ;
222
+
223
+ pjSrc = pjSrcLine ;
224
+ while (ulWidth -- )
225
+ {
226
+ /* Get the pixel */
227
+ * pjDstLine ++ = (* pjSrc ++ );
228
+ }
229
+
230
+ /* Go to the next source line */
231
+ pjSrcLine += ulSrcDelta ;
232
+ }
233
+ }
234
+
235
+ static
236
+ VOID
237
+ FtfdCopyBits_LCD_Y (
238
+ GLYPHBITS * pgb ,
239
+ FT_Bitmap * ftbitmap )
240
+ {
241
+ }
242
+
140
243
VOID
141
244
NTAPI
142
245
FtfdCopyBits (
@@ -157,8 +260,8 @@ FtfdCopyBits(
157
260
{
158
261
FtfdCopyBits_S1D1 (pgb , ftbitmap );
159
262
}
160
- else if (ftbitmap -> pixel_mode == FT_PIXEL_MODE_GRAY &&
161
- ftbitmap -> num_grays == 256 )
263
+ else if (( ftbitmap -> pixel_mode == FT_PIXEL_MODE_GRAY ) &&
264
+ ( ftbitmap -> num_grays == 256 ) )
162
265
{
163
266
FtfdCopyBits_S8D1 (pgb , ftbitmap );
164
267
}
@@ -167,7 +270,6 @@ FtfdCopyBits(
167
270
WARN ("Unsupported pixel format\n" );
168
271
__debugbreak ();
169
272
}
170
-
171
273
}
172
274
else if (jBppDst == 4 )
173
275
{
@@ -186,6 +288,26 @@ FtfdCopyBits(
186
288
__debugbreak ();
187
289
}
188
290
}
291
+ else if (jBppDst == 8 )
292
+ {
293
+ if (ftbitmap -> pixel_mode == FT_PIXEL_MODE_LCD )
294
+ {
295
+ FtfdCopyBits_LCD_X (pgb , ftbitmap );
296
+ }
297
+ else if (ftbitmap -> pixel_mode == FT_PIXEL_MODE_LCD_V )
298
+ {
299
+ FtfdCopyBits_LCD_Y (pgb , ftbitmap );
300
+ }
301
+ else if (ftbitmap -> pixel_mode == FT_PIXEL_MODE_MONO )
302
+ {
303
+ FtfdCopyBits_S1D8 (pgb , ftbitmap );
304
+ }
305
+ else
306
+ {
307
+ WARN ("Unsupported pixel format\n" );
308
+ __debugbreak ();
309
+ }
310
+ }
189
311
else
190
312
{
191
313
WARN ("Bit depth %ld not implemented\n" , jBppDst );
0 commit comments