Xlib
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Xlib est le nom d'une bibliothèque logicielle, offrant une implémentation de la partie cliente du protocole X Window System en C. Elle contient des fonctions de bas niveau pour interagir avec un serveur X. Ces fonctions permettent aux programmeurs d'écrire des programmes sans connaître les détails du protocole X. Peu d'applications utilisent la Xlib (Xlib est le nom d'une bibliothèque logicielle, offrant une implémentation de la partie cliente du protocole X Window System en C. Elle contient des fonctions...) directement ; en général, elles exploitent d'autres bibliothèques qui reposent sur la Xlib pour fournir des éléments d'une interface (Une interface est une zone, réelle ou virtuelle qui sépare deux éléments. L’interface désigne ainsi ce que chaque élément a besoin de connaître de l’autre pour...) graphique.

Cette bibliothèque est apparue autour (Autour est le nom que la nomenclature aviaire en langue française (mise à jour) donne à 31 espèces d'oiseaux qui, soit appartiennent au...) de 1985, implementée par XFree86, et elle est toujours très utilisée par des systèmes UNIX ou apparentés. Elle sert de base pour la plupart des toolkits graphiques de haut niveau comme :

  • Intrinsics (Xt)
  • Motif
  • GTK (GTK+ (The GIMP Tool Kit) est un ensemble de bibliothèques logicielles, c'est-à-dire un ensemble de fonctions informatiques, développé originellement pour les besoins du logiciel de...)
  • Qt

Le projet (Un projet est un engagement irréversible de résultat incertain, non reproductible a priori à l’identique, nécessitant le concours et...) XCB a pour objectif de fournir une alternative à Xlib.

Types de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.)

Les principaux types de données de la Xlib sont les structures Display et les types des identificateurs.

En première approche, un display est un périphérique physique (La physique (du grec φυσις, la nature) est étymologiquement la « science de la nature ». Dans un sens général et ancien, la physique...) ou virtuel sur lequel les opérations graphiques sont effectuées. La structure Display de la bibliothèque Xlib contient les informations à propos du display, mais sa partie la plus importante sont les informations sur le canal entre le client (Le mot client a plusieurs acceptations :) et le serveur. Par exemple, dans un système d'exploitation de type UNIX, le structure Display contient le descripteur de la socket utilisée pour ce canal (il est possible de le retrouver avec la macro ConnectionNumber). La plupart des fonctions de la Xlib prennent une structure Display comme premier argument, car elles opèrent sur un canal ou sont relatives à un canal particulier. Toutes les fonctions Xlib interagissant avec le serveur ont besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est souvent fait un classement des besoins humains en trois grandes catégories : les besoins primaires, les besoins secondaires et les besoins...) de cette structure pour accéder au canal. Certaines autres fonctions, qui fonctionnent localement mais sur des données relatives au canal, nécessitent également cette structure pour identifier le canal. Ce sont par exemple les opérations sur les files d'événements, décrites plus bas.

Les fenêtres, colormaps, etc. sont gérées par le serveur, ce qui signifie que les données à propos de leur implémentation (Le mot implantation peut avoir plusieurs significations :) sont toutes mémorisées sur le serveur. Le client effectue des opérations sur ces objets en utilisant des identificateurs. Il n'a pas la possibilité d'agir directement sur les objets, il ne peut que demander au serveur d'effectuer une opération sur un objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être désigné par une étiquette verbale. Il est...) qu'il désigne par son identificateur (En programmation informatique, les identificateurs sont des mots qui sont reconnus par le compilateur ou l'interpréteur et qui permettent, telles des étiquettes, de désigner des concepts du langage de programmation :...).

Les types Window, Pixmap, Font, Colormap, etc. sont tous des identificateurs, qui sont convertis en nombres. Un client " crée " une fenêtre (En architecture et construction, une fenêtre est une baie, une ouverture dans un mur ou un pan incliné de toiture, avec ou sans vitres.) en demandant la création d'une fenêtre au serveur. Cette opération est effectuée avec un appel à une fonction de la Xlib qui retourne l'identificateur de la fenêtre, c'est-à-dire un nombre (La notion de nombre en linguistique est traitée à l’article « Nombre grammatical ».). Ce nombre peut ensuite être utilisé par le client pour demander d'autres opérations sur la même fenêtre au serveur.

Les identificateurs sont uniques sur le serveur. La plupart permettent à différentes applications de référencer les mêmes objets. Par exemple, deux applications connectées au même serveur peuvent utiliser le même nombre pour faire référence à la même fenêtre. Ces deux applications utilisent deux canaux différents, et ont par conséquent deux structures Display différentes ; toutefois, quand elles demandent des opérations sur le même identificateur, ces opérations affectent le même objet.

Protocole et événements

Habituellement, les fonctions Xlib qui produisent des requêtes pour le serveur ne les envoient pas immédiatement, mais les mémorisent dans un tampon, appelé " tampon de sortie " (output buffer). Dans le présent cas, le terme sortie fait référence aux données qui sortent du client pour aller vers le serveur : le tampon de sortie peut contenir tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) type de requêtes, et pas seulement celles qui ont un impact visible sur l'écran (Un moniteur est un périphérique de sortie usuel d'un ordinateur. C'est l'écran où s'affichent les informations saisies ou demandées par l'utilisateur et générées ou restituées par l'ordinateur, sous forme...). Le tampon de sortie est assuré d'être vidé (c'est-à-dire que toutes les requêtes sont envoyées au serveur) après un appel aux fonctions XSync ou XFlush, un appel à une fonction qui retourne une valeur depuis le serveur (ces fonctions sont bloquantes jusqu'à ce qu'une réponse soit reçue), et dans certaines autres conditions.

Xlib mémorise les événements reçus dans une file d'attente. L'application cliente peut inspecter et récupérer les événements de cette file. Alors que le serveur X envoie des événements asynchrones, les applications utilisant la bibliothèque Xlib doivent appeler explicitement les fonctions de la Xlib pour accéder aux événements de la file. Certaines de ces fonctions sont bloquantes ; et dans ce cas, elles vident également le tampon de sortie.

Les erreurs sont quant à elles reçues et traitées de manière asynchrone : l'application fournit un gestionnaire d'erreur, qui est sollicité quand un message (La théorie de l'information fut mise au point pour déterminer mathématiquement le taux d’information transmis dans la communication d’un message par un canal de communication, notamment...) d'erreur du serveur est reçu.

Le contenu d'une fenêtre n'est pas assuré d'être préservé si elle est entièrement ou partiellement recouverte. Dans ce cas, l'application reçoit un événement Expose quand la fenêtre est à nouveau visible. L'application est alors supposée redessiner le contenu de la fenêtre à nouveau.

Fonctions

Les fonctions de la bibliothèque Xlib peuvent être regroupés de la façon suivante :

  1. Les opérations sur la connexion (XOpenDisplay, XCloseDisplay...) ;
  2. Les requêtes vers le serveur, y compris les requêtes pour opération (XCreateWindow, XCreateGC...) et les requêtes pour information (XGetWindowProperty ...) ;
  3. Les opérations locales au client : les opérations sur la file des événements (XNextEvent, XPeekEvent...) et les autres opérations sur les données locales (XLookupKeysym, XParseGeometry, XSetRegion, XCreateImage, XSaveContext...).

Exemple

Le programme suivant crée un fenêtre contenant un petit carré (Un carré est un polygone régulier à quatre côtés. Cela signifie que ses quatre côtés ont la même longueur et ses quatre angles la...) noir à l'intérieur.

 
 /* 
 * Application Xlib simple affichant une carré dans une fenêtre. 
 */ 
 #include  
 int main() { 
 Display *d; 
 int s; 
 Window w; 
 XEvent e; 
 /* Ouvrir la connexion avec le serveur. */ 
 d = XOpenDisplay(NULL (NULL est un mot clef présent dans de nombreux langages informatiques, et qui désigne l'état d'un pointeur qui n'a pas de cible ou d'une variable qui n'a pas de...)); 
 if (d == NULL) { 
 printf("Impossible d'ouvrir le Display\n"); 
 exit(1); 
 } 
 s = DefaultScreen(d); 
 /* Créer la fenêtre. */ 
 w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1, 
 BlackPixel(d, s), WhitePixel(d, s)); 
 /* Choisir les événements qui nous intéressent. */ 
 XSelectInput(d, w, ExposureMask | KeyPressMask); 
 /* Afficher la fenêtre. */ 
 XMapWindow(d, w); 
 /* Boucle des événements. */ 
 while (1) { 
 XNextEvent(d, &e); 
 /* Dessiner ou redessiner la fenêtre. */ 
 if (e.type == Expose) { 
 XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10); 
 } 
 /* Sortir si une touche est pressée. */ 
 if (e.type == KeyPress) 
 break (Break est un mot anglais faisant référence à la notion de rupture (to break peut signifier « casser » et « a break » peut signifier « une pause »). Le mot est notamment employé :); 
 } 
 /* Couper la connexion avec le serveur */ 
 XCloseDisplay(d); 
 return 0; 
 } 
 

Le client crée une connexion avec le serveur en appelant XOpenDisplay. Puis il demande la création d'une fenêtre avec XCreateSimpleWindow. Un appel supplémentaire à XMapWindow est nécessaire pour " mapper " la fenêtre, c'est-à-dire la rendre visible à l'écran.

Le carré est dessiné en appelant la fonction XFillRectangle. Toutefois, cette opération ne doit pas être effectuée qu'après la création de la fenêtre. En effet, la fenêtre n'a pas la certitude que son contenu sera préservé. Par exemple, si la fenêtre est recouverte puis découverte, il est possible que son contenu doivent être redessiné. Le programme est informé que tout ou partie de la fenêtre doit être redessiné grâce à la réception d'un événement Expose.

Le dessin du contenu de la fenêtre est par conséquent effectué au sein de la boucle des événements. Avant d'entrer dans cette boucle, les événement que l'application juge (Le juge peut être un professionnel du droit, désigné ou élu pour exercer son office. Il peut également être un simple citoyen appelé temporairement à rendre la justice : c'est notamment le cas des...) pertinents sont choisis, dans le cas présent avec XSelectInput. La boucle des événements attend l'arrivée des événements : si l'événement est l'appui sur une touche, l'application quitte ; si l'événement indique qu'une partie de la fenêtre est maintenant découverte, le contenu de la fenêtre est dessiné. La fonction XNextEvent est bloquante, et vide (Le vide est ordinairement défini comme l'absence de matière dans une zone spatiale.) le tampon de sortie quand aucun événement ne se trouve dans la file d'attente.

Autres bibliothèques

La bibliothèque Xlib ne propose pas les fonctionnalités graphiques telles que les boutons, les menus, les barres de défilement, etc. Ces éléments graphiques, appelés widgets, sont fournis par d'autres bibliothèques, qui utilisent elles-mêmes la Xlib. Il existe deux types de bibliothèques dans ce cas :

  • Les bibliothèques bâties sur la bibliothèque Intrinsics (Xt), qui propose des fonctionnalités pour les widgets, mais aucun widget en particulier ; les widget spécifiques sont fournis sous la formes de bibliothèques de widgets s'appuyant sur Xt, telles que Xaw et Motif ;
  • Les bibliothèques qui fournissent des widgets en s'appuyant directement sur la Xlib, sans utiliser Xt, telles que les versions X11 de GTK+, Qt et FLTK (FLTK (abréviation de Fast Light Toolkit), à prononcer « Full tick », est une bibliothèque logicielle écrite en C++. Sa principale fonction est d'aider à créer et gérer des interfaces...).

Généralement, les applications faisant appel à ces bibliothèques de widgets indiquent le contenu de la fenêtre avant d'entrer dans la boucle des événements, et n'ont pas besoin de prendre explicitement en charge (La charge utile (payload en anglais ; la charge payante) représente ce qui est effectivement transporté par un moyen de transport donné, et qui donne lieu à un paiement ou un...) les événements Expose pour redessiner le contenu de la fenêtre.

La bibliothèque XCB est une alternatique à la Xlib. Elle a deux objectifs : la réduction de la taille de la bibliothèque et un accès direct (Un logiciel fait un accès direct (aussi appelé accès aléatoire) à un élément (par exemple, un enregistrement d’un fichier) lorsqu’il écrit ou qu’il lit l’élément en...) au protocole X11. Une version modifiée de la Xlib a été publiée, s'appuyant sur XCB.

Page générée en 0.173 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique