Registrieren Passwort vergessen?

XCB

13. Aug 2008, 14:16
XCB
Entwickler: Jamey Sharp, Josh Triplett, Bart Massey
Aktuelle Version: 1.1
(2007-11-04)
Betriebssystem: POSIX
Kategorie: X-Window Kernprotokoll Entwicklerbibliothek
Lizenz: MIT
Deutschsprachig: nein
Website: http://xcb.freedesktop.org

XCB (X C Binding) stellt auf einfache und direkte Weise Transaktionen des X-Window-Protokolls über C Funktionsaufrufe zur Verfügung [1].

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

[Bearbeiten] 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

[Bearbeiten] 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 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;
 }

[Bearbeiten] Quellen

  1. XCB: An X Protocol C Binding, Bart Massey Jamey Sharp, 2001-09-19 (en)

[Bearbeiten] Weblinks

Dieser Artikel ist eine Kopie aus der freien Enzyklopädie Wikipedia. Am Originalartikel kann jeder Korrekturen und Ergänzungen vornehmen. Zudem kann man frühere Versionen einsehen.