/* plot1.c * affichage de fonction * version simple */ #define LARGEUR 400 /* dimensions de la fenetre */ #define HAUTEUR 300 #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> GC gc; Display *display; int screen; Window win, root; unsigned long white_pixel, black_pixel; main() { if ((display = XOpenDisplay ("")) == NULL) { fprintf (stderr, "Can't open Display\n"); exit (1); } gc = DefaultGC (display, screen); screen = DefaultScreen (display); root = RootWindow (display, screen); white_pixel = WhitePixel (display, screen); black_pixel = BlackPixel (display, screen); XSetBackground (display, gc, white_pixel); XSetForeground (display, gc, black_pixel); win = XCreateSimpleWindow (display, root, 0, 0, LARGEUR, HAUTEUR, 5, black_pixel, white_pixel); XSelectInput (display, win, ExposureMask); XStoreName (display, win, "je dessine"); /* titre de la fenetre */ XMapWindow (display, win); for (;;) { XEvent ev; XNextEvent (display, &ev); switch (ev.type) { case Expose : XClearWindow(display, win); /* dessiner dans la fenêtre */ { int x,y; for (x=0 ; x<100 ; x++) { y=2*x; XDrawPoint(display, win, gc, x, y); } } /* fin dessiner */ break; default : break; } } }
/* dessin1.c * dessin dans une fenetre * version simple */ #define LARGEUR 400 /* dimensions de la fenetre */ #define HAUTEUR 300 #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> GC gc; Display *display; int screen; Window win, root; unsigned long white_pixel, black_pixel; main() { if ((display = XOpenDisplay ("")) == NULL) { fprintf (stderr, "Can't open Display\n"); exit (1); } gc = DefaultGC (display, screen); screen = DefaultScreen (display); root = RootWindow (display, screen); white_pixel = WhitePixel (display, screen); black_pixel = BlackPixel (display, screen); XSetBackground (display, gc, white_pixel); XSetForeground (display, gc, black_pixel); win = XCreateSimpleWindow (display, root, 0, 0, LARGEUR, HAUTEUR, 5, black_pixel, white_pixel); XSelectInput (display, win, ExposureMask); XStoreName (display, win, "je dessine"); /* titre de la fenetre */ XMapWindow (display, win); for (;;) { XEvent ev; XNextEvent (display, &ev); switch (ev.type) { case Expose : XClearWindow(display, win); /* dessiner dans la fenêtre */ { XDrawPoint(display, win, gc, 5, 5); XDrawString (display, win, gc, 10, 10, "texte !", 7); XDrawRectangle (display, win, gc, 40,40, 20, 10); XFillRectangle (display, win, gc, 60,60, 20, 10); } /* fin dessiner */ break; default : break; } } }
1. établissement d'une connexion à un serveur
X,
2. initialisation/création de la fenêtres et autres
ressources,
3. boucle d'attente et traitement de l'évènement
"expose"
GC : graphic context, contexte graphique, "trousse pour dessiner,
écrire, ..."
Display : canal d'affichage
screen : numéro d'écran
Window : type fenêtre
root : fenêtre racine
pixel : blanc/noir (sans se soucier du mode graphique)
win = XCreateSimpleWindow (display, root,0, 0, LARGEUR, HAUTEUR,
5, black_pixel, white_pixel);
crée une nouvelle fenêtre win(fille de root), mais
ne l'affiche pas !
La nouvelle fenêtre aura une largeur de LARGEUR points et
une hauteur de HAUTEUR points, sa couleur de fond sera white_pixel.
Le coin haut-gauche de la fenêtre win a pour coordonnées
(0,0) et un point en (x,y) est à x pixels (points) du bord
gauche et y pixels du bord supérieur.
Utilisez la technique du "double buffering" avec un pixmap : plot2.c ou dessin2.c
Si vous voulez en savoir plus .....
didier Ferment
didier.Ferment@u-picardie.fr
dernière modification le 29 Février 2000