Pregunta

Pregunta:

Hay una forma de comprobar si una determinada fuente es uno de Microsoft ClearType-optimizado fuentes?

Supongo que yo podría simplemente codificar la lista de los nombres de fuente, ya que es una lista relativamente corta, pero que parece un poco feo.Sería la fuente de los nombres de ser el mismo independientemente de las Ventanas " configuración regional y de idioma configuración?

Antecedentes:

La masilla se ve muy feo, con negrita, ClearType habilitado, Consolas de texto.Me decidí a jugar con la fuente y ver si podía averiguar el problema, y creo que relacionarlo con el siguiente (abreviado) código:

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

La intención es elegir un tipo de letra negrita que se adapte a las mismas dimensiones de la fuente normal.Estoy suponiendo que la Masilla del Consolas de texto se ve feo porque, desde Consolas es tan fuertemente optimizado para ser mostrados en específico de los límites de píxeles, tratando de calzador en dimensiones arbitrarias produce malos resultados.

Por lo que parece una corrección apropiada sería para detectar ClearType-optimizado fuentes y tratan de crear las versiones en negrita de las fuentes utilizando el mismo ancho y alto que el inicial CreateFont llamada.

¿Fue útil?

Solución

No estoy seguro de que sigo exactamente lo que se entiende por "seguimiento se reduce a lo siguiente (abreviado) de código", pero suficientes Consolas seguro que se ve mal en negrilla en la masilla. Aquí es fuente de masilla de las ventanas / window.c. (Revisión 8914 obtenidos con la subversión "svn co svn: //svn.tartarus.org/sgt/putty", el 5 de abril de 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      }

Para 10 pt Consolas, los valores de font_height y font_width eran -13 y 0 cuando CreateFont fue llamado para FONT_NORMAL (a través de la macro f), pero 15 y 7 cuando se llamaba para FONT_BOLD (los valores se cambian en las líneas 1399 , 1400). Establecer el valor de la anchura de forma explícita no está de acuerdo bien con el tipo de letra negrita Consolas. Si window.c se modifica de manera que las líneas 1477-1479 se mueven a venir después de la línea 1391 de una mucho más agradable se obtiene negrita Consolas (también probé todas las otras fuentes disponibles (Courier, Bitstream, Lucida, etc.) y no fueron adversamente . afectados he enviado esta sugerencia al equipo de masilla Aquí es una figura que muestra la diferencia.: bold-consolas-ejemplo

Agregado el 16 de enero de 2011: El "error" está todavía presente, y el arreglo todavía funciona. Ahora los números de línea en window.c son que las líneas 1510-1512 deben ser movidos a venir después de la línea 1417. Kristjan.

En enero AÑADIDO. 13, 2012: El error se encuentra todavía en la versión 0.62 de la masilla (lanzado el 10 de diciembre, 2011). Los LINENUMBERS para mover ahora son 1532-1534 venir en pos de 1439. Para completar estos son los pasos que llevaba a cabo en 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

Otros consejos

No estoy seguro si esto es una respuesta para usted, pero asegurándose de que el ancho de la fuente es un ancho de píxel entero exacto, hará que fija la anchura fuentes TrueType se ven bien bajo ClearType.

Para lograrlo, tendrá a su altura 'redondo' fuente con un poco de ensayo y error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top