XCB

From Wikipedia, the free encyclopedia

XCB (X C Binding) es un binding para el lenguaje C de X Window System. Está implementado como software libre y pretende reemplazar la biblioteca Xlib. El proyecto fue iniciado en 2001 por Bart Massey.

Datos rápidos Información general, Tipo de programa ...
XCB
Información general
Tipo de programa Biblioteca para el Protocolo base de X Window System
Desarrollador Jamey Sharp, Josh Triplett, Bart Massey
Licencia MIT
Información técnica
Programado en C
Versiones
Última versión estable 1.17.0 (15 de abril de 2024 (1 año, 10 meses y 28 días)[1])
Enlaces
Cerrar

Xlib/XCB provee compatibilidad a nivel de interfaz de aplicación binaria para Xlib y XCB. Xlib/XCB usa la capa de protocolo de Xlib, pero reemplaza la capa de transporte de Xlib por la de XCB, y provee acceso a la conexión XCB para hacer un uso directo de XCB.

Objetivos

Los objetivos principales de XCB son:

  • Reducción del tamaño y la complejidad de la biblioteca;
  • acceso directo para protocolo X11.

Los objetivos secundarios incluyen hacer una interfaz C asíncrona, facilitando la programación multihilo y haciendo más fácil la implementación de extensiones (vía descripciones de protocolo XML).

Las descripciones del protocolo base y de extensión están en XML, con los bindings C creados vía scripts Python. (Versiones previas usaban XSLT y M4.) Un tercer objetivo es replantear esas descripciones del protocolo para la creación de documentación del protocolo, más bindings para otros lenguajes, y server-side stubs.

Massey y otros han trabajado para probar porciones clave de XCB como formalmente correctas, usando notación Z.[2] (Se sabe de hace tiempo que Xlib contiene errores.[3])

Ejemplo

/* Simple XCB application drawing a box in a window */
 
#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 };
 
                        /* open connection with the server */
  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);
 
                       /* 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);

  return 0;
}

XCB tiene una API comparable a la de Xlib, pero de ligeramente más bajo nivel, como se puede ver en este ejemplo.

Logotipo

El logotipo de XCB fue creado por Gearóid Molloy, autor del Webcómic Neko the Kitty, y lo donó al proyecto.[4]

Referencias

Bibliografía

Enlaces externos

Related Articles

Wikiwand AI