int TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, int *minx, int *maxx, int *miny, int *maxy, int *advance)
fontのUNICODE文字chのグリフメトリックを得る.
メモ: この関数のfontにNULLを渡すと異常終了する.
戻り値: 成功のとき0で, NULLでない引数には適切な値が代入される. 指定のフォントに指定の文字が存在しないなど失敗のとき-1
それぞれの値の意味は図の通りである:
それぞれの値が次の通りであるとする:
TTF_FontHeight : 53 TTF_FontAscent : 38 TTF_FontDescent : -14 TTF_FontLineSkip : 55 TTF_GlyphMetrics('g'): minx=1 maxx=15 miny=-7 maxy=15 advance=16
このフォントの行の高さは行間を含めて55ピクセルである. アセント - ディセント = 52 なので, このフォントの行間は3ピクセルと思われる.
グリフ'g'で座標(X,Y)が左上の角になるようにサーフェイスに(TTF_RenderGlyph_Solidやこれと似た関数で)描画したいとする.
グリフメトリックを使った求め方は次のようになる:
//SDL_Surface *glyph,*screen; SDL_Rect rect; int minx,maxy,advance; TTF_GlyphMetrics(font,'g',&minx,NULL,NULL,&maxy,&advance); rect.x=X+minx; rect.y=Y+TTF_FontAscent(font)-maxy; SDL_BlitSurface(glyph,NULL,screen,&rect); X+=advance;
同じグリフで座標(X,Y)がorigin(ベースライン上)になるように描画したいとする:
//TTF_Font *font; //SDL_Surface *glyph,*screen; SDL_Rect rect; int minx,maxy,advance; TTF_GlyphMetrics(font,'g',&minx,NULL,NULL,&maxy,&advance); rect.x=X+minx; rect.y=Y-maxy; SDL_BlitSurface(glyph,NULL,screen,&rect); X+=advance;
メモ: これらの例で違うのは, 左上の角の場合は +TTF_FontAscent(font)
を使っている部分のみである.
メモ: これらの例は'g'がフォントにあると仮定している!
メモ: アウトラインサイズを設定しても位置が変わらないようにTTF_GetFontOutline(font)を引いたほうがよいかもしれない.