Mercurial > mplayer.hg
annotate gui/skin/font.c @ 32827:2b0b38bfda8d
Revert r32911.
author | ib |
---|---|
date | Wed, 16 Feb 2011 18:10:04 +0000 |
parents | 9ce10a293f56 |
children | 819c51338f75 |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
19 #include <stdlib.h> | |
20 #include <string.h> | |
21 #include <inttypes.h> | |
22 | |
23 #include "skin.h" | |
24 #include "font.h" | |
25 #include "cut.h" | |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
26 #include "mp_msg.h" |
32827 | 27 #include "../interface.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
28 #include "libavutil/avstring.h" |
23077 | 29 |
32826 | 30 bmpFont * Fonts[MAX_FONTS] = {}; |
23077 | 31 |
32 int fntAddNewFont( char * name ) | |
33 { | |
32817 | 34 int id, i; |
23077 | 35 |
32787 | 36 for( id=0;id<MAX_FONTS;id++ ) |
23077 | 37 if ( !Fonts[id] ) break; |
38 | |
32786 | 39 if ( id == MAX_FONTS ) return -2; |
23077 | 40 |
41 if ( ( Fonts[id]=calloc( 1,sizeof( bmpFont ) ) ) == NULL ) return -1; | |
42 | |
32786 | 43 av_strlcpy( Fonts[id]->name,name,MAX_FONT_NAME ); |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
44 for ( i=0;i<ASCII_CHRS+EXTRA_CHRS;i++ ) |
23077 | 45 Fonts[id]->Fnt[i].x=Fonts[id]->Fnt[i].y=Fonts[id]->Fnt[i].sx=Fonts[id]->Fnt[i].sy=-1; |
46 | |
47 return id; | |
48 } | |
49 | |
50 void fntFreeFont( void ) | |
51 { | |
52 int i; | |
32786 | 53 for( i=0;i < MAX_FONTS;i++ ) |
23077 | 54 { |
55 if ( Fonts[i] ) | |
56 { | |
32819 | 57 gfree( (void **) &Fonts[i]->Bitmap.Image ); |
58 gfree( (void **) &Fonts[i] ); | |
23077 | 59 } |
60 } | |
61 } | |
62 | |
63 int fntRead( char * path,char * fname ) | |
64 { | |
65 FILE * f; | |
66 unsigned char tmp[512]; | |
67 unsigned char * ptmp; | |
68 unsigned char command[32]; | |
69 unsigned char param[256]; | |
32817 | 70 int id, n; |
71 | |
72 id = fntAddNewFont( fname ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
73 |
23077 | 74 if ( id < 0 ) return id; |
75 | |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23077
diff
changeset
|
76 av_strlcpy( tmp,path,sizeof( tmp ) ); |
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23077
diff
changeset
|
77 av_strlcat( tmp,fname,sizeof( tmp ) ); av_strlcat( tmp,".fnt",sizeof( tmp ) ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
78 if ( ( f=fopen( tmp,"rt" ) ) == NULL ) |
32800 | 79 { |
32819 | 80 gfree( (void **) &Fonts[id] ); |
32800 | 81 return -3; |
82 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
83 |
32820 | 84 while ( fgets( tmp,sizeof(tmp),f ) ) |
23077 | 85 { |
30404
5fbb30fa62cc
Fix newline removal code that might read and write out of bounds.
reimar
parents:
29263
diff
changeset
|
86 // remove any kind of newline, if any |
5fbb30fa62cc
Fix newline removal code that might read and write out of bounds.
reimar
parents:
29263
diff
changeset
|
87 tmp[strcspn(tmp, "\n\r")] = 0; |
32803 | 88 strswap( tmp,'\t',' ' ); |
89 trim( tmp ); | |
32821 | 90 if ((ptmp = strchr(tmp, ';')) && !(ptmp == tmp + 1 && tmp[0] == '"' && tmp[2] == '"')) *ptmp = '\0'; |
32803 | 91 if (!*tmp) continue; |
32804
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
92 n = (strncmp(tmp, "\"=", 2) == 0 ? 1 : 0); |
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
93 cutItem( tmp,command,'=',n ); cutItem( tmp,param,'=',n+1 ); |
23077 | 94 if ( command[0] == '"' ) |
95 { | |
96 int i; | |
32804
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
97 if (!command[1]) command[0] = '='; |
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
98 else if (command[1] == '"') command[1] = '\0'; |
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
99 else cutItem(command, command, '"', 1); |
b0df43398401
Allow equals sign to be defined in the font description file.
ib
parents:
32803
diff
changeset
|
100 if ( command[0] & 0x80 ) |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
101 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
102 for ( i = 0; i < EXTRA_CHRS; i++ ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
103 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
104 if ( !Fonts[id]->nonASCIIidx[i][0] ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
105 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
106 strncpy( Fonts[id]->nonASCIIidx[i], command, 4 ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
107 break; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
108 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
109 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
110 if ( i == EXTRA_CHRS ) continue; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
111 i += ASCII_CHRS; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
112 } |
32789 | 113 else i=command[0]; |
23077 | 114 cutItem( param,tmp,',',0 ); Fonts[id]->Fnt[i].x=atoi( tmp ); |
115 cutItem( param,tmp,',',1 ); Fonts[id]->Fnt[i].y=atoi( tmp ); | |
116 cutItem( param,tmp,',',2 ); Fonts[id]->Fnt[i].sx=atoi( tmp ); | |
117 cutItem( param,tmp,',',3 ); Fonts[id]->Fnt[i].sy=atoi( tmp ); | |
32810 | 118 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[font] char: '%s' params: %d,%d %dx%d\n",command,Fonts[id]->Fnt[i].x,Fonts[id]->Fnt[i].y,Fonts[id]->Fnt[i].sx,Fonts[id]->Fnt[i].sy ); |
23077 | 119 } |
120 else | |
121 { | |
122 if ( !strcmp( command,"image" ) ) | |
123 { | |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23077
diff
changeset
|
124 av_strlcpy( tmp,path,sizeof( tmp ) ); av_strlcat( tmp,param,sizeof( tmp ) ); |
32805 | 125 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[font] image file: %s\n",tmp ); |
32712 | 126 if ( skinBPRead( tmp,&Fonts[id]->Bitmap ) ) |
127 { | |
32825 | 128 gfree((void **) &Fonts[id]->Bitmap.Image); |
32819 | 129 gfree((void **) &Fonts[id]); |
32712 | 130 fclose(f); |
131 return -4; | |
132 } | |
23077 | 133 } |
134 } | |
135 } | |
136 | |
32712 | 137 fclose(f); |
23077 | 138 return 0; |
139 } | |
140 | |
141 int fntFindID( char * name ) | |
142 { | |
143 int i; | |
32786 | 144 for ( i=0;i < MAX_FONTS;i++ ) |
23077 | 145 if ( Fonts[i] ) |
146 if ( !strcmp( name,Fonts[i]->name ) ) return i; | |
147 return -1; | |
148 } | |
149 | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
150 // get Fnt index of character (utf8 or normal one) *str points to, |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
151 // then move pointer to next/previous character |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
152 int fntGetCharIndex( int id, unsigned char **str, gboolean utf8, int direction ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
153 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
154 unsigned char *p, uchar[4] = { 0, 0, 0, 0 }; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
155 int i, c = -1; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
156 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
157 if ( **str & 0x80 ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
158 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
159 if ( utf8 ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
160 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
161 p = *str; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
162 *str = g_utf8_next_char( *str ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
163 strncpy( uchar, p, *str - p ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
164 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
165 if ( direction < 0 ) *str = g_utf8_prev_char( p ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
166 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
167 else |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
168 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
169 uchar[0] = **str; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
170 *str += direction; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
171 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
172 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
173 for ( i = 0; ( i < EXTRA_CHRS ) && Fonts[id]->nonASCIIidx[i][0]; i++ ) |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
174 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
175 if ( strncmp( Fonts[id]->nonASCIIidx[i], uchar, 4 ) == 0 ) return i + ASCII_CHRS; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
176 if ( !utf8 && ( Fonts[id]->nonASCIIidx[i][0] == (*uchar >> 6 | 0xc0) && Fonts[id]->nonASCIIidx[i][1] == (*uchar & 0x3f | 0x80) && Fonts[id]->nonASCIIidx[i][2] == 0 ) ) c = i + ASCII_CHRS; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
177 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
178 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
179 else |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
180 { |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
181 c = **str; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
182 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
183 if ( utf8 && ( direction < 0 ) ) *str = g_utf8_prev_char( *str ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
184 else *str += direction; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
185 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
186 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
187 return c; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
188 } |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
189 |
23077 | 190 int fntTextWidth( int id,char * str ) |
191 { | |
192 int size = 0; | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
193 gboolean utf8; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
194 unsigned char *p; |
23077 | 195 |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
196 utf8 = g_utf8_validate( str, -1, NULL); |
32822 | 197 p = str; |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
198 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
199 while ( *p ) |
23077 | 200 { |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
201 int c = fntGetCharIndex( id, &p, utf8, 1 ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
202 if ( c == -1 || Fonts[id]->Fnt[c].sx == -1 ) c = ' '; |
32792
31ce0bd110d5
Only replace non-existing font character by space if space itself exists.
ib
parents:
32791
diff
changeset
|
203 if ( Fonts[id]->Fnt[c].sx != -1 ) size += Fonts[id]->Fnt[c].sx; |
23077 | 204 } |
205 return size; | |
206 } | |
207 | |
208 int fntTextHeight( int id,char * str ) | |
209 { | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
210 int max = 0; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
211 gboolean utf8; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
212 unsigned char *p; |
23077 | 213 |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
214 utf8 = g_utf8_validate( str, -1, NULL); |
32822 | 215 p = str; |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
216 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
217 while ( *p ) |
23077 | 218 { |
219 int h; | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
220 int c = fntGetCharIndex( id, &p, utf8, 1 ); |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
221 if ( c == -1 || Fonts[id]->Fnt[c].sx == -1 ) c = ' '; |
23077 | 222 h = Fonts[id]->Fnt[c].sy; |
223 if ( h > max ) max=h; | |
224 } | |
225 return max; | |
226 } | |
227 | |
32759 | 228 txSample * fntRender( wItem * item,int px,char * txt ) |
23077 | 229 { |
32759 | 230 unsigned char * u; |
32817 | 231 unsigned int i; |
232 int c, dx, tw, th, fbw, iw, id, ofs; | |
23077 | 233 int x,y,fh,fw,fyc,yc; |
234 uint32_t * ibuf; | |
235 uint32_t * obuf; | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
236 gboolean utf8; |
23077 | 237 |
238 id=item->fontid; | |
32790 | 239 tw=fntTextWidth( id,txt ); |
23077 | 240 |
32790 | 241 if ( !tw ) return NULL; |
23077 | 242 |
32790 | 243 iw=item->width; |
23077 | 244 fbw=Fonts[id]->Bitmap.Width; |
32809 | 245 th=fntTextHeight(id, txt); |
246 | |
32825 | 247 if (item->height != th) |
32819 | 248 gfree((void **) &item->Bitmap.Image); |
23077 | 249 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
250 if ( item->Bitmap.Image == NULL ) |
23077 | 251 { |
32809 | 252 item->Bitmap.Height=item->height=th; |
23077 | 253 item->Bitmap.Width=item->width=iw; |
254 item->Bitmap.ImageSize=item->height * iw * 4; | |
255 if ( !item->Bitmap.ImageSize ) return NULL; | |
256 item->Bitmap.BPP=32; | |
257 item->Bitmap.Image=malloc( item->Bitmap.ImageSize ); | |
258 } | |
259 | |
260 obuf=(uint32_t *)item->Bitmap.Image; | |
261 ibuf=(uint32_t *)Fonts[id]->Bitmap.Image; | |
262 | |
263 for ( i=0;i < item->Bitmap.ImageSize / 4;i++ ) obuf[i]=0xff00ff; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
264 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
265 if ( tw <= iw ) |
23077 | 266 { |
267 switch ( item->align ) | |
268 { | |
269 default: | |
270 case fntAlignLeft: dx=0; break; | |
32791 | 271 case fntAlignCenter: dx=( iw - tw ) / 2; break; |
272 case fntAlignRight: dx=iw - tw; break; | |
23077 | 273 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
274 |
32817 | 275 } else dx=px; |
23077 | 276 |
277 ofs=dx; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
278 |
32759 | 279 utf8 = g_utf8_validate( txt, -1, NULL); |
280 u = txt; | |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
281 |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
282 while ( *u ) |
23077 | 283 { |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
284 c = fntGetCharIndex( id, &u, utf8, 1 ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
285 |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
286 if ( c != -1 ) fw=Fonts[id]->Fnt[c].sx; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
287 |
32789 | 288 if ( c == -1 || fw == -1 ) { c=' '; fw=Fonts[id]->Fnt[c].sx; } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
289 |
32792
31ce0bd110d5
Only replace non-existing font character by space if space itself exists.
ib
parents:
32791
diff
changeset
|
290 if ( fw == -1 ) continue; |
31ce0bd110d5
Only replace non-existing font character by space if space itself exists.
ib
parents:
32791
diff
changeset
|
291 |
23077 | 292 fh=Fonts[id]->Fnt[c].sy; |
293 fyc=Fonts[id]->Fnt[c].y * fbw + Fonts[id]->Fnt[c].x; | |
294 yc=dx; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
295 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
296 if ( dx >= 0 ) |
23077 | 297 for ( y=0;y < fh;y++ ) |
298 { | |
299 for ( x=0; x < fw;x++ ) | |
300 if ( dx + x >= 0 && dx + x < iw ) obuf[yc + x]=ibuf[ fyc + x ]; | |
301 fyc+=fbw; | |
302 yc+=iw; | |
303 } | |
304 dx+=fw; | |
305 } | |
306 | |
307 if ( ofs > 0 && tw > item->width ) | |
308 { | |
309 dx=ofs; | |
32759 | 310 u = txt + strlen( txt ); |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
311 |
32759 | 312 while ( u > (unsigned char *) txt ) |
23077 | 313 { |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
314 c = fntGetCharIndex( id, &u, utf8, -1 ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
315 |
32734
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
316 if ( c != -1) fw=Fonts[id]->Fnt[c].sx; |
cc58a1e919d9
Allow character in the font description file to be in UTF-8.
ib
parents:
32712
diff
changeset
|
317 |
32789 | 318 if ( c == -1 || fw == -1 ) { c=' '; fw=Fonts[id]->Fnt[c].sx; } |
23077 | 319 |
32792
31ce0bd110d5
Only replace non-existing font character by space if space itself exists.
ib
parents:
32791
diff
changeset
|
320 if ( fw == -1 ) continue; |
31ce0bd110d5
Only replace non-existing font character by space if space itself exists.
ib
parents:
32791
diff
changeset
|
321 |
23077 | 322 fh=Fonts[id]->Fnt[c].sy; |
323 fyc=Fonts[id]->Fnt[c].y * fbw + Fonts[id]->Fnt[c].x; | |
324 | |
325 dx-=fw; yc=dx; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26458
diff
changeset
|
326 if ( dx >= 0 ) |
23077 | 327 for ( y=0;y < fh;y++ ) |
328 { | |
329 for ( x=fw - 1;x >= 0;x-- ) | |
330 if ( dx + x >= 0 && dx + x < iw ) obuf[yc + x]=ibuf[fyc + x]; | |
331 fyc+=fbw; | |
332 yc+=iw; | |
333 } | |
334 } | |
335 } | |
336 | |
337 return &item->Bitmap; | |
338 } |