2009-12-11 10 views
5

J'expérimente Xlib pour mieux comprendre le fonctionnement des programmes graphiques Linux. J'ai écrit un programme simple qui affiche "Hello, world" dans une fenêtre, mais il semble plutôt anachronique puisque le texte n'est pas anti-aliasé.Texte anti-aliasé dans X11

Quelle est la meilleure façon d'afficher du texte anti-aliasé dans X11? Comment l'anti-aliasing est-il implémenté dans GTK, Qt et d'autres toolkits?

Répondre

5

Les fonctions de rendu de texte du protocole X ne prennent pas en charge l'anti-aliasing et ne sont pas beaucoup utilisées ces jours-ci. (Je pense que la raison en est que le protocole de police X n'a ​​pas de place pour un canal alpha.)

GTK et Qt rendent le texte dans le client en utilisant la bibliothèque FreeType, obtenant un pixmap avec un canal alpha comme résultat . Si le serveur X prend en charge l'extension RENDER, le client peut envoyer ce pixmap au serveur pour le fusionner sur l'affichage en utilisant son canal alpha. Si le serveur X ne supporte pas RENDER, le client doit récupérer la région de l'écran où le texte doit être affiché (en prenant une petite capture d'écran, fondamentalement), faire l'alpha blending côté client, et envoyer le pixmap opaque résultant retour au serveur X à afficher.

+0

Marquage accepté car il décrit ce qui se passe réellement à un niveau bas. Cela me surprend que le traitement des polices soit maintenant du côté du client. –

+0

Il semble que ce serait moins efficace, mais d'après ce que j'ai lu, il n'y a pas vraiment de différence. Oui, le client doit maintenant envoyer des pixmaps de texte rendus au serveur, mais il n'a plus à interroger le serveur pour toutes les données de métriques de polices dont il a besoin lors de la mise en forme du texte. Cela signifie également pas plus de chaînes XLFD plus laides. :-) – Wyzard

4

FreeType. GTK + utilise Pango, et Qt a sa propre bibliothèque de mise en page, mais tous deux utilisent FreeType à la fin, et plusieurs applications (par exemple XTerm avec des polices antialiasées activées) utilisent FreeType via la bibliothèque libXft de bas niveau fournie avec Xorg.

6

FreeType est au mauvais niveau de la pile. Cela vous permettra seulement de dessiner des glyphes à certains endroits. Généralement, vous avez besoin d'au moins un mécanisme de sélection de police (fourni par Fontconfig) et un moteur de mise en forme (fourni par Pango ou Qt).

Pango et Qt utilisent tous les deux une version en fourche d'un moteur de disposition FreeType abandonné, mais ceci est réconcilié dans le projet HarfBuzz. Voir aussi ce billet par Behdad Esfahbod: Pango vs HarfBuzz, et ce document plus long et plus complet: State of Text Rendering.

+0

L'article State of Text Rendering était une lecture intéressante. Je vous remercie. –