各プラットフォームのフォントの高さについて

フォントの高さ、というのがプラットフォーム毎に少しずつ違うようなので、簡単にまとめてみた。

ここで言う「高さ」とは、一行表示する際に必要になる高さのこと。つまり、次の行との余白は含まない。

Microsoft (Win32 API) の場合


  • Height = Ascent + Descent + InternalLeading

Win32 API は ExternalLeading というのが特徴的。要するに、上余白と下余白で、そこを API で細かく操作できるのは優位性がある。

Oracle (Java) の場合


  • Height = Ascent + Descent + Leading

Leading は図にはないが、Win32 API の InternalLeading と同じ位置にある。また、図では Ascent がアルファベットの頂点にあるように書かれているが、実際にはもっと高い位置にあり、情報として使えない。

青が Ascent、紫が Leading、緑が Descent で、なんかスカスカすぎてこれでは高度なテキスト描画はできない。

Adobe (Flush) の場合


  • Height = Ascent + Descent

情報が非常に細かい。ここまでの情報が取得できるのであれば、Flash 上に独自コンポーネントを構築することも難しくはないだろう。

Apple (Cocoa) の場合



  • Height = Ascent + Descent

Win32 API と異なり、余白が下にある。続く行がないのに下に余白があるのはどうなんだろうか。X-height や Cap height という情報は使い勝手が良さそう。