From 453b64c1797e9cbc6e4b7a9e3e557a32b9afa097 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Tue, 10 Jan 2023 13:35:15 +0100 Subject: [PATCH] mkfont: Add "no drop shadow" gradients. --- mkfont.c | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/mkfont.c b/mkfont.c index 8597461..f0712b7 100644 --- a/mkfont.c +++ b/mkfont.c @@ -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 " - " [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);