XCB

XCB

Informazione
Sviluppato da Jamey Sharp , Josh Triplett , Bart Massey
Ultima versione 1.13 (5 marzo 2018)
Depositare gitlab.freedesktop.org/xorg/lib/libxcb
Scritto in VS
Sistema operativo GNU / Linux e BSD ( d )
Ambiente POSIX
genere Libreria per lo sviluppo del protocollo principale di X Window
Licenza MIT
Sito web http://xcb.freedesktop.org/

XCB (per XC Binding ) è una libreria software in linguaggio C che fornisce un'implementazione del protocollo X Window System . Il suo obiettivo è sostituire l' Xlib , considerato invecchiato e inadatto a determinati usi. Il progetto è iniziato nel 2001 , sotto la guida di Bart Massey .

XCL (per Xlib Compatibility Layer , " Xlib Compatibility Layer ") è un'implementazione dell'API Xlib basata su XCB, al fine di fornire un livello di compatibilità per le applicazioni basate su Xlib. Prodotta successivamente, la libreria XLib / XCB fornisce un ABI compatibile sia con Xlib che con XCB, al fine di alleviare le difficoltà di porting da una libreria all'altra.

Obiettivi di XCB

Gli obiettivi principali di XCB sono:

Gli obiettivi secondari sono in particolare quello di implementare un'interfaccia C completamente asincrona , per facilitare il miglioramento del multi-threading e per rendere le estensioni più facili da implementare (tramite una descrizione dei protocolli in XML ).

Bart Massey ha passato del tempo a dimostrare che XCB è formalmente corretto usando la notazione Z (è noto che Xlib contiene errori).

Esempio

/* * Exemple simple avec XCB dessinant un carré dans une fenêtre */ #include <xcb/xcb.h> #include <stdio.h> #include <stdlib.h> int main() { xcb_connection_t *c; xcb_screen_t *s; xcb_drawable_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 }; /* ouvre la connexion avec le serveur */ c = xcb_connect (NULL, NULL); if (xcb_connection_has_error(c)) { fprintf(stderr, "Cannot open display\n"); exit(1); } /* récupérer le premier écran */ s = xcb_setup_roots_iterator (xcb_get_setup (c)).data; /* créer un contexte graphique pour le noir */ g = xcb_generate_id (c); w = s->root; mask = XCB_GC_FOREGROUND | XCB_GRAPHICS_EXPOSURE; values[0] = s->black_pixel; values[1] = 0; xcb_create_gc (c, g, w, mask, values); /* créer une fenêtre */ 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); /* afficher la fenêtre sur l'écran sélectionné */ xcb_map_window (c, w); xcb_flush (c); /* boucle événementielle */ while (!done && (e = xcb_wait_for_event(c))) { switch (e->response_type & ~0x80) { case XCB_EXPOSE: /* dessiner ou redessiner la fenêtre */ xcb_poly_fill_rectangle(c, w, g, 1, &r); xcb_flush(c); break; case XCB_KEY_PRESS: /* stopper la boucle lorsqu'une touche est enfoncée */ done = 1; break; } free(e); } /* fermer la connexion avec le serveur */ xcb_disconnect (c); return 0; }

Questo esempio illustra la somiglianza tra XCB e Xlib . Tuttavia, alcuni programmatori considerano XCB un livello leggermente inferiore rispetto a Xlib attualmente.

Vedi anche

Articoli Correlati

Riferimenti

link esterno