mkfont: Add support for TTC fonts (and other fonts with multiple faces).
This commit is contained in:
parent
5e31e42201
commit
740ab8e81b
1 changed files with 30 additions and 4 deletions
34
mkfont.c
34
mkfont.c
|
|
@ -352,7 +352,7 @@ int main( int argc, char **argv )
|
|||
{
|
||||
if ( argc < 3 )
|
||||
{
|
||||
fprintf(stderr,"usage: mkfont <font name> <pxsize> <unicode range (hex)>"
|
||||
fprintf(stderr,"usage: mkfont <font name>[:face index] <pxsize> <unicode range (hex)>"
|
||||
" [gradient type (0,11)] [color palette] [-palinv]\n");
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -376,12 +376,38 @@ int main( int argc, char **argv )
|
|||
}
|
||||
if ( argc > 6 ) palinv = !strcmp(argv[6],"-palinv");
|
||||
if ( argc > 5 ) loadpalette(argv[5]);
|
||||
if ( FT_New_Face(ftlib,argv[1],0,&fnt) )
|
||||
char *fidx = strrchr(argv[1],':');
|
||||
int fnum = 0;
|
||||
if ( fidx )
|
||||
{
|
||||
fprintf(stderr,"error: failed to open font '%s'\n",argv[1]);
|
||||
*fidx = 0;
|
||||
sscanf(fidx+1,"%d",&fnum);
|
||||
}
|
||||
if ( FT_New_Face(ftlib,argv[1],fnum,&fnt) )
|
||||
{
|
||||
if ( fidx ) fprintf(stderr,"error: failed to open font '%s' face %d.\n",argv[1],fnum);
|
||||
else fprintf(stderr,"error: failed to open font '%s'.\n",argv[1]);
|
||||
return 4;
|
||||
}
|
||||
fprintf(stderr,"info: loaded font \'%s %s\'.\n",fnt->family_name,fnt->style_name);
|
||||
int nfnt = fnt->num_faces;
|
||||
if ( !fidx && (nfnt > 1) )
|
||||
{
|
||||
fprintf(stderr,"info: loaded font has %d faces, you may want to load a specific one (see below).\n",nfnt);
|
||||
FT_Done_Face(fnt);
|
||||
for ( int i=0; i<nfnt; i++ )
|
||||
{
|
||||
if ( FT_New_Face(ftlib,argv[1],i,&fnt) )
|
||||
{
|
||||
fprintf(stderr,"error: failed to open font '%s' face %d. Skipping.\n",argv[1],i);
|
||||
continue;
|
||||
}
|
||||
fprintf(stderr,"info: face %d: \'%s %s\'.\n",i,fnt->family_name,fnt->style_name);
|
||||
FT_Done_Face(fnt);
|
||||
}
|
||||
FT_Done_FreeType(ftlib);
|
||||
return 0;
|
||||
}
|
||||
if ( !strcmp(fnt->family_name,"tewi") ) tewi_hotfix = 1;
|
||||
else if ( !strcmp(fnt->family_name,"miniwi") ) miniwi_hotfix = 1;
|
||||
if ( FT_Set_Pixel_Sizes(fnt,0,pxsiz) )
|
||||
|
|
@ -481,7 +507,7 @@ int main( int argc, char **argv )
|
|||
int adv2 = fnt->glyph->advance.x>>6;
|
||||
if ( adv2 ) adv = adv2;
|
||||
w = adv;
|
||||
iw = w+((gradient&4)?2:1);
|
||||
iw = w+((gradient&8)?0:(gradient&4)?2:1);
|
||||
}
|
||||
int xx = 0;
|
||||
int yy = upshift+tewi_hotfix+miniwi_hotfix;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue