next up previous contents
suivant: Les conteneurs avancés monter: Les widgets précédent: Le calendrier   Table des matières


Sous-sections

Pixmaps

Les pixmaps sont des structures de données qui contiennent des images. Ces images peuvent être utilisées en un nombre varié d'endroits, mais le plus souvent on les utilise comme icône ou curseur.

Un pixmap à deux couleurs s'appelle un bitmap, il existe des routines supplémentaires pour manipuler ce cas particulier.

Pour comprendre les pixmaps, il peut être utile de comprendre comment fonctionne le système X window. Sous X, les applications n'ont pas besoin de tourner sur l'ordinateur sur lequel vous utilisez celle-ci. En revanche, de nombreuses applications, appelées ``clientes'' , communiquent toutes avec un programme qui gèrent l'affichage, la souris et le clavier. Ce programme qui interagit directement avec l'utilisateur est appelé un ``serveur d'affichage `` ou ``serveur X''. Puisque les communications peuvent avoir lieu sur un réseau, il est important de conserver des informations à l'aide du serveur X. Les pixmaps, par exemple; sont stockés dans la mémoire du serveur X. Cela signifie, qu'une fois que les valeurs du pixmaps sont définies, vous n'avez pas à passer votre temps à les transmettre sur le réseau ; on envoie en revanche la commande `` afficher le pixmap numéro XYZ ici ''. Même si pour le moment vous n'utilisez pas X avec GTK, utiliser des constructions comme les pixmaps feront que vos programmes fonctionneront acceptablement sous X.

Pour utiliser des pixmaps en GTK, vous devrez d'abord construire une structure de Pixmap en utilisant des routines du niveau GDK. Les Pixmaps peuvent être créés à partir de données stockées en mémoire ou bien lus à partir d'un fichier. Nous parcourrons les deux méthodes pour créer nos pixmaps.

Cette routine sert à créer une pixmap de simple niveau ( 2 couleurs ) à partir de données stockées en mémoire. Chaque bit de la donnée indique si ce pixel est allumé ou non. La largeur et la hauteur sont en pixels. Le pointeur GdkWindow est sur la fenêtre courante puisque les ressources d'un pixmap n'ont de signification que dans le contexte de l'écran où il est affiché.

Celle-ci permet de créer un pixmap de profondeur donnée ( nombre de couleurs ) à partir de données bitmap spécifiées. $foreground et $background sont les couleurs de premier plan et d'arrière plan à utiliser.

Le format XPM est une représentation lisible d'un pixmap pour le système X Window. Il est largement utilisé et beaucoup d'utilitaires différents sont disponibles pour créer des fichiers images dans ce format. Le fichier spécifié par $filename doit contenir une image dans ce format et il sera chargé dans la structure du pixmap. Le $mask précise quels bits du pixmaps doivent être opaques. Tous les autres bits sont colorés en utilisant la couleur spécifiée par $transparent_color. Un exemple utilisant cette méthode est présent plus loin.

De petites images peuvent être incorporées à un programme en tant que donnée au format XPM. Un pixmap est créé en utilisant cette donnée, plutôt que de la lire dans un fichier. Voici un exemple :

Une fois que vous avez créé un pixmap, nous pouvons l'afficher dans un widget GTK. Nous devons créer un widget pixmap GTK pour contenir le pixmap GDK. On y arrive avec :

Les autres appels de widget pixmap sont :

set() est utilisé pour changer le pixmap dont le widget s'occupe actuellement. $val est le pixmap créé en utilisant GDK.

Un exemple

L'exemple suivant utilise un pixmap dans un bouton ( voir également l'exemple sur un bouton pixmap plus loin ).

Pixmap Program Example

Pour charger un fichier à partir d'un fichier appelé icon0.xpm placé dans le répertoire courant, on créerait le pixmap ainsi :

Les fenêtres taillées : la brouette

Le désavantage d'utiliser les pixmaps est que l'objet affiché est toujours rectangulaire, quelque soit l'image. Nous aimerions créer des bureaux et des applications avec des icônes ayant des formes plus naturelles. Par exemple, pour l'interface d'un jeu, nous aimerions avoir des boutons ronds à pousser. La manière de faire cela est d'utiliser les fenêtres taillées.

Une fenêtre taillée est simplement un pixmap dont les pixels du fond sont transparents. De cette manière, quand l'image du fond est une image multicolore, on ne l'efface pas avec des coins rectangulaires autour de notre icône. L'exemple suivant affiche une brouette sur le bureau.

Shaped Window (Wheelbarrow) Image

Pour rendre la brouette sensible, nous pourrions lui attacher le signal button press event. Les quelques lignes suivantes rende l'image sensible au bouton de la souris, quand on clique dessus, l'application se termine.

Exemple de bouton pixmap

Pixmap Button

Avant de faire fonctionner le programme précédent, vous devrez charger cette image et la placer dans le répertoire contenant le code ci-dessus. Si vous ne faîtes pas cela, $pixmap ne contiendra pas de pixmap et le programme ne fonctionnera pas normalement. Une fois que vous avez fait cela, le programme ressemble à ça :



La fonction créée xpm_label_box() peut être utilisée pour placer des xpm et des labels dans n'importe quel widget qui peut être un conteneur.

Notez dans xpm_label_box(), l'appel get_style(). Tous les widgets possèdent un ``style'', consistant en des couleurs de premier plan, de fond pour une variété de situations, une sélection de police, et d'autres données graphiques en rapport avec le widget. Ces valeurs de style sont définiées par défaut dans chacun des widgets, et sont requises par certains appels de fonction GDK comme $pixmap->create_from_xpm(), à qui ici on donne la couleur du fond ``normale''. Utilisant les fichiers de ressources, les données de style de widget peuvent être personnalisées.

Remarquez également l'appel de la fonction realize() après avoir déclaré la largeur des bords de la fenêtre. Cette fonction utilise GDK pour créer les fenêtres X reliées au widget. Cette fonction est appelée automatiquement quand on invoque la fonction show() pour un widget, et d'ailleurs on ne l'a pas utilisé dans les exemples précédents. Mais l'appel de la fonction create_from_xpm() requiert que son argument window fasse référence à une réelle fenêtre X, c'est pourquoi il est nécessaire de réaliser ce widget avant cet appel GDK.


next up previous contents
suivant: Les conteneurs avancés monter: Les widgets précédent: Le calendrier   Table des matières
LE BORGNE Patrice 2001-01-11