Les types définis dans XLib

 

Bitmap : soit une ressource pixmap de profondeur 1, soit un fichier bitmap (fichier texte) comme fond2:
#define fond2_width 16
#define fond2_height 16
static unsigned char fond2_bits[] = {
0x11, 0x11, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
0x44, 0x44, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
0x11, 0x11, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00};

Button1, Button2, Button3, ... les différents boutons d'une souris.

Classes visuelles : mode d'associations entre pixel et couleur
PseudoColor exemple: un pixel de [0..255] est associé à une des 256 entrées de la table des couleurs (palette de 256 couleurs parmi 65536 puissance 3 possible)
DirectColor exemple: un pixel sur 24 bits est découpé en trois indices de 8 bits ; chaque indice pointe dans une palette d'intensité d'une des couleurs de base ; soit une palette de 16 millions de couleur.
Normalement, une seule palette et classe visuelle par écran.

Le clavier numérote ses touches (exemple touche a) selon les spécifications du constructeurs. Ce numéro est le keycode, entier de 8 à 255.
Ce keycode + les touches modifiers enfoncés (exemple shift_L) donne un keysym (exemple XK_A). Les keysyms forme un code symbolique standard X défini dans X11/keysym.h .
Les modifiers sont Shift, Lock, Control, Meta. Un mapping associe keycodes + modifiers aux keysyms. Le changement de Map provoque un événement MappingNotify.
X n'est pas lié à l'ASCII, mais on peut obtenir la traduction Ascii d'un Keysym (exemple "A").
Pour manipuler les keysyms, pensez à #include <X11/keysym.h> dont voici quelques représentants :

 XK_space   l'espace
 XK_parenleft   la parenthèse gauche
 XK_plus   le signe +
 XK_0   le chiffre 0
 XK_A   la lettre majuscule A
 XK_a   la lettre minuscule a
 XK_eacute   la lettre minuscule é
 XK_Escape   l'échappement
 XK_Return   l'entrée
 XK_Down   curseur bas
 XK_Shift_L   modifieur majuscule gauche
 XK_Control_R   modifier controle droit
 XK_...   ....

X11/cursorfont.h : les curseurs standards
XC_X_Cursor le fameux X
XC_arrow la flèche "normale" qui pointe en haut à droite
XC_gumby le petit bonhomme
XC_circle un cercle
XC_watch la montre
XC_xterm le curseur d'insertion dans un texte
XC_hand1 une main
XC_plus le signe +
...

Colormap type des palettes de couleurs : tableau de structure XColor indicé par les pixels.

Cursor type curseur. C'est un pixmap de 2 couleurs, généralement de taille16 x 16, avec un point sensible (hotspot) définissant la position du pointeur, et possédant un masque bitmap qui définit la zone du pixmap dessinée (bit masque à 1).

Drawable = Window et Pixmap

Font type d'une police
Les polices se trouvent dans le répertoire /usr/X11R6/lib/X11/fonts et sont décrites/nommées selon la convention XLDF (X logical font descriptor) : al-fo-fa-po-in-ec-st-ha-ta-rv-rh-ch-la-je-ve où
al est l'alia
s
fo la fonderie (ex: adobe)
fa la famille (ex: times)
po le poid (ex: medium)
in l'inclinaison r(omain), i(talique)
ec l'écartement (ex: normal)
st le style
ha la hauteur en pixel
ta la taille en dixième de points
rv la résolution verticale
rh la résolution horizontale
ch la chasse m (fixe) ou p(roportionnelle)
la la largeur moyenne des lettres
je le jeu de caractère (ex: iso8859)
ve la version du jeu

Des noms d'alias (beaucoup plus court) nomment certaines polices. Voir dans /usr/X11R6/lib/X11/fonts/misc/fonts.alias

GC graphic context : ressource définisant les multiples paramètres nécessaires aux requêtes de dessin.

Pixmap : ressource grille rectangulaire de points, n bitmaps.
Sont des Drawable comme les fenêtres, mais n'ont pas de couleur d'arrière-plan, ni bordure, ni affichage, ni évènement (sauf GraphicsExpose et NoExpose lors de requètes de recopie).

Ressource : fenêtre, GC, curseur, police (fonte), palette de couleur (colormap), pixmap. Idenfiées par un entier (ids) de 32 bits, elles sont crées par les applications clients, sont partageables, éphémères et peu consommatrices de mémoires.

typedef struct {
short width; largeur totale
short ascent; hauteur de tête
short descent; hauteur de queue

} XCharStruct;
structure définissant chaque caractère d'une police

typedef struct {
unsigned long pixel; indice dans la palette (colormap)
unsigned short red, green, blue; intensité [0..65535] du faisceau
char flags; combinaison de DoRed, DOGreen, BoBlue
...

} XColor; une couleur de la table des couleurs
Les définitions des couleurs sont dans /usr/X11R6/lib/X11/rgb.txt

XContext type de contexte d'association (fenêtre,données)

typedef struct {
Font fid; l'identificateur de ressource police
...
XCharStruct min_bounds; bornes minimales pour tous ses caractères
XCharStruct max_bounds; bornes maximales pour tous ses caractères
...
int ascent; hauteur maximale des têtes
int descent; hauteur maximales des queues

} XFontStruct;


typedef struct { role de l'attribut DefaultGC masque
int function;    fct(src, dest)   GCopy  GCFunction
 unsigned long plane_mask;   masque des plans   "full 1"  GCPlaneMask
 unsigned long foreground;   couleur de dessin   O  GCForeground
 unsigned long background;   couleur de fond   1  GCBackground
 int line_width;   largeur de ligne   0   GCLineWidth
 ...      
 Font font;   fonte de texte   plutot fixe   GCFont
 int subwindow_mode;   comportement   ClipByChildren   GCSubwindowMode
 bool graphics_exposures;   select evenement g_e   True   GCGraphicsExposures
 int clip_x_origin;   origine (x,y) zone dessinée   0   GCClipXOrigin
 int clip_y_origin;  origine (x,y) zone dessinée   0   GCClipYOrigin
 Pixmap clip_mask;   masque zone dessinée   None   GCClipMask
 ...      

} XGCValues; attributs d'un gc

fonction de dessin :
soient src = ce qui doit être dessiné, dest = ce qu'il y a déjà à cet endroit
la fonction GXand appliquée à src et dest donne (src and dest) : par exemple, soient le pixel actuel (dest) 0011 et le pixel à dessiner (src) 1010, le nouveau pixel obtenu sera 0010
GXcopy fonction src
GXinvert fonction non dest
GXor fonction src or dest
GXxor fonction src xor dest
...
Attention, inverser du noir ne donne pas souvent du blanc !
Lorsque vous dessinez en noir et blanc avec une palette de couleurs, pour inverser noir/blanc, utilisez un masque des plans = WhitePixel ^ BlackPixel et la fonction GXinvert.

 

typedef struct {  valeur par défaut   masque
 Pixmap background_pixmap;     CWBackPixmap
 unsigned long background_pixel;     CWBackPixel
 Pixmap border_pixmap;   CopyFromParent   CWBorderPixmap
 unsigned long border_pixel;     CWBorderPixel
 int bit_gravity;   ForgetGravity   CWBitGravity
 int win_gravity;   NorthWestGravity   CWWinGravity
 int backing_store;   NotUseful   CWBackingStore
 ...    
 long event_mask;   (liste vide)   CWEventMask
 long do_not_propagate_mask;   (liste vide)   CWDontPropagate
 Bool override_redirect;  False   CWOverrideRedirect
 Colormap colormap;   CopyFromParent   CWColorMap
 Cursor cursor;     CWCursor

} XSetWindowAttributes; Les attributs d'une fenêtre.

unsigned long masq_attrib est le masque des attributs renseignés dans la structure attrib.

Le BackingStore est assuré sur certaines stations X : elles mémorisent les parties cachées des fenêtres dans une mémoire d'arrière plan.Votre programme doit pouvoir fonctionner sans !

bit_gravity détermine de quel coté le contenu des fenêtres ne bouge pas lors d'une modification de taille de cette fenêtre : NorthGravity (contenu invariant relativement au Nord), NorthEastGravity, ..., NorthWestGravity (par défaut), CenterGravity, ForgetGravity (effacement du contenu), StaticGravity.
CWBitGravity le masque nécessaire au changement d'attribut.
win_gravity détermine de quel coté les sous-fenêtres ne bouge pas lors d'une modification de taille de la fenêtre parente. CWWinGravity le masque nécessaire au changement d'attribut.

override_redirect pour annuler/activer la redirection des requêtes vers le W. M. donc son intervention mais aussi son aide.

 

index général fonctions de la XLib événements types dans XLib