Forritun í XCB/Fyrsta forritið

Úr Wikibókunum, frjálsa kennslubókasafninu
Jump to navigation Jump to search

Þ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.