Ticket #136 (closed 不具合: fixed)

Opened 3 years ago

Last modified 2 years ago

ビットマップフォントでBoldフォントを使用していると、画面にごみが残る場合がある。

Reported by: anonymous Assigned to:
Priority: minor Milestone:
Component: その他/一般 Version: 3.00 (開発中)
Keywords: Cc:

Description

添付のようなTrueTypeフォントでBoldフォントを使用していると、 一行スクロールなどで、ごみが残ることがある。

# 以前も同じ現象が発生していて、どこかのRevisionで
# 直ったのが、また再現しています。
# 具体的なRevisionは覚えていないです。

わたしの環境では、Meadow -qで起動して以下のフォントに切り替えた後、 ^C-bで*Messages*から*scratch*にバッファを変更すると モードラインにごみが残ります。

特にnavi2chのboardモードで顕著にでます。

# font指定

(w32-add-font
 "private-fontset13"
 '((spec
    ;;
    ((:char-spec ascii             :height any                           )
     strict (w32-logfont "Terminal"    0 -13 400 0 nil nil nil 128 1 3 49))
    ((:char-spec ascii             :height any :weight bold              )
     strict (w32-logfont "Terminal"    0 -13 700 0 nil nil nil 128 1 3 49) ((spacing . -1)))
    ((:char-spec ascii             :height any              :slant italic)
     strict (w32-logfont "Terminal"    0 -13 400 0   t nil nil 128 1 3 49))
    ((:char-spec ascii             :height any :weight bold :slant italic)
     strict (w32-logfont "Terminal"    0 -13 700 0   t nil nil 128 1 3 49) ((spacing . -1)))
    ;;
    ((:char-spec latin-jisx0201    :height any                           )
     strict (w32-logfont "Terminal"    0 -13 400 0 nil nil nil 128 1 3 49))
    ((:char-spec latin-jisx0201    :height any :weight bold              )
     strict (w32-logfont "Terminal"    0 -13 700 0 nil nil nil 128 1 3 49) ((spacing . -1)))
    ((:char-spec latin-jisx0201    :height any              :slant italic)
     strict (w32-logfont "Terminal"    0 -13 400 0   t nil nil 128 1 3 49))
    ((:char-spec latin-jisx0201    :height any :weight bold :slant italic)
     strict (w32-logfont "Terminal"    0 -13 700 0   t nil nil 128 1 3 49) ((spacing . -1)))
    ;;
    ((:char-spec katakana-jisx0201 :height any                           )
     strict (w32-logfont "Terminal"    0 -13 400 0 nil nil nil 128 1 3 49))
    ((:char-spec katakana-jisx0201 :height any :weight bold              )
     strict (w32-logfont "Terminal"    0 -13 700 0 nil nil nil 128 1 3 49) ((spacing . -1)))
    ((:char-spec katakana-jisx0201 :height any              :slant italic)
     strict (w32-logfont "Terminal"    0 -13 400 0   t nil nil 128 1 3 49))
    ((:char-spec katakana-jisx0201 :height any :weight bold :slant italic)
     strict (w32-logfont "Terminal"    0 -13 700 0   t nil nil 128 1 3 49) ((spacing . -1)))
    ;;
    ((:char-spec japanese-jisx0208 :height any                           )
     strict (w32-logfont "Terminal"    0 -13 400 0 nil nil nil 128 1 3 49))
    ((:char-spec japanese-jisx0208 :height any :weight bold              )
     strict (w32-logfont "Terminal"    0 -13 700 0 nil nil nil 128 1 3 49) ((spacing . -1)))
    ((:char-spec japanese-jisx0208 :height any              :slant italic)
     strict (w32-logfont "Terminal"    0 -13 400 0   t nil nil 128 1 3 49))
    ((:char-spec japanese-jisx0208 :height any :weight bold :slant italic)
     strict (w32-logfont "Terminal"    0 -13 700 0   t nil nil 128 1 3 49) ((spacing . -1)))
    )))

This ticket was imported from scarab issue MW124

Attachments

Change History

08/15/06 23:53:42 changed by anonymous2

  • status changed from new to closed.
  • resolution set to invalid.

font定義が誤っています。 一部、0とすべきcharsetを128としています。

誤ったフォント定義で現象が発生すること、修正したフォント定義で現象が発生しないことを確認しました。

(follow-up: ↓ 3 ) 08/19/06 20:30:33 changed by yamazaki

ご指摘ありがとうございます。

font定義に誤りがあるとのことで、char-specでasciiに対応するCHARSETについて0に変更したところ、選択されるフォントが"Terminal"ではなくなるようです。

ちょっと期待した動作とは異なるのですが、こういう仕様ということであれば了解しました。

# この部分は、フォント側がもっている文字集合を示していて、Meadow側の文字コードとは
# 直接はリンクしていないのかなと思っていました。

(in reply to: ↑ 2 ) 08/19/06 23:15:36 changed by anonymous

anonymousの書くことはそのまま信じない方がいいですよ。そもそもTerminalフォントってTrueType?なんですか?

08/20/06 11:33:50 changed by anonymous

font の設定は (w32-query-get-logfont) を利用して logfont の定義を調べたほうがいいですよ。

(w32-query-get-logfont) の実行結果

  • Terminal の場合
    (w32-logfont "Terminal" 0 -13 400 0 nil nil nil 128 1 1 1)
  • MS ゴシック の場合
    (w32-logfont "MS ゴシック" 0 -13 400 0 nil nil nil 128 1 3 49)
  • Courier New の場合
    (w32-logfont "Courier New" 0 -13 400 0 nil nil nil 0 1 3 49)

ってことで "1 3 49" と設定してるのが間違いなのではないでしょうか。

08/21/06 01:39:14 changed by anonymous

元々のモードラインの異常表示に加え、1バイト文字の斜体文字の上をカーソル移動するだけでぼろぼろになります。

現象からの推測ですが、ビットマップフォント(Terminal, FixedSys?など)の1バイト文字の表示更新処理の際、背景の塗りつぶし処理が1ピクセルほど左にずれているのではないでしょうか?

#draw_glyphs [xdisp.c] あたり?

(follow-up: ↓ 7 ) 08/21/06 23:57:53 changed by anonymous

Replying to anonymous:

1バイト文字の斜体文字の上をカーソル移動するだけでぼろぼろになります。

overhang部分が消えるのは別の問題で、ビットマップフォント以外でも発生しました。斜体大文字Hを並べて右カーソル移動すると、次々と小文字hになります。

(in reply to: ↑ 6 ) 08/22/06 22:06:04 changed by yamazaki

  • status changed from closed to reopened.
  • resolution deleted.

(w32-query-get-logfont)で調べなおして、試してみましたが、やはりごみが残りました。

Boldフォントには、normalフォントと幅を同じにするため、(spacing . -1)で幅を縮めているのですが、この設定をはずすとごみは残りませんでした。

Terminalフォントはビットマップフォントなんですね(TrueType?だと思い込んでいました)。とりあえず、このチケットの概要も変更します。

Replying to anonymous:

overhang部分が消えるのは別の問題で、ビットマップフォント以外でも発生しました。斜体大文字Hを並べて右カーソル移動すると、次々と小文字hになります。

こちらは、別チケットにしたほうがよいのでは。

08/22/06 22:07:15 changed by yamazaki

  • summary changed from TrueTypeフォントでBoldフォントを使用していると、表示にごみが残る場合がある。 to ビットマップフォントでBoldフォントを使用していると、画面にごみが残る場合がある。.

08/23/06 07:43:33 changed by fujii

非truetypeでのフォントのrbearing, lbearingの計算が誤っているのが原因だと思います。

とりあえず以下の修正でごみは消えるはずです。ただし、boldのoverhangを無視しているため、厳密にはこの修正も正確ではなく、暫定対応となります。

また、この修正を行なった場合は、bold表示の右1ピクセル分が欠けて描画されることがあります。これは、非truetypeではboldフォントの幅増加分はoverhangとして扱われているため、ticket:339と同様の理由で欠けるものと思われます。

  • src/mw32font.c

    old new  
    231231            GetCharWidth (hdc, *cp, *cp, &w); 
    232232            pwf->cur_cm.width = w; 
    233233          } 
    234         pwf->cur_cm.rbearing = 0; 
    235         pwf->cur_cm.lbearing = plf->overhang; 
     234        pwf->cur_cm.rbearing = pwf->cur_cm.width; 
     235        if (pwf->logfont.lfItalic) 
     236          pwf->cur_cm.rbearing += plf->overhang; 
     237        pwf->cur_cm.lbearing = 0; 
    236238      } 
    237239    pwf->cur_cm.ascent = plf->ascent; 
    238240    pwf->cur_cm.descent = plf->descent; 

08/26/06 17:00:23 changed by yamazaki

上記のパッチでごみが残る現象が解消されることを確認しました。

09/10/06 21:56:17 changed by fujii

r4162でコミットしました。

09/11/06 22:17:23 changed by yamazaki

  • status changed from reopened to closed.
  • resolution set to fixed.

r4163でも問題ないことを確認できました。


Add/Change #136 (ビットマップフォントでBoldフォントを使用していると、画面にごみが残る場合がある。)




Change Properties
Action