[OpenBSD]

Polices anti-aliasées et "TrueType" sous OpenBSD

Table des matières


Capture d'écran de xterm

xterm(1) avec polices aliasées et anti-aliasées comparées :
[xterm standard and anti-aliasé]

Capture d'écran de Konqueror

Toujours pas convaincu ? Jetons un coup d'oeil à ceci.

Le Navigateur Web Konqueror avec polices aliasées et anti-aliasées comparées :

[Konqueror standard and anti-aliasé]

Comment ça marche ?

Les calculs d'anti-aliasing sont effectués par FreeType, un moteur de polices libre inclut dans X.org. De plus, X.org contient une extension appelée Xft(3), l'extension X FreeType, qui interagit avec FreeType pour les opérations de rendu des polices. Xft interagit aussi avec une extension appelée Xrender, l'extension X Render, qui convertit les calculs effectués par FreeType en images numériques.

Que faut-il faire pour les obtenir ?

OpenBSD inclut X.org avec l'extension X Render activée. Pour pouvoir l'utiliser, votre serveur X (pilote de votre carte vidéo) doit la supporter. Certains pilotes n'ont pas encore été convertis au code 'fb' et ne peuvent donc pas utiliser l'extension Render, qui est nécessaire.

Vous pourrez vérifier votre carte vidéo comme suit :

$ /usr/X11R6/bin/xdpyinfo | grep RENDER RENDER
Si "RENDER" n'est pas spécifié dans sa liste des extensions, vous devrez attendre que quelqu'un implémente l'extension pour cette carte.

L'étape suivante consiste à trouver et installer quelques polices "TrueType". Une collection de polices populaires a été compilée et mise à disposition via l'arborescence des ports OpenBSD, sous /usr/ports/x11/msttcorefonts. Elles peuvent être installées comme suit :

# cd /usr/ports/x11/msttcorefonts # make # make install
A partir de maintenant, les instructions pour l'enregistrement de nouvelles polices avec X figurent dans une autre section.

Quelles applications peuvent les utiliser ?

N'importe quelle application qui s'interface avec la bibliothèque Xft peut afficher des polices anti-aliasées. Ceci inclut les applications QT 3.x (KDE 3.x) et GTK+2 (Gnome 2.x). Les programmes X standard possédant une telle interface sont xterm(1), xditview(1), xfd(1) et quelques autres.

xterm

xterm peut être invoqué avec les arguments qui permettent d'activer le rendu Xft des polices :
$ xterm -fa 'Andale Mono' -fs 14
Ces options sont :
Option Resource Meaning ---------------------------------------- -fa XTerm*faceName Font face name -fs XTerm*faceSize Font size
On peut aussi utiliser les ressources X. Par défaut, elles sont situées dans $HOME/.Xdefaults et sont contrôlées à l'aide du programme xrdb(1).

Certaines polices TrueType (telles que Arial, Georgia et Verdana par exemple) ne fonctionnent pas correctement avec xterm. En effet, xterm utilise la largeur maximale de tous les caractères faisant partie d'une police donnée pour afficher chaque caractère. Avec une police de type monospace, les largeurs de tous les caractères sont les mêmes, et tout fonctionne correctement. Avec une police proportionnelle, telle qu'une des polices précitées, xterm affiche chaque caractère dans une cellule de la taille de la largeur maximale du caractère ce qui a pour effet de créer de larges séparations illisibles entre les caractères.

Applications QT 3.x/KDE 3.x

Les applications utilisant QT 3.x, telle que n'importe quelle application KDE 3.x, y compris Konqueror, peuvent utiliser le rendu Xft une fois que la valeur suivante a été positionnée dans $HOME/.qt/qtrc sous la section [General].
useXft=true
Le programme GUI de configuration de Qt, qtconfig (ou qtconfig-mt si la version multi-threads de Qt est installée), peut positionner cette valeur à partir de la sélection Enable Anti-aliased Font Support figurant dans l'onglet Fonts.

Applications GTK+2

Les applications GTK+2 requièrent le positionnement de la variable d'environnement GDK_USE_XFT. GDK est le "backend" utilisé par GTK pour isoler les détails des opérations d'affichage. GDK déchargera les opérations de rendu de polices vers Xft lorsqu'il détectera la variable d'environnement.

La commande suivante aura pour effet de lancer le programme de messagerie instantanée Gaim à base de GTK+2 disponible sous /usr/ports/net/gaim:

$ env GDK_USE_XFT=1 gaim

Comment puis-je ajouter des polices manuellement ?

L'ajout d'une police "à X" nécessite l'enregistrement de la police au niveau du serveur X et au niveau de fontconfig(3), étant donné qu'ils assurent un suivi des polices de manière séparée. En fait, certains types de polices sont uniquement reconnus par le serveur X, et d'autres uniquement par fontconfig. Les polices TrueType sont reconnues par les deux.

Le serveur X

Les chemins des polices (i.e. des répertoires contenant les polices) sont gérés soit directement par /etc/X11/xorg.conf soit par un programme séparé tel que xfs(1). Pour ajouter une police, ajoutez le répertoire dans lequel elle se trouve à /etc/X11/xorg.conf :
Section "Files" FontPath "/usr/X11R6/lib/X11/fonts/TTF/" FontPath "/usr/local/lib/X11/fonts/myfonts/" ... EndSection
Sinon, si vous utilisez xfs, ajoutez le répertoire à /etc/X11/fs/config :
catalogue = /usr/X11R6/lib/X11/fonts/TTF/, /usr/local/lib/X11/fonts/myfonts/
Ensuite, le serveur X doit être capable de prendre en compte la police à travers l'index des polices dans ce répertoire, à savoir le fichier fonts.dir. Traditionnellement, toutes les tailles disponibles pour une police sont listées au niveau de l'index des polices, généré par la commande mkfontdir(1). Mais étant donné que les polices TrueType peuvent être calibrées à n'importe quelle échelle, la spécification de chaque taille possible n'est pas requise. Au lieu de cela, les polices calibrables sont listées dans le fichier fonts.scale, reconnu par mkfontdir lors de la génération des indexes fonts.dir.

Pour créer un fichier fonts.scale, vous pouvez utiliser le programme mkfontscale(1) :

# cd /usr/local/lib/X11/fonts/myfonts # /usr/X11R6/bin/mkfontscale # /usr/X11R6/bin/mkfontdir
Enfin, pour appliquer les modifications à la session X en cours, au lieu de redémarrer X, la commande suivante peut être utilisée pour examiner à nouveau les chemins de polices enregistrés au niveau de XFree86 et prendre en compte les modifications s'il y a lieu :
$ xset fp rehash
Ou, si un nouveau chemin de polices a été ajouté :
$ xset +fp /usr/local/lib/X11/fonts/myfonts
Si vous utilisez xfs, utilisez plutôt la commande suivante :
# pkill -HUP xfs

fontconfig

L'autre composant de X auprès duquel une nouvelle police doit être enregistrée est fontconfig, utilisé par Xft pour trouver les polices. fontconfig utilise le fichier /etc/fonts/fonts.conf pour sa configuration globale mais étant donné que ce fichier est remplacé lors des mises à jour de X, /etc/fonts/local.conf doit être utilisé pour gérer les changements globaux.

Ajoutez le répertoire contenant la police au fichier de configuration :

<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "/etc/fonts/fonts.dtd"> <fontconfig> <dir>/usr/local/lib/X11/fonts/myfonts</dir> </fontconfig>
Ou, si uniquement un utilisateur veut ajouter des polices à ses sessions, les lignes ci-dessus peuvent être placées dans le fichier $HOME/.fonts.conf.

Notez que fontconfig examinera de manière récursive tous les sous-répertoires disponibles dans les répertoires de polices spécifiés alors que le serveur X ne le fera pas.

Une fois le répertoire ajouté, le cache de polices pour le répertoire doit être regénéré. La commande suivante demande à fontconfig de regénérer les caches de polices pour tous les répertoires spécifiés dans sa configuration :

# /usr/X11R6/bin/fc-cache -v
Ces modifications prendront effet dans la session X en cours. X ne nécessitera donc pas de redémarrage. En revanche, les applications en cours d'exécution doivent être redémarrées.
[back] www@openbsd.org
$OpenBSD: truetype.html,v 1.19 2007/02/18 23:01:09 saad Exp $