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

[MD:1826] 日本語フォントのボールド体部分でカーソルが歪む(Win98)



堀口です. meadow-develop フリフリモードです.

 特にお呼びではないようですがとりあえず出てきました^^;
 ボールド文字の上のカーソルが傾いてるのには気づかなかった..

# ちなみにわたしも C-l をぱたぱた打っていますがこれは私のフォント
# の設定が字間を詰め過ぎになっているせいだと思っています.

## ちなみに文字を消すときにはオーバーハングを文字毎にとるようには
## していないのはパフォーマンスのためですか? いずれにしても 
## 消すときの領域は平行四辺形は考えてないみたいですね.

### なもんだから FixedSys のイタリック体はスラントがあまりに激し
### くて使えないんですよ ^^;;;;

At 14 Jul 2000 13:44:47 +0900, MIYASHITA Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in <u8zv5wcao.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
> 98のfont metricがなんかおかしいのかなぁ?

 Windowsがおかしいのか使い方がおかしいのかはわかりませんが,
GetTextMerics は期待通りの値を返してはいないようです.

 カーソルのひずみ自体は mw32term.c:998 で起きています.

>  points[0].x = left + tm.tmOverhang;

 tm.tmOverhang がボールドで 1, イタリックで 0 になっています.
 このせいでカーソルがボールドの時に1ドットスラント, イタリックで
は正立になっています.

 これを Elisp の上からお手軽に検証するには以下の方法でokです.

 (w32-get-logfont-info
   '(w32-logfont "MS ゴシック" 0 -12 700 0 nil nil nil 128 1 3 49))
                                           ~~~ not italic
 結果は..

 ((max-width . 13) (charset-num . 128) (overhang . 1) (base . 10)
 (height . 12) (width . 7))                        ~ 1ドットオーバーハング

 (w32-get-logfont-info
   '(w32-logfont "MS ゴシック" 0 -12 400 0 t nil nil 128 1 3 49))
                                           ~ italic
 結果は...

 ((max-width . 16) (charset-num . 128) (overhang . 0) (base . 10)
  (height . 12) (width . 6))                       ~ オーバーハング無し


 この辺は内部的には

 ・logfont からwin32 api の LOGFONT 構造体をつくって(ここは間違っ
   ていないみたい)
 ・この LOGFONT 構造体で CreateFontIndirect して 
 ・その結果のフォントで SetObject して
 ・その結果のフォントハンドルで GetTextMetrics すると
 ・tmOverhang が上のような状態

 になっています. わからないなりにみてみた限りでは 
CreateFontIndirect に与える lf の設定(lisp_object_to_logfont())は
間違ってはいないようです.

 もうちょっと面白い(?)のは w32-get-logfont-info の overhang は 
logfont の italic は無視してweight に反応しているらしいあたりです.

 (w32-get-logfont-info
   '(w32-logfont "MS ゴシック" 0 -12 550 0 nil nil nil 128 1 3 49))
                                     ~~~
 ((max-width . 12) (charset-num . 128) (overhang . 0) (base . 10)
               ~~  (height . 12) (width . 6))      ~
                                          ~
 (w32-get-logfont-info
   '(w32-logfont "MS ゴシック" 0 -12 551 0 nil nil nil 128 1 3 49))
                                     ~~~
 ((max-width . 13) (charset-num . 128) (overhang . 1) (base . 10)
               ~~  (height . 12) (width . 7))      ~
                                          ~

 残念ながら今の私の手許では win32 api のヘルプが見られない上に自
由に弄くれる NT マシンも今のところ無いのでここまでです ;_;

-- 
堀口恭太郎