fix sample XCB code formatting

This commit is contained in:
Vadim Lopatin 2014-03-13 18:33:55 +04:00
parent 77ee20c6a9
commit f3584dd6fc
1 changed files with 58 additions and 55 deletions

View File

@ -4,70 +4,73 @@ import std.stdio;
import std.c.linux.X11.xcb.xcb; import std.c.linux.X11.xcb.xcb;
import std.c.linux.X11.xcb.xproto; import std.c.linux.X11.xcb.xproto;
import std.c.stdlib; import std.c.stdlib;
int main()
int main(string[] args)
{ {
xcb_connection_t *c; xcb_connection_t *c;
xcb_screen_t *s; xcb_screen_t *s;
xcb_window_t w; xcb_window_t w;
xcb_gcontext_t g; xcb_gcontext_t g;
xcb_generic_event_t *e; xcb_generic_event_t *e;
uint mask; uint mask;
uint values[2]; uint values[2];
int done = 0; int done = 0;
static xcb_rectangle_t r = { 20, 20, 60, 60 }; static xcb_rectangle_t r = { 20, 20, 60, 60 };
/* open connection with the server */ /* open connection with the server */
c = xcb_connect(null,null); c = xcb_connect(null,null);
if (xcb_connection_has_error(c)) { if (xcb_connection_has_error(c)) {
writefln("Cannot open display"); writefln("Cannot open display");
return 1; return 1;
} }
/* get the first screen */
s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data; /* get the first screen */
s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;
/* create black graphics context */ /* create black graphics context */
g = xcb_generate_id(c); g = xcb_generate_id(c);
w = s.root; w = s.root;
mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
values[0] = s.black_pixel; values[0] = s.black_pixel;
values[1] = 0; values[1] = 0;
xcb_create_gc(c, g, w, mask, &values[0]); xcb_create_gc(c, g, w, mask, &values[0]);
/* create window */ /* create window */
w = xcb_generate_id(c); w = xcb_generate_id(c);
mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
values[0] = s.white_pixel; values[0] = s.white_pixel;
values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS; values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;
xcb_create_window(c, s.root_depth, w, s.root, xcb_create_window(c, s.root_depth, w, s.root,
10, 10, 100, 100, 1, 10, 10, 100, 100, 1,
XCB_WINDOW_CLASS_INPUT_OUTPUT, s.root_visual, XCB_WINDOW_CLASS_INPUT_OUTPUT, s.root_visual,
mask, &values[0]); mask, &values[0]);
/* map (show) the window */ /* map (show) the window */
xcb_map_window(c, w); xcb_map_window(c, w);
xcb_flush(c); xcb_flush(c);
/* event loop */ /* event loop */
do {
do{
e = xcb_wait_for_event(c); e = xcb_wait_for_event(c);
if(!e)break; if (!e)
switch (e.response_type & ~0x80) { break;
case XCB_EXPOSE: /* draw or redraw the window */ switch (e.response_type & ~0x80) {
xcb_poly_fill_rectangle(c, w, g, 1, &r); case XCB_EXPOSE: /* draw or redraw the window */
xcb_flush(c); xcb_poly_fill_rectangle(c, w, g, 1, &r);
break; xcb_flush(c);
case XCB_KEY_PRESS: /* exit on key press */ break;
done = 1; case XCB_KEY_PRESS: /* exit on key press */
break; done = 1;
break;
default: default:
break; break;
} }
free(e); free(e);
}while(!done); } while(!done);
/* close connection to server */ /* close connection to server */
xcb_disconnect(c); xcb_disconnect(c);
return 0; return 0;
} }