- XCB
-
XCB Entwickler Jamey Sharp, Josh Triplett, Bart Massey Aktuelle Version 1.7
(August 2010)Betriebssystem POSIX Kategorie X-Window Kernprotokoll Entwicklerbibliothek Lizenz MIT Deutschsprachig nein http://xcb.freedesktop.org XCB (X C Binding) stellt auf einfache und direkte Weise Transaktionen des X-Window-Protokolls über Funktionaufrufe in der Programmiersprache C zur Verfügung.[1] Damit versucht sie die bisherige Xlib durch eine leichtgewichtigere Bibliothek zu ersetzen.
Mittlerweile ist mit Xlib/XCB ein Xlib erhältlich, dessen Transportschicht durch XCB ersetzt wurde. Durch die mit dem herkömmlichen Xlib binär kompatible Schnittstelle kann es von bestehenden Programmen anstatt Xlib verwendet werden.
Inhaltsverzeichnis
Ziele
XCB strebt folgende Ziele an:
- kleiner und weniger komplex
- direkter Zugriff auf das X11-Protokoll
- asynchron um nebenläufige Programme besser zu unterstützen
- leicht zu erweitern
Beispiel
Während in Xlib bzw. in Xlib/XCB die Ereignisschleife immer noch in Xlib-Funktionsaufrufen gemacht wird, sieht man hier ein Programmstück ohne Xlib-Aufrufe. Die Aufrufe sind etwas systemnaher als man es von Xlib gewohnt ist.
/* einfache XCB-Applikation die ein Rechteck in ein Fenster zeichnet. Kompilierbar beispielsweise mit: gcc -o xcbtest xcbtest.c -lxcb */ #include <xcb/xcb.h> #include <stdio.h> #include <stdlib.h> int main() { 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 }; /* Verbindung zum X-Server öffnen */ c = xcb_connect(NULL,NULL); if (xcb_connection_has_error(c)) { printf("Cannot open display\n"); exit(1); } /* get the first screen */ s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data; /* schwarzen Grafikkontext erzeugen */ 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); /* Fenster erzeugen */ 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); /* Anzeigen (einblenden, "map") des Fensters */ xcb_map_window(c, w); xcb_flush(c); /* event loop, Ereignisschleife */ 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: /* beenden, wenn eine Taste gedrückt wird */ done = 1; break; } free(e); } /* Verbindung zum X-Server trennen */ xcb_disconnect(c); return 0; }
Quellen
- ↑ XCB: An X Protocol C Binding, Bart Massey Jamey Sharp, 19. September 2001 (englisch)
Weblinks
- XCB wiki
- XCB API Referenz (englisch)
- Weitere Publikationen (englisch)
Wikimedia Foundation.