From 212d870a097b1371b8345c707474b46b609bb657 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Thu, 22 Sep 2022 17:48:26 +0200 Subject: [PATCH] Fix mkfont for actual fixed-width fonts. --- mkfont.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mkfont.c b/mkfont.c index 67a4405..942f1a3 100644 --- a/mkfont.c +++ b/mkfont.c @@ -444,14 +444,21 @@ int main( int argc, char **argv ) // third pass to compute the maximum cell size (for memory allocation) if ( autosize ) { - h = pxsiz+1; // should be fine - for ( uint32_t i=range[0]; i<=range[1]; i++ ) + h = fnt->size->metrics.height>>6; + if ( FT_IS_FIXED_WIDTH(fnt) ) + { + w = fnt->size->metrics.max_advance>>6; + autosize = 0; // don't readjust per-glyph + } + else for ( uint32_t i=range[0]; i<=range[1]; i++ ) { FT_UInt glyph = FT_Get_Char_Index(fnt,i); if ( !glyph || FT_Load_Glyph(fnt,glyph,LOADFLAGS) ) continue; FT_Render_Glyph(fnt->glyph,RENDERMODE); int adv = fnt->glyph->linearHoriAdvance>>16; - if ( adv > w ) w = adv; + int gw = fnt->glyph->bitmap.width+fnt->glyph->bitmap_left; + if ( gw > adv ) adv = gw; + if ( (adv+rightshift) > w ) w = adv+rightshift; } fprintf(stderr,"info: max cell size is %dx%d.\n",w,h); } @@ -480,7 +487,7 @@ int main( int argc, char **argv ) { // readjust cell width (but not height) for this character int adv = fnt->glyph->linearHoriAdvance>>16; - w = adv; + w = adv+rightshift; iw = w+((gradient&4)?2:1); } int xx = rightshift;