XCB
Erscheinungsbild
XCB
| |
---|---|
![]() | |
Basisdaten
| |
Entwickler | Jamey Sharp, Josh Triplett, Bart Massey |
Aktuelle Version | 1.1 (4. November 2007) |
Betriebssystem | POSIX |
Programmiersprache | C[1] |
Kategorie | X-Windows Kernprotokoll Entwicklerbibliothek |
Lizenz | MIT |
deutschsprachig | nein |
http://xcb.freedesktop.org/ |
XCB (X C Binding) stellt auf einfache und direkte Weise Transaktionen des X-Windows-Protokolls über C Funktionsaufrufe zur Verfügung [2].
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.
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 Ereignnisschleife immer noch in Xlib Funktionsaufrufen gemacht wird, sieht man hier ein Programmstück ohne Xlib Aufrufe. Die Aufrufe sind etwas systemnäher als man es von Xlib gewohnt ist.
/* einfache XCB applikation die ein rechteck in ein fenster zeichnet */ #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 mit dem server aufmache */ 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; /* 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); /* 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 beenden */ xcb_disconnect(c); return 0; }
Quellen
- ↑ The xcb Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Juli 2018).
- ↑ XCB: An X Protocol C Binding, Bart Massey Jamey Sharp, 2001-09-19 (en)