Xlib: Les Contextes Graphiques (GC)

Xlib: Les Contextes Graphiques (GC)


Qu'est-ce qu'un Contexte Graphique (GC) : Un Contexte Graphique est un ensemble de paramètres factorisant tous les modes des fonctions graphiques de bas niveau.

Le GC est un des paramètres obligatoire de toutes les fonctions de dessin de la Xlib.

Utilisation : créer un GC par type d'opération graphique, par exemple un pour chaque fonte de caractères utilisée. On se servira des différents GCs selon que l'on désire écrire les textes à l'écran en italique, en gras, en gros, en petit, etc....

Pour créer un GC il faut utiliser la fonction XCreateGC() qui accepte 4 paramètres :

La structure XGCValues contient des éléments tels que foreground, background, line_width, line_style que l'on peut initialiser.

Le masque est initialisé en utilisant des valeurs comme GCForeground, GCBackground, GCLineStyle, etc...

Macros utiles :

La Xlib fournit des macros très utiles lorsque l'on initialise un contexte graphique.

Parmi les plus souvent utilisées BlackPixel() et WhitePixel() renvoient la valeur par défaut des couleurs noir et blanc pour un Display et un Screen donnés. Ces valeurs sont prises dans la table de couleur (colormap) par défaut.

Deux exemples de création de GC :

1) Initialisation du GC lors de la création :



     GC gc;
     XGCValues values;
     unsigned long valuemask;
           .
           .
           .
     /* Ouvrir le display, créer les fenêtres, etc... */
           .
           .
           .
     values.foreground =  BlackPixel(display, screen);
     values.background =  WhitePixel(display, screen);

     gc =  XCreateGC(display,  RootWindow(display, screen),
                    (GVForeground | GCBackground), &values);

     /* maintenant on peut utiliser ce GC dans avec les fonctions de
dessin */
           .
           .
           .



2) Initialisation du GC par défaut, ensuite on peut le modifier :



     GC gc;
           .
           .
           .
     /* Ouvrir le display, créer les fenêtres, etc... */
           .
           .
           .
     gc =  XCreateGC(display, RootWindow(display, screen), 0, NULL);

      XSetForeground(display, gc, BlackPixel(display, screen));
      XSetBackground(display, gc, WhitePixel(display, screen));

     /* maintenant on peut utiliser ce GC dans avec les fonctions de
dessin */
           .
           .
           .



michel.buffa@essi.fr