Introduction à Perl/Tk

Interfaces graphiques avec Perl


précédentsommairesuivant

XIX. Fontes

Cette annexe décrit les nouvelles méthodes de Tk8.0 permettant de créer et de gérer les fontes. Avec Tk4, on ne pouvait passer qu'une seule spécification de fonte à l'option -font ; cela reste possible avec Tk8.0, mais il existe également des méthodes pour créer ses propres fontes et les utiliser. Je traiterai d'abord de la façon la plus simple d'utiliser une fonte, qui fonctionne avec les deux versions de Tk, puis nous étudierons les méthodes plus complexes de Tk8.0.

XIX-A. Description d'une fonte

Lorsqu'un widget utilise l'option -font, il faut lui passer une chaîne de caractères représentant la fonte concernée. Il existe plusieurs façons de spécifier une telle chaîne :

  • on indique le nom de la fonte à l'aide de la méthode fontCreate (décrite plus loin dans ce chapitre, dans la section Méthodes pour les fontes) ;
  • on utilise une chaîne décrivant la fonte, suivant un format préétabli (voir l'annexe B, Différences entre systèmes d'exploitation) ; "Times 12 Normal", par exemple ;
  • on utilise le nom d'une fonte pouvant être interprété par le dispositif d'affichage graphique (normalement, un système Unix utilisant X Window). Ces chaînes contiennent habituellement des astérisques et sont très difficiles à comprendre.

Pour spécifier une fonte à l'aide d'une chaîne de caractères, il faut d'abord connaître celles qui sont disponibles sur votre système.

XIX-A-1. Déterminer les fontes disponibles

Avec Unix, les fontes sont désignées à l'aide d'une syntaxe longue et n'en finissant pas. Cette syntaxe utilise de nombreux astérisques représentant la famille, la taille, le type, etc. Sous le système X Window, on obtient la liste des fontes Unix en exécutant la commande suivante :

 
Sélectionnez
xlsfonts > fic_fontes

Le fichier fic_fontes contiendra alors une énorme liste des fontes dont vous disposez sur votre système. Soyez prudent lorsque vous utilisez des fontes décrites dans cette liste : si vous souhaitez que votre application puisse s'exécuter sur plusieurs systèmes différents, n'oubliez pas qu'une fonte disponible sur l'un ne l'est peut-être pas partout.

Avec Windows, les fontes disponibles seront obtenues par un autre moyen : cliquez sur le menu « Démarrer » et choisissez « Paramètres », puis « Panneau de configuration ». Lorsque ce panneau s'est affiché, cliquez deux fois sur l'icône « Fontes » et une fenêtre identique à celle de la figure C.1 apparaîtra.

Image non disponible
Figure C.1 : Fontes disponibles sur un système Windows NT

Mon système dispose de la plupart des fontes standards, plus certaines que j'ai téléchargées sur l'Internet : augie et Bard, par exemple. Si l'on souhaite utiliser ces fontes, on doit savoir comment les spécifier : si l'on clique deux fois sur un nom, une autre fenêtre apparaît et affiche une description détaillée de la fonte (un exemple est donné avec la figure C.2).

Les informations affichées comprennent la place qu'occupe la fonte sur le disque dur (64 Ko, ici), sa version et son nom. Les tailles disponibles sont également indiquées : la fonte Arial va de 12 à 72 points. La chaîne utilisée avec l'option -font d'un widget (un bouton, par exemple) devra contenir le nom de la fonte (Arial), sa taille et son type (normal, bold ou italic). À l'aide de ces trois informations, on construit une chaîne de description de fonte : "Arial 24 normal"(47) , et c'est tout ce qu'il y a à faire. Pour créer un bouton utilisant cette fonte, il suffit d'utiliser l'option -font :

 
Sélectionnez
$mw->Button(-text => "Quitter", -command => sub { exit },
            -font => "Arial 24 normal")->pack();

La figure C.3 montre un bouton utilisant la fonte par défaut, et un autre utilisant une fonte plus grande.

Image non disponible
Figure C.2 : Détails de la fonte Arial

Si le nom de la fonte contient des espaces, comme avec « Times New Roman », la chaîne se construit de la même manière :

 
Sélectionnez
-font => "Times New Roman 12 normal"

Lorsque vous utiliserez ce type de spécification, l'erreur suivante apparaîtra éventuellement sur la console :

 
Sélectionnez
SplitString 'Times New Roman 12 normal' at script line 7

Vous pouvez négliger ces erreurs et, pour autant que je sache, il n'existe pas de moyen commode de s'en débarrasser. Heureusement, les dernières versions du module Tk géreront mieux ce problème (les premiers tests avec Tk8.0 montrent que cette erreur n'apparaît plus).

Je ne vous conseille pas de modifier la fonte du texte des widgets standards, car vous devrez alors vous soucier de la disponibilité de celle-ci. Le widget texte est le seul endroit dont vous pouvez avoir absolument besoin de modifier la fonte, et uniquement si vous souhaitez vraiment formater le texte.

Encore une chose : il existe un module Tk::Fonts, mais il ne fonctionne pas correctement avec Windows (95/98 ou NT). Si vous utilisez X Window, essayez ce module : il dispose de caractéristiques intéressantes.

XIX-A-2. Méthodes pour les fontes

Les méthodes suivantes n'existent que dans la dernière version de Perl/Tk, qui contient Tk8.0.

XIX-A-2-a. Création

La méthode fontCreate crée une nouvelle fonte :

 
Sélectionnez
$nom = $widget->fontCreate();
$nom = $widget->fontCreate(nom_fonte);

On indique un nom de fonte en paramètre, sinon la méthode renverra un nom de la forme « fontX »X est un nombre. Cette méthode reconnaît certaines options pour la fonte :

 
Sélectionnez
$nom = $widget->fontCreate(-size => 12);
$nom = $widget->fontCreate(nom_fonte, -size => 12);

Les options utilisables lors de la création d'une fonte sont :

-family => nom

  • Le nom de famille peut être "courier", "times", ou "helvetica". Si vous utilisez l'un de ces noms, la famille la plus proche disponible sur votre système sera utilisée. On peut également préciser le nom d'une fonte spécifique à sa machine ("Moon Runes", par exemple), mais elle risque de ne pas s'afficher sur d'autres systèmes.

-size => montant

  • Le montant spécifié précise la taille de la fonte : s'il est positif, cette taille sera exprimée en points ; s'il est négatif, la taille sera absolue et exprimée en pixels.

-weight => "normal" | "bold"

  • Cette option précise l'épaisseur (la « graisse ») de la fonte.

-slant => "roman" | "italic"

  • L'inclinaison de la fonte décrit la façon dont elle penche d'un côté. La valeur par défaut, "roman", signifie que la fonte est droite. "italic" bascule légèrement les caractères vers la droite.

-underline => 0 | 1

  • Si l'on souhaite souligner les caractères, il suffit de donner la valeur 1 à cette option.

-overstrike => 0 | 1

  • Si cette option vaut 1, une ligne barrera le texte.

XIX-A-2-b. Configuration

Les options associées à une fonte sont modifiables via la méthode fontConfigure, qui fonctionne exactement comme la méthode configure des widgets :

 
Sélectionnez
%valeurs_options = $widget->fontConfigure(nom_fonte);
$valeur = $widget->fontConfigure(nom_fonte, -size);
$widget->fontConfigure(nom_fonte, -size => 24); # Modifie la taille

Toutes les options de fontCreate sont utilisables avec fontConfigure.

XIX-A-2-c. Informations sur la fonte réelle

Si une taille de fonte demandée n'est pas disponible sur le système, celui-ci la remplace par une autre, voire par une autre fonte. Pour savoir quelle est la fonte réellement affichée, on utilise la méthode fontActual. Avec simplement le nom d'une fonte en paramètre, elle renvoie la liste de toutes les options et de leurs valeurs respectives :

 
Sélectionnez
%valeurs = $widget->fontActual(nom_fonte);

Pour obtenir la valeur réelle d'une seule option :

 
Sélectionnez
$valeur = $widget->fontActual(nom_fonte, -size);

Là encore, toutes les options de fontCreate sont utilisables avec cette méthode.

XIX-A-2-d. Suppression

La méthode fontDelete supprime une ou plusieurs fontes :

 
Sélectionnez
$widget->fontDelete(nom_fonte);
$widget->fontDelete(fonte1, fonte2);

Si la fonte est utilisée par un widget, elle ne sera pas réellement supprimée tant que le widget l'utilise. Si l'on recrée avec fontCreate une fonte portant le même nom, les widgets utilisant la fonte de départ utiliseront les informations de cette nouvelle fonte.

XIX-A-2-e. Taille du texte

La méthode fontMeasure vous permet de connaître la taille d'une chaîne de texte utilisant une fonte donnée :

 
Sélectionnez
$pixels = $widget->fontMeasure(nom_fonte, chaine_texte);

La valeur renvoyée n'est qu'une estimation, car des caractères comme "\t" ou "\n" ne sont pas traduits avant le calcul de cette taille.

XIX-A-2-f. Détails d'une fonte

Les détails d'une fonte sont sa partie haute, sa partie basse, l'interligne et si elle est proportionnelle. La méthode fontMetrics vous permet d'obtenir ces informations pour une fonte donnée. Si on ne lui passe en paramètre qu'un seul nom de fonte, cette méthode renverra tous les détails de celle-ci :

 
Sélectionnez
%valeurs = $widget->fontMetrics(nom_fonte);

En passant un détail comme option de cette méthode, on obtient sa valeur :

 
Sélectionnez
$valeur = $widget->fontMetrics(nom_fonte, -ascent);

On ne peut pas modifier les détails d'une fonte, car ils sont calculés au moment de sa création.

Les options permises pour indiquer les détails sont les suivantes :

-ascent

  • Mesure la partie de la fonte située au-dessus de la ligne de référence. La valeur renvoyée est exprimée en pixels.

-descent

  • Mesure la partie de la fonte située sous la ligne de référence. La valeur renvoyée est exprimée en pixels.

-linespace

  • Mesure la distance entre deux lignes de texte utilisant la même fonte. La valeur renvoyée est exprimée en pixels.

-fixed

  • Renvoie 1 si la fonte est d'une largeur fixe (tous les caractères ont la même largeur, comme dans Courier). Renvoie 0 si la fonte est proportionnelle (chaque caractère a une largeur dépendant de sa silhouette : la lettre "I" occupera moins de place que "M").

XIX-A-2-g. Familles et noms

La méthode fontFamilies permet de connaître toutes les familles de fontes existant sur le dispositif d'affichage utilisé par un widget donné :

 
Sélectionnez
@familles = $widget->fontFamilies();

La méthode fontNames renvoie les noms de toutes les fontes définies :

 
Sélectionnez
@noms = $widget->fontNames();

précédentsommairesuivant
Le nom et le type d'une fonte peuvent également apparaître entre accolades : "{Arial} 24 {normal}", par exemple. Ces accolades sont facultatives, sauf si ces noms contiennent des espaces.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Nancy Walsh et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2018 Developpez.com.