2 * DIB Engine Font Primitives
4 * Copyright 2009 Massimo Del Fedele
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
22 #include "wine/port.h"
26 WINE_DEFAULT_DEBUG_CHANNEL(dibdrv
);
28 /* ------------------------------------------------------------*/
29 /* FREETYPE FONT BITMAP BLITTING */
30 void _DIBDRV_freetype_blit_8888(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
32 /* FIXME : MUST BE OPTIMIZED !!! */
34 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
46 /* loop for every pixel in bitmap */
48 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
50 ptr
= (DWORD
*)((BYTE
*)dib
->bits
+ (dibY
* dib
->stride
) + x
* 4);
51 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
53 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
55 c
= physDev
->textColorTable
[*buf
];
64 void _DIBDRV_freetype_blit_32_RGB(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
66 /* FIXME : MUST BE OPTIMIZED !!! */
68 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
79 /* loop for every pixel in bitmap */
81 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
83 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
85 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
87 c
= physDev
->textColorTable
[*buf
];
88 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
95 void _DIBDRV_freetype_blit_32_BITFIELDS(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
97 /* FIXME : MUST BE OPTIMIZED !!! */
99 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
106 /* gets DIB limits */
110 /* loop for every pixel in bitmap */
112 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
114 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
116 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
118 c
= physDev
->textColorTable
[*buf
];
119 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
126 void _DIBDRV_freetype_blit_24(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
128 /* FIXME : MUST BE OPTIMIZED !!! */
130 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
137 /* gets DIB limits */
141 /* loop for every pixel in bitmap */
143 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
145 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
147 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
149 c
= physDev
->textColorTable
[*buf
];
150 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
157 void _DIBDRV_freetype_blit_16_RGB(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
159 /* FIXME : MUST BE OPTIMIZED !!! */
161 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
168 /* gets DIB limits */
172 /* loop for every pixel in bitmap */
174 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
176 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
178 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
180 c
= physDev
->textColorTable
[*buf
];
181 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
188 void _DIBDRV_freetype_blit_16_BITFIELDS(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
190 /* FIXME : MUST BE OPTIMIZED !!! */
192 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
199 /* gets DIB limits */
203 /* loop for every pixel in bitmap */
205 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
207 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
209 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
211 c
= physDev
->textColorTable
[*buf
];
212 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
219 void _DIBDRV_freetype_blit_8(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
221 /* FIXME : MUST BE OPTIMIZED !!! */
223 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
230 /* gets DIB limits */
234 /* loop for every pixel in bitmap */
236 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
238 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
240 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
242 c
= physDev
->textColorTable
[*buf
];
243 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
250 void _DIBDRV_freetype_blit_4(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
252 /* FIXME : MUST BE OPTIMIZED !!! */
254 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
261 /* gets DIB limits */
265 /* loop for every pixel in bitmap */
267 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
269 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
271 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
273 c
= physDev
->textColorTable
[*buf
];
274 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);
281 void _DIBDRV_freetype_blit_1(DIBDRVPHYSDEV
*physDev
, int x
, int y
, FT_Bitmap
*bmp
)
283 /* FIXME : MUST BE OPTIMIZED !!! */
285 DIBDRVBITMAP
*dib
= &physDev
->physBitmap
;
292 /* gets DIB limits */
296 /* loop for every pixel in bitmap */
298 for(bmpY
= 0, dibY
= y
; bmpY
< bmp
->rows
; bmpY
++, dibY
++)
300 for(bmpX
= 0, dibX
= x
; bmpX
< bmp
->width
; bmpX
++, dibX
++)
302 if(dibX
< DIBX
&& dibY
< DIBY
&& dibX
> 0 && dibY
> 0 && *buf
)
304 c
= physDev
->textColorTable
[*buf
];
305 dib
->funcs
->SetPixel(dib
, dibX
, dibY
, 0, c
);