mkfont: Add "no drop shadow" gradients.

This commit is contained in:
Marisa the Magician 2023-01-10 13:35:15 +01:00
commit 453b64c179

View file

@ -329,7 +329,7 @@ palend:
fclose(f);
}
const char grads[8][20] =
const char grads[12][20] =
{
"Flat (Shadow)",
"Top-Bottom (Shadow)",
@ -338,7 +338,11 @@ const char grads[8][20] =
"Flat (Border)",
"Top-Bottom (Border)",
"Bottom-Top (Border)",
"Centered (Border)"
"Centered (Border)",
"Flat",
"Top-Bottom",
"Bottom-Top",
"Centered"
};
#define LOADFLAGS FT_LOAD_PEDANTIC
@ -349,7 +353,7 @@ int main( int argc, char **argv )
if ( argc < 3 )
{
fprintf(stderr,"usage: mkfont <font name> <pxsize> <unicode range (hex)>"
" [gradient type] [color palette] [-palinv]\n");
" [gradient type (0,11)] [color palette] [-palinv]\n");
return 1;
}
if ( FT_Init_FreeType(&ftlib) )
@ -361,7 +365,15 @@ int main( int argc, char **argv )
int pxsiz;
sscanf(argv[2],"%d",&pxsiz);
sscanf(argv[3],"%x-%x",&range[0],&range[1]);
if ( argc > 4 ) sscanf(argv[4],"%d",&gradient);
if ( argc > 4 )
{
sscanf(argv[4],"%d",&gradient);
if ( (gradient < 0) || (gradient >= 12) )
{
fprintf(stderr,"warning: gradient type out of range, falling back to type 0.\n");
gradient = 0;
}
}
if ( argc > 6 ) palinv = !strcmp(argv[6],"-palinv");
if ( argc > 5 ) loadpalette(argv[5]);
if ( FT_New_Face(ftlib,argv[1],0,&fnt) )
@ -433,16 +445,24 @@ int main( int argc, char **argv )
}
fprintf(stderr,"info: max cell size is %dx%d.\n",w,h);
}
iw = w+1;
ih = h+1;
if ( gradient&4 )
if ( gradient&8 )
{
bordshift = 1;
iw++;
ih++;
iw = w;
ih = h;
}
else
{
iw = w+1;
ih = h+1;
if ( gradient&4 )
{
bordshift = 1;
iw++;
ih++;
}
}
datsiz = palsize?(iw*ih*4):(iw*ih*2);
fprintf(stderr,"info: gradient selected is '%s'.\n",grads[gradient&7]);
fprintf(stderr,"info: gradient selected is '%s'.\n",grads[gradient]);
idata = calloc(datsiz,1);
uint32_t drawn = 0;
for ( uint32_t i=range[0]; i<=range[1]; i++ )
@ -471,7 +491,9 @@ int main( int argc, char **argv )
fnt->glyph->bitmap_top++;
valid = 0;
oob = 0;
if ( gradient&4 )
if ( gradient&8 ) // no shadow nor gradient
valid = draw_glyph(&fnt->glyph->bitmap,255,xx,yy,fnt->glyph->bitmap_left,h-fnt->glyph->bitmap_top);
else if ( gradient&4 )
{
// draw outline first
draw_glyph(&fnt->glyph->bitmap,0,xx,yy,fnt->glyph->bitmap_left,h-fnt->glyph->bitmap_top);