言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

etoys 用フォントの下が切れる問題。

原因: etoys 用のフォントの代替フォントに登録されている StrikeFontSet(Accuny11 14) の高さは fontArray の最初のフォント(英文用)を元に計算される。しかし、日本語には 11ドットのフォントが無いため、12ドットのフォントで対応している。よって1ドット切れる。

対策: いくつかの対策がある。

  1. StrikeFontSet の高さを計算する時に、fontArray にあるフォントの最大値を返す。
  2. StrikeFontSet に日本語フォントを追加する際に、1番目のフォントサイズ (ascent)を大きくしてしまう。
  3. StrikeFontSet に height というインスタンス変数を作り、フォント追加時に最大値に設定。
  4. フォントをズームさせる(汚そう。。。)。または11ポイントの日本語フォントを用意する。

4 あたりがちゃんとした解決なのだろうけど、とりあえず簡単で軽そうな 2 の方法で対応してみた。具体的には StrikeFontSet >> initializeWithFontArray: を修正して英語フォントの浅いコピーの ascent を変更する事にした。

ちなみに、これでもフラップや TrueType フォントの字がガタガタになる問題は解決していない。最新バージョンは http://metatoys.org/pub/NSqueak-2004-12-16.zip