TD X-Window numero 3 : la couleur
Avant de commencer:
-
Créez un directory xlib/td3 sous votre $HOME (ou ailleurs) et recopierz
dedans tous les fichiers qui se trouvent dans le répertoire ~buffa/cours/minfo/xlib/td3.
Vous pouvez tester le binaire de la correction du programme que vous devez
réaliser.
-
Exécuter le programme td3, tester les touches 'p' et 'a'. Modifier
la taille de la fenêtre, cliquer dans la fenêtre, cliquez et
dessinez avec le bouton 2 de la souris.
But du TD:
Nous allons écrire ensemble un petit programme graphique manipulant
les tables de couleurs (publiques et privées) et les affichant à
la manière du programme xcmap. Il permet en outre
d'afficher les valeurs RGB des couleurs affichées (bouton 1 de la
souris), et dessiner avec la dernière couleur cliquée (bouton
2).
Programme td3, affichage de la colormap standard
A Faire
-
Afficher la colormap standard, faites en sorte que la taille des rectangles
de couleur se réajuste si on modifie la taille de la fenêtre.
Pour obtenir la position et la taille d'une fenêtre : XGetWindowAttributes(),
ou bien utiliser la fonction pécialisée XGetGeometry().
-
Dans un second temps, en appuyant sur la touche 'p', vous allez créer
une colormap privée contenant 255 niveaux de gris (valeurs RGB allant
de 0,0,0 à 255,255,255) et l'associer à la fenêtre.
Vous essaierez de coder un mécanisme permettant de passer de la
colormap privée à la colormap standard et vice-versa. Un
appui sur la touche 'p' passe en colormap privée, un appui sur 'a'
restaure et affiche la colormap par défaut. Attention, si on appuie
dix fois sur 'p' ou sur 'a', ne crééz pas 10 colormaps!!!!
Pour affecter une colormap à une fenêtre, utiliser XSetWindowAttributes()
ou la fonction spécialisée XInstallColormap().
Programme td3, affichage d'une colormap privée
-
En utilisant XQueryColor(), afficher en blanc dans un rectangle noir situé
en bas à gauche de la fenêtre, les valeurs R, G et B de la
couleur cliquée avec le bouton 1 de la souris.
-
Avec le bouton 2 on dessinera des rectangles élastiques de la dernière
couleur séléctionnée.
Conseils
Pour écrire ce petit programme je suis parti du td1 et j'ai rajouté
3 fonctions :
-
affiche_colormap() qui récupère les valeurs RGB des colorcells
de la colormap courante et les affiche dans la fenêtre.
-
installe_colormap_defaut() qui mémorise la colormap par défaut
si ce n'est pas déjà fait, et la rend active pour la fenêtre.
-
installe_colormap_privee() qui crée une colormap privée si
ce n'est pas déjà fait et la rend active pour la fenêtre.
Copyright Michel Buffa
1996