XCB - XCB

XCB
Xcb logo.svg
Auteur (s) original (s) Bart Massey
Développeur (s) Jamey Sharp, Josh Triplett, Bart Massey
Première version 2001 ; il y a 20 ans  ( 2001 )
Version stable
1.14 / février 2020 ; il y a 1 an  ( 2020-02 )
Dépôt Modifiez ceci sur Wikidata
Écrit en C
Système opérateur POSIX
Taper Bibliothèque cliente X11
Licence Licence MIT
Site Internet xcb .freedesktop .org
X11-clients utilisent XCB pour communiquer avec le serveur X .
Une vue plus complète de la pile graphique Linux
Les programmes utilisent souvent GTK ou FLTK ou Qt pour leurs widgets GUI .
Une vue plus complète des composants d'un système d'exploitation pour les ordinateurs personnels.

XCB ( X protocol C-language Binding ) est une bibliothèque implémentant le côté client du protocole de serveur d'affichage X11 . XCB est écrit dans le langage de programmation C et distribué sous la licence MIT . Le projet a été lancé en 2001 par Bart Massey et vise à remplacer Xlib .

Aperçu

XCB a été conçu comme un remplacement plus petit et modernisé de Xlib, auparavant la principale bibliothèque C pour communiquer avec le système X window, coïncidant avec une refonte plus complète de l'implémentation X qui a eu lieu au début des années 2000. Les principaux objectifs de XCB sont les suivants:

  • réduire la taille et la complexité de la bibliothèque
  • fournir un accès direct au protocole X11

La réduction de taille requise est obtenue principalement en limitant la portée de XCB à la gestion du protocole X et en omettant les fonctionnalités Xlib telles que sa vaste bibliothèque d'utilitaires, dont la plupart ont été peu utilisées par les applications. Cela se traduit par une réduction d'un facteur trente de la taille de la bibliothèque compilée (à partir de 2004). Les objectifs secondaires incluent le fait de rendre l'interface C asynchrone , de faciliter un meilleur multithreading et de faciliter la mise en œuvre d'extensions (via des descriptions de protocole XML ).

Les descriptions des protocoles de base et d'extension sont en XML , avec un programme écrit en Python créant les liaisons C. (Les versions précédentes utilisaient XSLT et M4 .)

Un autre objectif est de pouvoir utiliser ces descriptions de protocole pour créer une documentation de protocole, plus de liaisons de langage et des stubs côté serveur.

Massey et d' autres ont travaillé pour prouver parties clés de XCB formellement correcte en utilisant la notation Z . (Xlib est connu depuis longtemps pour contenir des erreurs.)

Compatibilité Xlib

Xlib / XCB fournit une compatibilité d' interface binaire d'application avec Xlib et XCB, fournissant un chemin de portage incrémentiel. Xlib / XCB utilise la couche de protocole de Xlib, mais remplace la couche de transport Xlib par XCB, et fournit un accès à la connexion XCB sous-jacente pour une utilisation directe de XCB. Xlib / XCB permet à une application d'ouvrir une seule connexion au serveur d'affichage X et d'utiliser à la fois XCB et Xlib, éventuellement via un mélange de bibliothèques conçues pour l'une ou l'autre.

Exemple

// Simple XCB application for opening a window and drawing a box in it

// To compile it using GNU, use:
// gcc x.c -lxcb

#include <stdio.h>
#include <stdlib.h>
#include <xcb/xcb.h>

int main(void)
{
  xcb_connection_t    *c;
  xcb_screen_t        *s;
  xcb_window_t         w;
  xcb_gcontext_t       g;
  xcb_generic_event_t *e;
  uint32_t             mask;
  uint32_t             values[2];
  int                  done = 0;
  xcb_rectangle_t      r = { 20, 20, 60, 60 };

  // open connection to the server
  c = xcb_connect(NULL,NULL);
  if (xcb_connection_has_error(c)) {
    printf("Cannot open display\n");
    exit(EXIT_FAILURE);
  }
  // get the first screen
  s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;

  // create black graphics context
  g = xcb_generate_id(c);
  w = s->root;
  mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
  values[0] = s->black_pixel;
  values[1] = 0;
  xcb_create_gc(c, g, w, mask, values);

  // create window
  w = xcb_generate_id(c);
  mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
  values[0] = s->white_pixel;
  values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;
  xcb_create_window(c, s->root_depth, w, s->root,
                    10, 10, 100, 100, 1,
                    XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual,
                    mask, values);

  // map (show) the window
  xcb_map_window(c, w);

  xcb_flush(c);

  // event loop
  while (!done && (e = xcb_wait_for_event(c))) {
    switch (e->response_type & ~0x80) {
    case XCB_EXPOSE:    // draw or redraw the window
      xcb_poly_fill_rectangle(c, w, g,  1, &r);
      xcb_flush(c);
      break;
    case XCB_KEY_PRESS:  // exit on key press
      done = 1;
      break;
    }
    free(e);
  }
  // close connection to server
  xcb_disconnect(c);

  exit(EXIT_SUCCESS);
}

XCB a une API de niveau comparable, mais légèrement inférieure à celle de Xlib , comme on peut le voir avec cet exemple.

Description du protocole

Les créateurs de XCB ont inventé un langage de description d'interface spécialisé pour modéliser le protocole X11 de manière indépendante du langage et faciliter la génération de liaisons vers d'autres langages de programmation. libxcb elle-même est implémentée comme un générateur de code et un petit bout C de fonctions utilitaires.

Un exemple:

<xcb header="bigreq" extension-xname="BIG-REQUESTS"
    extension-name="BigRequests" extension-multiword="true"
    major-version="0" minor-version="0">

  <request name="Enable" opcode="0">
    <reply>
      <pad bytes="1" />
      <field type="CARD32" name="maximum_request_length" />
    </reply>
  </request>
</xcb>

Le logo XCB a été produit par Gearóid Molloy, auteur de la bande dessinée Web Neko the Kitty , et a fait un don au projet.

Autres liaisons linguistiques

  • XCB.pm - Module Perl implémentant des liaisons avec XCB.
  • xpyb - La liaison Python au système X Window à l'aide de XCB. Depuis juin 2013, il ne prend pas en charge Python 3. Fourni par freedesktop.org .
  • xcffib - Une autre liaison Python qui prend en charge Python 2 et 3 ainsi que plusieurs autres extensions X que xpyb.

Remarques

Les références

Liens externes