<强>问题:

有没有一种方法来检查,如果给定的字体是微软的的ClearType优化的字体中的一个

我想我可以简单地硬编码的字体名称列表,因为它是一个相对较短的名单,但似乎有点难看。将字体的名称是一样的,不管Windows的区域和语言设置?

<强>背景

腻子看起来真的很大胆难看,的ClearType - 启用,索拉文本。我决定玩的来源,看看能不能找出问题,我想我跟踪它到以下(略)代码:

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的索拉文字看起来丑陋,因为自从索拉如此高度优化的特定的像素边界进行奠定了,试图把它变成鞋拔子任意尺寸产生不好的结果。

因此,它似乎是一个合适的解决将是检测的ClearType优化的字体,并尝试创建使用相同的宽度和高度作为初始的CreateFont呼叫的那些字体的粗体版本。

有帮助吗?

解决方案

我不知道,我跟随相当何谓“跟踪它到以下(略)的代码”,但在腻子果然索拉大胆的外观不良。下面是窗户/ window.c的油灰源(与颠覆获得的修订8914 “SVN共同的svn://svn.tartarus.org/sgt/putty”,5 2010年4月)

      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个索拉,font_height和font_width的值分别为-13和0时的CreateFont被称为用于FONT_NORMAL(经由宏F),但15和图7,当它被要求FONT_BOLD(设置值改变在线路1399 ,1400)。设置宽度值明确不与索拉加粗字体一致。如果window.c被修改,使得线1477-1479移动来行1391更加美好得到加粗字体索拉后(我也尝试过其他所有可用的字体(快递,档案,龙力等),他们也没有不利。受影响的I已将这一建议,腻子团队下面是该差的数字: “粗体-索拉-例如”

ADDED 1月16日,2011:该“错误”仍然存在,并且修复仍然有效。现在,在window.c线路号是行1510至1512年应该被移动到线来克里斯蒂安1417之后。

添加于一月13,2012:该缺陷仍然是腻子的0.62版(发布于2011年12月10日)。移动linenumbers现在是1532年至1534年到1439之后来到为了完整性这里是我在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

克里斯蒂安

其他提示

不知道这是给你一个答案,但要确保字体的宽度是一个准确的整数像素宽度,将固定宽度的TrueType字体好看的ClearType下。

要做到这一点,你将需要一些试验和错误“圆”的字体高度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top