2009-12-11 15 views
5

Estoy experimentando con Xlib para obtener una comprensión más profunda de cómo funcionan los programas de la GUI de Linux. He escrito un programa simple que muestra "Hola, mundo" en una ventana, pero parece bastante anacrónico ya que el texto no está anti-alias.Texto sin alias en X11

¿Cuál es la mejor manera de mostrar texto antialias en X11? ¿Cómo se implementa el anti-aliasing en GTK, Qt y otros toolkits?

Respuesta

5

Las instalaciones de representación de texto del protocolo X no son compatibles con el anti-aliasing y no se usan mucho en estos días. (Creo que la razón es que el protocolo de fuente X no tiene lugar para un canal alfa).

GTK y Qt renderizan texto en el cliente utilizando la biblioteca FreeType, obteniendo como resultado un mapa de bits con un canal alfa . Si el servidor X admite la extensión RENDER, el cliente puede enviar ese mapa de bits al servidor para que se mezcle en la pantalla mediante su canal alfa. Si el servidor X no es compatible con RENDER, el cliente tiene que recuperar la región de la pantalla donde se mostrará el texto (tomando una pequeña captura de pantalla, básicamente), hacer la mezcla alfa del lado del cliente y enviar el mapa de píxeles opaco resultante volver al servidor X que se mostrará.

+0

Marcado aceptado porque describe lo que realmente sucede en un nivel bajo. Me sorprende que el manejo de la fuente esté ahora del lado del cliente. –

+0

Parece que sería menos eficiente, pero por lo que he leído, en realidad no hay mucha diferencia. Sí, el cliente ahora tiene que enviar pixmaps de texto renderizado al servidor, pero ya no tiene que consultar al servidor todos los datos de métricas de fuentes que necesita al hacer el diseño del texto. También significa no más feos cadenas XLFD. :-) – Wyzard

4

FreeType. GTK + usa Pango, y Qt tiene su propia biblioteca de diseño de texto, pero ambos usan FreeType al final, y varias aplicaciones (por ejemplo XTerm con fuentes antialias habilitadas) usan FreeType a través de la biblioteca libXft de nivel más bajo que viene con Xorg.

6

FreeType está en el nivel incorrecto de la pila. Solo le permitirá dibujar glifos en ciertos lugares. Normalmente necesita al menos un mecanismo de selección de fuente (suministrado por Fontconfig) y un motor de configuración (suministrado por Pango o Qt).

Tanto Pango como Qt utilizan una versión bifurcada de un motor de diseño de tipo de letra abandonado, pero esto se está conciliando en el proyecto HarfBuzz.

Ver también esta publicación de Behdad Esfahbod: Pango vs HarfBuzz, y este documento más largo y más completo: State of Text Rendering.

+0

El artículo sobre el Estado del texto fue una lectura interesante. Gracias. –