今日のニワン語メモ

フォントについてあれこれ。

といってもフォントに関する詳細を書くのはめんどうなので結論だけ。

■検証スクリプト

0.00::/isWide = true
0.00::/size = 100
0.00::/drawShape(x:0, y:0, shape:"rect", width:screenWidth, height:size, pos:"hidari ue", color:0x00ff00)
0.00::/drawShape(x:0, y:size, shape:"rect", width:screenWidth, height:size, pos:"hidari ue", color:0xffff00)
0.01::/drawText(text:"Aagb012", x:0, y:0, size:size, pos:"hidari ue", color:0xff0000)
0.01::/drawText(text:"あア青田○×", x:0, y:size, size:size, pos:"hidari ue", color:0x0000ff)
※sizeの値を色々変更して検証


■drawText.sizeの単位
pixel


■フォントサイズに対する実際のフォントの大きさ
actualSize = (fontSize * 0.72).floor (半角の場合)
actualSize = (fontSize * 0.90).floor (全角の場合)
実際のフォントの大きさとは、半角の場合→アセントのサイズ、全角の場合→全高(アセント+ディセント?)のサイズ


■指定位置に対する実際にフォントが書かれる位置のずれ(Y方向)
gap = 4 + (size / 6).floor (半角の場合)
gap = 4 + (size / 16).floor (全角の場合)


Windowsにおいて、デフォルトのフォントを使用した場合

この辺を考慮に入れて計算すると、ある領域の中心にテキストを書く、というようなことが計算で行えるようになります。

・・・というか、考慮に入れないとこんな普通に行いそうな行為すらトライアル&エラーの手動指定になります。狙った位置に文字を書く、ということすら結構難しいものですね。
ニワン語は文字と図形を書くことがメインとなる――というか、それしかできない言語なので、その分テキスト周りの処理は充実してると嬉しいんですが・・・。アセントやディセント、レディングの取得、ベースライン位置の取得、文字の横幅の取得(ホントを言えば文字「列」の横幅の取得)ができるといろいろ融通が利くんですけどね。