La détection des polices ClearType optimisé
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.
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.:
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.