mercredi 6 juin 2018

Chapitre 33 : écrire et dessiner dans une fenêtre X11


Nous repartons du programme précédent pour le compléter afin de tracer une ligne et un rectangle et d’écrire une courte phrase. En effet, la structure d’un programme avec X11 va être souvent être la même : ouverture d’une connexion, récupération d’informations, création de la fenêtre, affichage, autorisation des saisies et gestion des évènements.
Mais nous utilisons une autre fonction pour changer le nom de la fenêtre : XSetStandardProperties. Cette fonction permet aussi d’associer une icône à notre fenêtre mais nous verrons cela plus tard.
 Et pour dessiner nous devons créer un contexte graphique associé à la fenêtre par la fonction XCreateGC. C’est grâce à ce contexte que nous pourrons modifier la police ou les couleurs des entités à dessiner. Ici nous nous contentons de le créer avec les valeurs par défaut. Remarque : dans la structure screen, il existe un pointeur vers un contexte graphique par défaut. Nous pourrions l’utiliser plutôt que de créer un contexte par nous-mêmes.
Avant d’afficher la fenêtre et pour varier les fonctions, nous modifions le fond de la fenêtre avec un gris léger par la fonction XSetWindowBackground.
Après l’affichage (très important !!!) nous pouvons écrire du texte en utilisant la fonction XDrawString et en lui passant les paramètres suivant, le Display, la fenêtre, le contexte graphique, la position X du début du texte, la position Y du début du texte, l’adresse de la chaine de caractères à afficher et sa longueur. Rien de bien compliqué sauf à penser de respecter la norme d’appel des fonctions.
Ensuite nous dessinons une ligne avec la fonction XDrawLine et en lui passant les paramètres suivant, le Display, la fenêtre, le contexte graphique, les positions X et Y du début de ligne, puis les positions X et Y de la fin de la ligne.
Et enfin nous traçons un rectangle avec la fonction XFillRectangle avec pratiquement les mêmes paramètres.
Le reste du programme est inchangé sauf que l’on ajoute à la fin, la libération des ressources du contexte graphique par la fonction XFreeGC
Dans la documentation X11, vous trouverez les autres fonctions pour dessiner des polygones, des arcs de cercles etc suivant le même principe.
Lors de l’exécution, vous remarquerez que si vous changer les dimensions de la fenêtre avec la souris, tous nos dessins s’effacent !! En effet, par la suite, il nous faudra gérer l’impact de ce redimensionnement sur nos dessins.

Aucun commentaire:

Enregistrer un commentaire