原因: etoys 用のフォントの代替フォントに登録されている StrikeFontSet(Accuny11 14) の高さは fontArray の最初のフォント(英文用)を元に計算される。しかし、日本語には 11ドットのフォントが無いため、12ドットのフォントで対応している。よって1ドット切れる。
対策: いくつかの対策がある。
- StrikeFontSet の高さを計算する時に、fontArray にあるフォントの最大値を返す。
- StrikeFontSet に日本語フォントを追加する際に、1番目のフォントサイズ (ascent)を大きくしてしまう。
- StrikeFontSet に height というインスタンス変数を作り、フォント追加時に最大値に設定。
- フォントをズームさせる(汚そう。。。)。または11ポイントの日本語フォントを用意する。
4 あたりがちゃんとした解決なのだろうけど、とりあえず簡単で軽そうな 2 の方法で対応してみた。具体的には StrikeFontSet >> initializeWithFontArray: を修正して英語フォントの浅いコピーの ascent を変更する事にした。
ちなみに、これでもフラップや TrueType フォントの字がガタガタになる問題は解決していない。最新バージョンは http://metatoys.org/pub/NSqueak-2004-12-16.zip