Rev 5025 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5024 | Serge | 1 | |
2 | #include |
||
3 | #include |
||
4 | #include |
||
5 | #include |
||
6 | #include FT_FREETYPE_H |
||
7 | #include FT_GLYPH_H |
||
8 | #include |
||
6865 | serge | 9 | |
5024 | Serge | 10 | |
11 | { |
||
12 | FT_Face face; |
||
13 | int fontsize; |
||
6865 | serge | 14 | int height; |
5024 | Serge | 15 | int base; |
16 | |||
17 | |||
18 | |||
19 | |||
20 | |||
21 | |||
22 | static FT_Face sym_face; |
||
6865 | serge | 23 | |
5024 | Serge | 24 | |
6865 | serge | 25 | |
26 | |||
5024 | Serge | 27 | |
28 | |||
29 | |||
30 | |||
31 | |||
32 | |||
6865 | serge | 33 | |
34 | |||
35 | { |
||
5024 | Serge | 36 | if(ch < 0x80) |
6865 | serge | 37 | return ch; |
38 | |||
5024 | Serge | 39 | |
6865 | serge | 40 | return 0x410-0x80 + ch; |
41 | |||
5024 | Serge | 42 | |
6865 | serge | 43 | return 0; |
44 | |||
5024 | Serge | 45 | |
6865 | serge | 46 | return 0x440-0xE0 + ch; |
47 | |||
5024 | Serge | 48 | |
6865 | serge | 49 | return 0x401; |
50 | else if(ch==0xF1) |
||
51 | return 0x451; |
||
52 | else return 0; |
||
53 | } |
||
54 | |||
5024 | Serge | 55 | |
6865 | serge | 56 | { |
5024 | Serge | 57 | FT_UInt glyph_index; |
58 | FT_Bool use_kerning = 0; |
||
59 | FT_BitmapGlyph glyph; |
||
60 | FT_UInt previous; |
||
61 | |||
62 | |||
6865 | serge | 63 | int col, ncol; |
5024 | Serge | 64 | unsigned char ch; |
65 | int err = 0; |
||
66 | |||
67 | |||
68 | previous = 0; |
||
69 | col = 0; |
||
70 | |||
71 | |||
72 | xend = rc->r << 6; |
||
6865 | serge | 73 | y = rc->t + font->base; |
74 | |||
5024 | Serge | 75 | |
76 | { |
||
77 | ch = *text++; |
||
78 | |||
79 | |||
80 | continue; |
||
81 | |||
82 | |||
83 | { |
||
84 | ncol = (col+3) & ~4; |
||
6865 | serge | 85 | if( col < ncol) |
5024 | Serge | 86 | { |
87 | glyph_index = FT_Get_Char_Index( font->face, ansi2utf32(' ') ); |
||
88 | |||
89 | |||
90 | { |
||
91 | if ( use_kerning && previous && glyph_index ) |
||
92 | { |
||
93 | FT_Vector delta; |
||
94 | FT_Get_Kerning( font->face, previous, glyph_index, FT_KERNING_DEFAULT, &delta ); |
||
95 | x += delta.x ; |
||
96 | } |
||
97 | |||
98 | |||
6865 | serge | 99 | break; |
5024 | Serge | 100 | |
101 | |||
102 | previous = glyph_index; |
||
103 | col ++; |
||
104 | }; |
||
105 | }; |
||
106 | continue; |
||
107 | }; |
||
108 | |||
109 | |||
110 | |||
111 | |||
112 | { |
||
113 | FT_Vector delta; |
||
114 | FT_Get_Kerning( font->face, previous, glyph_index, FT_KERNING_DEFAULT, &delta ); |
||
115 | x += delta.x ; |
||
116 | } |
||
117 | |||
118 | |||
6865 | serge | 119 | // break; |
120 | |||
121 | |||
122 | break; |
||
5024 | Serge | 123 | |
124 | |||
125 | |||
126 | |||
6865 | serge | 127 | { |
128 | rect_t rc_dst; |
||
129 | |||
5024 | Serge | 130 | |
6865 | serge | 131 | rc_dst.t = y - glyph->top; |
132 | rc_dst.r = rc_dst.l + glyph->bitmap.width; |
||
133 | if(rc_dst.r > (xend >> 6)) |
||
134 | rc_dst.r = xend >> 6; |
||
135 | rc_dst.b = rc_dst.t + glyph->bitmap.rows; |
||
136 | |||
137 | |||
138 | px_draw_glyph(ctx, glyph->bitmap.buffer, glyph->bitmap.pitch, &rc_dst, color); |
||
139 | |||
140 | |||
141 | }; |
||
142 | previous = glyph_index; |
||
5024 | Serge | 143 | }; |
144 | |||
145 | |||
146 | }; |
||
147 | |||
148 | |||
149 | |||
150 | { |
||
151 | static FT_Library library; |
||
152 | FT_Face face = NULL; |
||
153 | int err; |
||
154 | |||
155 | |||
156 | if ( err ) |
||
157 | { |
||
158 | printf("an error occurred during FreeType initialization\n"); |
||
159 | goto done; |
||
160 | } |
||
161 | |||
162 | |||
5025 | Serge | 163 | // err = FT_New_Face( library, "/kolibrios/Fonts/lucon.ttf", 0, &face ); |
5024 | Serge | 164 | |
5025 | Serge | 165 | |
166 | if ( err == FT_Err_Unknown_File_Format ) |
||
5024 | Serge | 167 | { |
168 | printf("font format is unsupported\n"); |
||
169 | goto done; |
||
170 | |||
171 | |||
172 | else if ( err ) |
||
173 | { |
||
174 | printf("font file could not be read or broken\n"); |
||
175 | goto done; |
||
176 | } |
||
177 | |||
178 | |||
179 | |||
180 | |||
6865 | serge | 181 | if ( err == FT_Err_Unknown_File_Format ) |
182 | { |
||
183 | printf("font format is unsupported\n"); |
||
184 | goto done; |
||
185 | |||
5024 | Serge | 186 | |
6865 | serge | 187 | else if ( err ) |
188 | { |
||
189 | printf("font file could not be read or broken\n"); |
||
190 | goto done; |
||
191 | } |
||
192 | |||
5024 | Serge | 193 | |
6865 | serge | 194 | |
5024 | Serge | 195 | |
6865 | serge | 196 | |
5024 | Serge | 197 | |
6865 | serge | 198 | |
5024 | Serge | 199 | |
6865 | serge | 200 | }; |
201 | |||
5024 | Serge | 202 | |
203 | |||
204 | |||
205 | |||
206 | { |
||
207 | font_t *font; |
||
208 | int i, err; |
||
209 | |||
210 | |||
211 | if(font == NULL) |
||
212 | return font; |
||
213 | |||
214 | |||
215 | |||
216 | |||
217 | font->height = size; |
||
6865 | serge | 218 | |
5024 | Serge | 219 | |
220 | |||
221 | |||
222 | { |
||
223 | FT_UInt glyph_index; |
||
224 | FT_BitmapGlyph glyph_bitmap; |
||
225 | |||
226 | |||
227 | |||
228 | |||
229 | if ( err ) |
||
230 | { |
||
231 | font->glyph[i] = font->glyph[0] ; |
||
232 | continue; |
||
233 | }; |
||
234 | |||
235 | |||
236 | if (err) |
||
237 | { |
||
238 | font->glyph[i] = font->glyph[0] ; |
||
239 | continue; |
||
240 | }; |
||
241 | |||
242 | |||
243 | { |
||
244 | err = FT_Glyph_To_Bitmap( &font->glyph[i], FT_RENDER_MODE_NORMAL, 0, 1 ); |
||
245 | if ( err ) |
||
246 | continue; |
||
247 | |||
248 | |||
249 | |||
250 | |||
251 | font->base = glyph_bitmap->top; |
||
252 | } |
||
253 | } |
||
254 | |||
255 | |||
256 | } |
||
257 | |||
6865 | serge | 258 | |
259 | { |
||
260 | return font->height; |
||
261 | }>>>><>><>>>>> |
||
262 |