1

質問:

特定のフォントがMicrosoftのClearType最適化フォントの1つであるかどうかを確認する方法はありますか?

フォント名のリストは比較的短いので、単純にハードコーディングできると思いますが、それは少し醜いようです。Windowsのロケールや言語設定に関係なく、フォント名は同じですか?

バックグラウンド:

PuTTYは、太字のClearType対応のConsolasテキストで非常に見苦しく見えます。ソースをいじって問題を理解できるかどうかを確認することにしました。次の(省略された)コードまで追跡したと思います。

font_height = cfg.font.height;
if (font_height > 0) {
    font_height =
        -MulDiv(font_height, GetDeviceCaps(hdc, LOGPIXELSY), 72);
    }
}
font_width = 0;

#define f(i,c,w,u) \
    fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
                           c, OUT_DEFAULT_PRECIS, \
                           CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
                           FIXED_PITCH | FF_DONTCARE, cfg.font.name)

f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);

SelectObject(hdc, fonts[FONT_NORMAL]);
GetTextMetrics(hdc, &tm);

font_height = tm.tmHeight;
font_width = tm.tmAveCharWidth;

f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);

目的は、通常のフォントと同じ寸法に合う太字のフォントを選択することです。PuTTYのConsolasテキストは見苦しいと思います。これは、Consolasが特定のピクセル境界に配置されるように非常に最適化されているため、任意の寸法にシューホーンしようとすると悪い結果が生じるためです。

したがって、適切な修正は、ClearTypeに最適化されたフォントを検出し、最初のCreateFont呼び出しと同じ幅と高さを使用してそれらのフォントの太字バージョンを作成することであるように思われます。

4

2 に答える 2

4

「次の(省略された)コードまで追跡する」という意味に完全に従うかどうかはわかりませんが、PuttyではConsolasの太字が十分に悪いように見えることは確かです。これがwindows/window.cのパテソースです(2010年4月5日にSubversion "svn co svn://svn.tartarus.org/sgt/putty"で取得されたリビジョン8914)。

      1386 fonts [i] = CreateFont(font_height、font_width、0、0、w、FALSE、u、FALSE、\
      1387 c、OUT_DEFAULT_PRECIS、\
      1388 CLIP_DEFAULT_PRECIS、FONT_QUALITY(cfg.font_quality)、\
      1389 FIXED_PITCH | FF_DONTCARE、cfg.font.name)
      1390  
      1391 f(FONT_NORMAL、cfg.font.charset、fw_dontcare、FALSE);
      1392  
      1393 SelectObject(hdc、fonts [FONT_NORMAL]);
      1394 GetTextMetrics(hdc、&tm);
      1395  
      1396 GetObject(fonts [FONT_NORMAL]、sizeof(LOGFONT)、&lfont);
      1397  
      1398 if(pick_width == 0 || pick_height == 0){
      1399 font_height = tm.tmHeight;
      1400 font_width = tm.tmAveCharWidth;
      1401}
      ..。
      1477 if(bold_mode == BOLD_FONT){
      1478 f(FONT_BOLD、cfg.font.charset、fw_bold、FALSE);
      1479}

10ポイントのConsolasの場合、CreateFontがFONT_NORMALに対して(マクロfを介して)呼び出されたときのfont_heightとfont_widthの値は-13と0でしたが、FONT_BOLDに対して呼び出されたときは15と7でした(値は1399、1400行で変更されています) 。widthの値を明示的に設定すると、Consolasの太字フォントとうまく一致しません。window.cを変更して、行1477-1479を行1391の後に移動すると、より優れた太字のConsolasフォントが取得されます(他のすべての使用可能なフォント(Courier、Bitstream、Lucidaなど)も試しましたが、悪影響はありませんでした。影響を受けました。この提案をPuttyチームに送信しました。違いを示す図は次のとおりです。 太字-consolas-例

2011年1月16日に追加:「バグ」は引き続き存在し、修正は引き続き機能します。これで、window.cの行番号は、1510〜1512行を1417行の後に移動する必要があるということです。Kristjan。

1月に追加。2012年13月13日:バグはまだバージョン0.62のパテ(2011年12月10日にリリース)にあります。移動する行番号は、1439以降の1532-1534になりました。完全を期すために、cygwinで実行した手順を次に示します。

$ svn co svn://svn.tartarus.org/sgt/putty2
$ cd putty
$ perl mkfiles.pl
$ cd windows
$ --- edit window.c and move the 3 lines---
$ make CC=gcc-3 -f Makefile.cyg
$ --- move resulting executable files (including putty.exe) to a suitable folder
$ --- add shortcuts to the executables to Windows start menu

クリスチャン

于 2010-04-06T00:05:42.513 に答える
0

これが答えかどうかはわかりませんが、フォントの幅が正確な整数ピクセル幅であることを確認すると、ClearTypeで固定幅のTrueTypeフォントが見栄えが良くなります。

これを実現するには、試行錯誤しながらフォントの高さを「丸める」必要があります。

于 2010-04-06T11:20:51.880 に答える