Frage

Frage:

Gibt es eine Möglichkeit zu überprüfen, ob eine bestimmte Schriftart einer von Microsoft ist Cleartype-Schriftarten optimiert

Ich glaube, ich könnte einfach hart Code die Liste des Font-Namen, da es eine relativ kurze Liste ist, aber das scheint ein bisschen hässlich. Würden die Font-Namen gleich, unabhängig von Windows' locale und Spracheinstellungen?

Hintergrund:

PuTTY Looks mit fett wirklich hässlich, Cleartype -fähigen, Consolas Text. Ich beschloss, mit der Quelle zu spielen, um zu sehen, ob ich das Problem herausfinden konnte, und ich glaube, ich es aufgespürt zu dem folgenden (abgekürzt) Code:

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);

Die Absicht ist es, eine fette Schriftart auswählen, die die gleichen Abmessungen wie die normale Schrift passt. Ich gehe davon aus, dass PuTTYs Consolas Text hässlich, weil aussieht, da Consolas ist so optimiert stark auf bestimmte Pixelgrenzen gelegt geführt werden, ist es in beliebige Dimensionen zu Schuhanzieher versucht erzeugt schlechte Ergebnisse.

So wie es scheint, eine entsprechende Korrektur wäre Cleartype-Schriftarten optimiert zu erkennen und versuchen, und erstellen Sie die fett gedruckten Versionen dieser Schriftarten die gleiche Breite und Höhe wie die anfängliche Create Anruf mit.

War es hilfreich?

Lösung

Ich bin nicht sicher, dass ich folge ganz das, was durch „verfolgte sie den unten folgenden (abgekürzt) Code“ gemeint ist, aber sicher genug Consolas fett aussieht schlecht in Putty. Hier ist Kitt Quelle von Fenstern / window.c. (Revision 8914, die mit Subversion "svn co svn: //svn.tartarus.org/sgt/putty", die am 5. April 2010)

      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      }

Für 10 pt Consolas die Werte von font_height und font_width waren -13 und 0, wenn Create für FONT_NORMAL (über das Makro f) genannt wurde, aber 15 und 7, wenn es für FONT_BOLD genannt wurde (die Werte werden auf den Leitungen geändert 1399 , 1400). den Wert der Breite Einstellung nicht einverstanden ist ausdrücklich nicht gut mit dem Consolas Fettschrift. Wenn window.c modifiziert wird, so dass die Linien 1477-1479 bewegt nach Linie 1391 eine viel schönere fett Consolas Schriftart kommen erhalten (Ich habe versucht, auch alle anderen verfügbaren Schriftarten (Courier, Bitstream, Lucida etc.) und sie waren nicht negativ . betroffen ich habe diesen Vorschlag an das Putty-Team geschickt Hier eine Figur ist, den Unterschied zeigt.: Bold-consolas-Beispiel

hinzugefügt am 16. Januar 2011: Der „Bug“ ist noch vorhanden, und das Update funktioniert immer noch. Nun wird die Zeilennummern in window.c sind, dass 1510-1512 Linien bewegt werden sollen, nachdem Linie 1417. Kristjan zu kommen.

hinzugefügt am Januar 13, 2012: Der Fehler ist immer noch in der Version 0.62 von Kitt (veröffentlicht am 10. Dezember 2011). Die Zeilennummern zu bewegen sind jetzt 1532-1534 nach 1439. Für Vollständigkeit kommen hier sind die Schritte, die ich in Cygwin durchgeführt:

$ 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

Kristjan

Andere Tipps

Nicht sicher, ob dies ist eine Antwort für Sie, aber sicherstellen, dass die Breite der Schrift eine exakte ganzzahlige Pixelbreite ist, wird Breite Truetype-Schriftart Fest macht gut aussieht unter Cleartype.

Um dies zu erreichen, müssen Sie ‚runde‘ Ihre Schrifthöhe mit einigem Versuch und Irrtum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top