Fara í innihald

Forritun í XCB/Fyrsta forritið

Úr Wikibókunum

Þar sem við getum núna sótt upplýsingar um tenginguna þá er hægt að fara yfir það að búa til glugga.

Búa til glugga í XCB[breyta]

Hver gluggi hefur auðkennistölu í X-gluggakerfinu sem er táknað með

typedef uint32_t xcb_window_t;

í XCB þar sem fallið xcb_generate_id() er notað til að sækja nýja auðkennistölu:

xcb_window_t xcb_generate_id(xcb_connection_t *c);

og fallið xcb_create_window() er svo notað til að búa til nýjan glugga (sjá XCreateWindow í Xlib). Allir nýjir gluggar eru ósýnilegir til að byrja með og því þurfum við að nota fallið xcb_map_window() til að varpa þeim á skjáinn.

Hér er forrit sem skilgreinir og birtir glugga með breidd 300 og hæð 220 á miðjum skjánum (með því að sækja width_in_pixels og height_in_pixels):

#include <unistd.h>
#include <xcb/xcb.h>

#define HAED 220
#define BREIDD 300

int main ()
{
  xcb_connection_t *tenging;
  xcb_screen_t *skjar;
  xcb_window_t gluggi;

  tenging = xcb_connect (NULL, NULL);

  /* Sækja fyrsta skjáinn. */
  skjar = xcb_setup_roots_iterator (xcb_get_setup (tenging)).data;

  /* Biður um auðkenni fyrir gluggann okkar. */
  gluggi = xcb_generate_id(tenging);

  /* Skilgreinir gluggann. */
  xcb_create_window (tenging,                              // Bendir í tenginguna
                     XCB_COPY_FROM_PARENT,                 // Dýpt skjásins (sama og rót)
                     gluggi,                               // Auðkenni gluggans
                     skjar->root,                          // Móðurgluggi
                     (skjar->width_in_pixels - BREIDD)/2,  // X-staðsetning gluggans í dílum
                     (skjar->height_in_pixels - HAED)/2,   // Y-staðsetning gluggans í dílum
                     BREIDD, HAED,                         // Breidd og hæð gluggans í dílum
                     4,                                    // Þykkt gluggakarmsins í dílum
                     XCB_WINDOW_CLASS_INPUT_OUTPUT,        // Klasi
                     skjar->root_visual,                   // 
                     0, NULL);                             // Stafsía, ekki notuð fyrst um sinn

  /* Varpar glugganum á skjáinn. */
  xcb_map_window (tenging, gluggi);

  /* Sér til þess að skipanirnar séu gefnar út áður en „pause()“ fallið keyrir svo glugginn birtist örugglega. */
  xcb_flush (tenging);

  pause ();    /* kemur úr „unistd.h“ og lætur forritið bíða eftir Ctrl-C. */

  xcb_disconnect (tenging);

  return 0;
}

Glugginn að ofan hefur óskilgreindan bakgrunn sem er hægt að stilla með síðustu tveimur færibreytum xcb_create_window() sem við skilgreindum sem 0 og NULL. Glugginn ætti því að líta svona út:

Skráin tomurgluggi keyrð í xterm.

Hægt er að loka glugganum með því að ýta á Ctrl-C.