目次 - 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