/* 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