目次 - 3.関数 - 3.3属性 - TTF_GlyphMetrics

TTF_GlyphMetrics

int TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, int *minx, int *maxx, int *miny, int *maxy, int *advance)

font
グリフメトリックを得るフォント
ch
グリフメトリックを得るUnicode文字
minx
最小のX座標のオフセットを代入するポインタ. 不要の場合はNULL
maxx
最大のX座標のオフセットを代入するポインタ. 不要の場合はNULL
miny
最小のY座標のオフセットを代入するポインタ. 不要の場合はNULL
maxy
最大のY座標のオフセットを代入するポインタ. 不要の場合はNULL
advance
次の文字のオフセット位置を代入するポインタ. 不要の場合はNULL

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)を引いたほうがよいかもしれない.

参照

TTF_FontHeight, TTF_FontAscent, TTF_FontDescent, TTF_FontLineSkip, TTF_SizeText, TTF_SizeUTF8, TTF_SizeUNICODE, TTF_GlyphIsProvided, TTF_GetFontOutline

原文へのリンク

3.3.19 TTF_GlyphMetrics