• Aucun résultat trouvé

C. Recanati Option C avancé, avec X-Window Licence 3, 2007-2008 Feuille n°4 : Pixmap et contexte graphique

N/A
N/A
Protected

Academic year: 2022

Partager "C. Recanati Option C avancé, avec X-Window Licence 3, 2007-2008 Feuille n°4 : Pixmap et contexte graphique"

Copied!
2
0
0

Texte intégral

(1)

C. Recanati

Option C avancé, avec X-Window Licence 3, 2007-2008

Feuille n°4 : Pixmap et contexte graphique Exercice 1 (programme copyScrollRoot.c)

1) Créez un Pixmap suffisamment grand pour pouvoir y copier le contenu de la racine (cf. XCreatePixmap).

Indication : les dimensions de la racine sont fournies par des macros fonctions du Display (cf. début poly).

2) Copier la fenêtre racine dans le Pixmap en utilisant la fonction XCopyArea.

Indications : on a besoin d’un argument gc de type GC (graphic context). On dispose d’un gc par défaut dans les macros du Display, et on peut aussi un créer un nouveau avec XCreateGC.

Mais dans les deux cas, il faut prendre garde à ce que ses attributs soient conformes à nos besoins. En particulier, pour que la copie de la racine se fasse intégralement, il faut que l’attribut

subwindow_mode du gc soit à True (cela permet la copie des dessins contenus dans les sous-fenêtres de la racine !).

3) Créer une fenêtre simple que vous afficherez à l’écran. Sur un clic de souris dans cette fenêtre (sélectionner l’événement requis avant l’affichage), on recopiera le Pixmap précédent dans la fenêtre

(toujours grâce à XCopyArea).

4) Sélectionnez aussi les mouvements de souris (bouton enfoncé), et faites défiler le contenu du Pixmap dans la fenêtre quand on bouge la souris en maintenant le bouton enfoncé.

Indications : sélectionnez les événements de mouvements avec ButtonMotionMask. Dans la boucle des événements, recopier le Pixmap dans la fenêtre (avec XCopyArea) sur réception d’un ButtonPress, et faites la même chose avec un certain décalage (fonction de la position de la souris), sur la réception des

événements de mouvements (MotionNotify).

Exercice 2 (programme readBitmap.c)

(2)

On avait vu dans l’exercice 3 du TP 1 comment créer un Pixmap à partir de données au format bitmap incluses dans le programme, en utilisant la fonction XCreatePixmapFromBitmapData.

Une deuxième méthode permet de créer un Pixmap à partir d’un fichier au format bitmap, sans avoir à l’inclure en dur dans le programme.

La fonction XReadBitmapFile dont on dispose pour lire des données au format bitmap crée un Pixmap de profondeur 1 (un seul plan) ; c’est un pixmap qui n’est pas acceptable comme fond pour une fenêtre dont la profondeur est celle de l’écran. Mais on peut créer un Pixmap de profondeur correcte à partir d’un tel

pixmap, en utilisant la fonction XCopyPlane, qui permet de copier un plan de pixmap dans un autre.

Déclarez deux variables de type Pixmap : pixmap et bitmap.

1) Récupérez le Pixmap bitmap correspondant aux données au format bitmap du fichier avec XReadBitmapFile.

2) Créez le Pixmap pixmap qui servira de fond de fenêtre avec la fonction XCreatePixmap (avec les dimensions récupérées par la fonction précédente et la profondeur par défaut).

3) Copiez bitmap dans pixmap avec XCopyPlane. La copie

s’effectue selon un 1 plan et deux couleurs permettant d’interpréter les bits à 0 comme d’une couleur d’arrière-plan, et ceux à 1 comme d’une couleur avant-plan.

4) Affectez ensuite le Pixmap obtenu comme fond d’une fenêtre que vous afficherez pour tester le programme.

Références

Documents relatifs

Sur la dernière rangée, les boutons occupent chacun une cellule et remplissent uniformément l’espace en largeur en cas de changement de taille (leur affecter un même poids,

création interactive d’un nouvel élément, puis son ajout au modèle à la fin de l’interaction de l’utilisateur avec la souris.. Cette « vue » (ici constituée d’un

On écrira une procédure privée initializeSelectionMode() qui initialisera l’item sélectionné de la comboBox conformément au mode de sélection initial de la liste, et on

de même taille ainsi que le GridBagLayout qui servira de gestionnaire.. d’affichage au dernier argument de type conteneur destiné à contenir les labels et les

- croix : les points seront dessinés sous forme de croix ; - poly : le polygone joignant les points sera dessiné ; 1) Ecrire une interface définissant les constantes pour le mode

1) Créez une fenêtre avec XCreateWindow, en position (0,0) avec un bord d’épaisseur d’une certaine épaisseur (eg. Affichez-la sur l’écran. Que constatez-vous ?. 2) Mettre

enfoncement d’un bouton souris, et le faire défiler dans la fenêtre quand l’utilisateur déplacera la souris avec un bouton enfoncé (sélection des événements de mouvements

Pour cela, créer une fenêtre qui sélectionne ce type d’événement ; imprimer à la console pour chaque.. événement de type Expose reçu le champ count, la taille et la position