[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:7461] 非 TrueType フォントの bold 表示について



藤井です。

ticket:136 について質問があります。

ticket:136 の問題の原因は、mw32_glyph_metric での非 TrueType 時の
lbearing, rbearing の計算が誤っていることにあると考えています。

ですが、正しい値の計算について分からない 2 点がありますので、
御意見ください。なければ、ticket:136 のパッチを commit します。

1. 非 TrueType の bold の扱い。

非 TrueType のフォントでは、bold は normal の字体をずらして重ね合わせて
いるという扱いになっており、そのずれ幅が overhang として扱われています。

Meadow の論理フォント層でもこれを overhang として扱うべきでしょうか?
(現在は Windows API で取得した overhang がそのまま設定されるので、
overhang として扱われています)

これを overhang として扱うこととすると、以下のような問題がでてくるので
はないかと思っています。ですので、できれば overhang として処理するので
はなく、bold 化によって文字幅が広がったものとして扱うようにしたいと考え
ています。

  - bold 化して文字幅が広がった分が、描画時に欠ける可能性がある。(現在
    italic の overhang 部分が描画で欠けるのと同じ現象が起きる可能性が考
    えられる)

  - TrueType では spacing を -1 に設定して normal と文字ピッチを合わせ
    るというのがフォント設定の定番になっているが、非 TrueType ではこの
    spacing 設定をすると逆に文字ピッチが狭くなる。Windows フォントは同
    じ設定が使えた方が良いのではないか。

2. 非 TrueType での bold-italic の扱いについて

bold の場合は overhang が字体の幅増加分となるので、方針が決まれば修正は
効くと思うのですが、bold-italic の場合は別の問題があります。

bold-italic の overhang は italic が元々持っている overhang に上記の
bold 化による幅増加分の合計となります。

また、GetTextExtentPoint32 API で取得できる幅は normal の幅に、bold 化
による幅増加分が足された値になります。

このため、rbearing, lbearing の計算をどうすれば良いのか分かりません。

--
藤井 正行 / Masayuki FUJII