Question

Question:

Yat-il un moyen de vérifier si une police donnée est l'un des polices ClearType optimisé ?

Je suppose que je pourrais simplement coder en dur la liste des noms des polices, car il est une liste relativement courte, mais qui semble un peu laid. Est-ce que les noms de police le même quel que soit locale de Windows et les paramètres de langue?

Contexte:

PuTTY ressemble vraiment laid en gras, ClearType -Enabled, texte Consolas. J'ai décidé de jouer avec la source et voir si je pouvais comprendre le problème, et je pense que je dépisté jusqu'à le code suivant (en abrégé):

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

Le but est de choisir une police audacieuse qui correspond aux mêmes dimensions que la police normale. Je suppose que le texte Consolas PuTTY est moche parce que, depuis Consolas est si fortement optimisé pour être aménagé sur les limites des pixels spécifiques, en essayant de le caser dans des dimensions arbitraires produit de mauvais résultats.

Il semble donc comme une solution appropriée serait de détecter les polices optimisées ClearType et essayer de créer les versions audacieuses de ces polices en utilisant la même largeur et la hauteur que l'appel CreateFont initial.

Était-ce utile?

La solution

Je ne suis pas sûr que je suis tout à fait ce que l'on entend par « dépisté à ce qui suit (en abrégé) code », mais bien sûr ressemble Consolas gras mauvais dans Putty. Voici la source du mastic de fenêtres / window.c. (Révision 8914 obtenue avec la subversion "svn co svn: //svn.tartarus.org/sgt/putty", le 5 Avril 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      }

Pour 10 pt Consolas, les valeurs de font_height et font_width ont été -13 et 0 quand CreateFont a été appelé à FONT_NORMAL (via la macro f), mais 15 et 7 quand il a été appelé à FONT_BOLD (les valeurs sont modifiées sur les lignes 1399 , 1400). Réglage de la valeur de la largeur ne explicitement d'accord pas bien avec la police en gras Consolas. Si window.c est modifié de sorte que les lignes 1477-1479 sont déplacés à venir après la ligne 1391 est obtenu une police Consolas beaucoup plus agréable gras (j'ai aussi essayé toutes les autres polices disponibles (Courier, Bitstream, Lucida, etc.) et ils étaient pas défavorablement . Je l'ai touché envoyé cette suggestion à l'équipe Putty Voici une figure montrant la différence.: bold-consolas-exemple

AJOUTE LE 16 JANVIER 2011: Le « bug » est toujours présent, et le correctif fonctionne toujours. Maintenant, les numéros de ligne dans window.c sont que les lignes 1510-1512 devraient être déplacés à venir après la ligne 1417. Kristjan.

AJOUTÉE SUR janvier 13, 2012: Le bug est toujours dans la version 0.62 de mastic (publié le 10 décembre 2011). Les linenumbers de se déplacer sont maintenant 1532-1534 à venir après 1439. Pour être complet, voici les étapes que je transportais dans 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

Kristjan

Autres conseils

Je ne sais pas si cela est une réponse pour vous, mais en veillant à la largeur de la police est une largeur de pixel entier exact, va rendre les polices TrueType largeur fixe semblent bonnes sous ClearType.

Pour ce faire, vous aurez besoin de « rond » votre taille de la police avec quelques essais et erreurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top