Travaux Pratiques Interfaces Graphiques
Master 1
TP2, introduction à la
programmation X
But du TP
A travers deux programmes de manipulation de fenêtres, ce TP vise
à faire un survol des possibilités du langage
Xlib. L'objectif est de comprendre la structure d'un programme X et le
fonctionnement des requêtes liées à
la gestion d'évènements.
Un programme Xlib réalise en général les
opérations suivantes :
- connexion au serveur X, XOpenDisplay,
- récupère les informations relatives à
l'écran physique,
- crée au moins une fenêtre XCreateSimpleWindow,
- sélectionne les types d'évènements à
écouter XSelectInput,
- affiche la fenêtre XMapWindow,
- crée une boucle d'écoute et de traitement des
évènements.
Tous les clients X sont construits selon ces principes. On pourra
étudier l'exemple suivant du cours window.c,
qui ouvre une fenêtre affichant un message lors d'un clic dans la
fenêtre. Ainsi que le programme dessine.c
qui ouvre une fenêtre affichant des figures
géométriques simples.
Les programmes suivants seront écrits en utilisant ces deux
premiers programmes ainsi que la documentation de
référence de Xlib qui se trouve ici.
Pour la compilation penser à faire l'édition de liens
avec l'option -lX11 :
%gcc -o window window.c -lX11
Une pile de fenêtres
Le programme fen1.c affiche une fenêtre principale et un ensemble
de fenêtres-filles. La position des fenêtres-filles les
unes par rapport aux autres est donnée par l'ordre de la pile
des fenêtres-filles. Par exemple la position de trois
fenêtres-filles A, B et C dans une fenêtre racine,
où A se trouve au dernier plan et C au premier plan est
décrite par la pile (A, B, C).
1) Dans un premier temps créer et ouvrir une fenêtre
principale fenetre d'arrière-plan blanc. Créer un tableau
de fenêtres-filles sousfenetre[i], disposées en
cascade sur la fenêtre principale, i.e., se chevauchant deux
à deux. Afficher les fenêtres-filles.
2) Associer aux boutons de la souris les actions suivantes :
- un clic sur le bouton droit de la souris met au premier plan la
fenêtre-fille qui se trouve sous le pointeur,
- un clic sur le bouton gauche de la souris met au dernier plan
la fenêtre-fille qui se trouve sous le pointeur.
3) Associer les actions suivantes aux touches du clavier :
- la touche 'b' du clavier fait défiler vers le bas la pile
des
sous-fenêtres,
- la touche 'h' du clavier fait défiler vers le haut la pile
des sous-fenêtres,
- les touches '+' et '-' augmente et réduise respectivement
les fenêtres d'une
taille de 5 pixels,
- la touche 'x' du clavier provoque l'arrêt du programme.
Indications :
- Pour la position des fenêtres-filles utiliser les
requêtes XLowerWindow et XRaiseWindow,
- Utiliser les requêtes XCirculateSubwindowsUp et
XCirculateSubwindowsDown pour le défilement dans la pile de
fenêtres.
- La fonction XLookupString traduit un évènement du
clavier.
- Pour la boucle de traitement des évènements s'inspirer
de l'exemple window.c
Coloration et évènements
1) Créer et afficher une fenêtre principale, contenant une
grille de fenêtres-filles de couleur de fond blanc et de couleur
de bordure noire.
2) La fenêtre principale contient une zone de texte "Position de
la
sous-fenêtre " affichant les coordonnées (x , y) de la
position de la
fenêtre de la grille sous laquelle se trouve le pointeur de la
souris.
3) Lorsque le pointeur de la souris passe au-dessus d'une fenêtre
de la grille, la couleur de fond de la fenêtre devient noir.
Lorsque le pointeur quitte la zone de la fenêtre, la
fenêtre reprend sa couleur d'origine.
4) [Pour ceux qui ont déjà fini ] Adapter le programme
precédent
afin de réaliser un jeu de Taquin. Dans une grille 4x4
composée de fenêtres-filles, on représente la case
vide par une fenêtre de fond blanc et les cases pleines par des
fenêtres de fond noir. Le déplacement des cases pleines
dans la grille est simulé par les recolorations induites par les
mouvements du pointeur.