Í það notum við nokkuð sem kallast graphic context til að forðast að þurfa að nota ótal færibreytur fyrir hvert teiknifall. Fyrst frumstillum við graphical context og sendum það í teikniföll.
Hér er stutt fall sem úthlutar graphic context sem segir teikniföllum að teikna á forgrunn með svörtum lit:
#include<xcb/xcb.h>intmain(){xcb_connection_t*tenging=xcb_connect(NULL,NULL);xcb_screen_t*skjar=xcb_setup_roots_iterator(xcb_get_setup(tenging)).data;xcb_drawable_tgluggi=skjar->root;xcb_gcontext_tsvart=xcb_generate_id(tenging);/* * Stafsían „stafsia“ hefur að geyma töluna XCB_GC_FOREGROUND sem segir xcb_create_gc fallinu að * fylkið „gildi“ hafi að geyma upplýsingar um lit forgrunnsins. Síðan skilgreinum við „gildi“ * sem fylki sem inniheldur eitt stak sem er gildið fyrir svartan lit. */uint32_tstafsia=XCB_GC_FOREGROUND;uint32_tgildi[1]=skjar->black_pixel;xcb_create_gc(tenging,svart,gluggi,stafsia,gildi);return0;}
Þetta forrit teiknar einfalt andlit þar sem munnurinn er táknaður með brotnu línustriki[1] og augun eru hringbogar.
#include<stdlib.h>#include<stdio.h>#include<xcb/xcb.h>intmain(){xcb_connection_t*tenging;xcb_screen_t*skjar;xcb_drawable_tgluggi;xcb_gcontext_tforgrunnur;xcb_generic_event_t*atvik;uint32_tstafsia=0;uint32_tgildi[2];/** * Hér er fyrsti hornpunkturinn 100 dílar niður frá efsta vinstra horninu og 30 til hægri. * Allir hornpunktar á eftir gefa til kynna afstæða breytingu frá fyrsta punktinum: * {5, 15} merkir til dæmis að farið sé niður um 15 díla og til hægri um 5 díla. **/xcb_point_tlinustrik[]={{30,100},{5,15},{10,10},{50,0},{10,-10},{5,-15}};/** * Tveir bogar þar sem fyrsti hefur staðsetninguna {x=20, y=30} og seinni {x=85, y=30}. * Þeir eru báðir 40 dílar á hæð og breidd og eru 180 gráður en fallið tekur við * mælieiningum sem eru 1/64 af gráðu. */xcb_arc_tbogar[]={{20,30,40,40,0,180<<6},{85,30,40,40,0,180<<6}};tenging=xcb_connect(NULL,NULL);skjar=xcb_setup_roots_iterator(xcb_get_setup(tenging)).data;/** * Býr til svartan forgrunn; graphic context. Sjá: * http://en.wikipedia.org/wiki/X_Window_System_core_protocol#Graphic_contexts_and_fonts **/gluggi=skjar->root;forgrunnur=xcb_generate_id(tenging);stafsia=XCB_GC_FOREGROUND|XCB_GC_GRAPHICS_EXPOSURES;/* Farið út í þetta í kaflanum um atvik */gildi[0]=skjar->black_pixel;gildi[1]=0;xcb_create_gc(tenging,forgrunnur,gluggi,stafsia,gildi);gluggi=xcb_generate_id(tenging);/* Skilgreinir og býr til gluggann. */stafsia=XCB_CW_BACK_PIXEL|XCB_CW_EVENT_MASK;gildi[0]=skjar->white_pixel;gildi[1]=XCB_EVENT_MASK_EXPOSURE;xcb_create_window(tenging,XCB_COPY_FROM_PARENT,gluggi,skjar->root,400,200,150,150,/* Staðsetning {400,200}, stærð 150x150. */10,XCB_WINDOW_CLASS_INPUT_OUTPUT,skjar->root_visual,stafsia,gildi);/* Teiknum gluggann á skjáinn. */xcb_map_window(tenging,gluggi);/* Sendum þetta út. */xcb_flush(tenging);while((atvik=xcb_wait_for_event(tenging))){switch(atvik->response_type&~0x80){caseXCB_EXPOSE:{/* Teiknum brotna línustrikið í 6 hlutum og 2 boga. */xcb_poly_line(tenging,XCB_COORD_MODE_PREVIOUS,gluggi,forgrunnur,6,linustrik);xcb_poly_arc(tenging,gluggi,forgrunnur,2,bogar);/* Sendum þetta út og förum úr lykkjunni. */xcb_flush(tenging);break;}default:break;}free(atvik);}return0;}
sem ætti að líta svona út:
Skráin broskarl keyrð á nýjum X-þjóni með því að slá skipunina ./broskall í xterm.