Le contexte graphique

 

Introduction

Le contexte graphique a été ajouté sous X11. L'intérêt du contexte graphique étant de passer une seule fois au serveur des informations sur les attributs (couleur, épaisseur d'un trait) à utiliser pour effectuer les opérations graphiques pour une fenêtre précise. En effet, avant X11, le développeur devait passer au serveur toutes ces informations à chaque fois qu'il effectué une opération graphique. Ce qui était évidemment lourd pour le développeur et lourd aussi au niveau du traffic entre le poste client et le serveur. D'autant plus que ces informations évoluées peu voir pas entre les opérations graphiques...

 

Manipuler un Contexte Graphique

Les opérations graphiques étant effectuées par le serveur, le contexte graphique est donc une ressource gérée par celui-ci.

Il existera évidemment plusieurs fonctions permettant de modifier les paramètres d'un contexte graphique comme:

 

Créer un contexte graphique par défaut

Il est possible de créer un contexte graphique avec des attributs positionnés par défaut . Cela nous évitera ainsi de renseigner les attributs, mais vérifiez quand même qu'ils conviennent bien à ce que vous voulez faire !

DefaultGC (Display *display,int screen)

 

Créer un contexte graphique de bout en bout

Avec cette fonction, ce sera à vous de définir intégralement le contexte graphique.

Pour créer cette ressource, nous utiliserons la fonction suivante:

GC XCreateGC(Display *display, Drawable d, unsigned long valuemask, XGCValues *values);

En entrée:

display ...doit-on encore en parler ?

d Il s'agit de l'identifiant de votre fenêtre ou d'un objet pouvant recevoir des opérations graphiques. Il faut bien dessiner quelque part !

valuemask est un champ de bits permettant d'identifier quels champs de la structure "values" seront à prendre en compte. Il existe bien entendu des constantes symbolisant les champs et nous pourrons les combiner avec l'opérateur logique ou : "|"

Image non trouvée !Les champs de la structure values qui ne seront pas indiqués comme à prendre en compte auront alors une valeur par défaut positionnée par le serveur.

values est une structure de type XGCValue et contiendra donc les valeurs à affecter aux attributs du contexte graphique.

 

En sortie:

La fonction retourne l'identifiant attribué au contexte graphique créé. Evidemment, il vous faudra concerver cet identifiant pour les opérations graphiques à venir...

 

Modifier un contexte graphique

Il sera possible de modifier les attributs d'un contexte graphique, soit globalement, soit paramètre par paramètre. Tout dépendant de la quantité des informations à modifier:

Modification globale des attributs:

XChangeGC (dpy, gc, valuemask, &xgc_values);

 

ou alors de manière unitaire:

XSetState (dpy, gc, fg, bg, function, plane_mask)

XSetForeground (dpy, gc, fg)

XSetBackground (dpy, gc, bg)

XSetFunction (dpy, gc, function)

XSetPlaneMask (dpy, gc, planemask)

XSetLineAttributes (dpy, gc, lin_width, line_style, cap_style, join_style)

XSetDashes (dpy,gc,dash_offset, dash_list, n)

XSetFillStyle (dpy, gc, fill_style)

XSetFillRule (dpy, gc, fill_rule)

XSetTile ( dpy, gc, tile)

XSetStipple (dpy, gc, stipple)

XSetTSOrigin (dpy, gc, ts_x, ts_y)

XSetFont (dpy, gc, font)

XSetClipOrigin (dpy, gc, x, y)

XSetClipMask (dpy, gc, pixmap)

XSetClipRectangles (dpy, gc, cx, xy, rectangles, nrect, ordre)

XSetArcMode (dpy, gc, arc_mode)

XSetSubwindowMode (dpy, gc, subwindow_mode)

(Voir attributs du contexte graphique)

 

Recopier les attributs d'un GC vers un autre GC

On peut également copier les attributs d'un contexte graphique dans un autre avec la fonction XCopyGC qui spécifie dans valuemask les valeurs devant être copiées.

XCopyGC (dpy, gc_source, valuemask, gc_dest)

Libérer le contexte graphique

Un contexte graphique occupe de la place sur un serveur X11. Donc, si vous n'en avez plus besoin, libérérez cette ressource...

XFreeGC(dpy, gc)