static xcb_window_t make_window(xcb_connection_t *c, xcb_screen_t *s, uint32_t bg, uint32_t fg, uint32_t width, uint32_t height) { uint32_t mask = 0; xcb_params_cw_t cwa; xcb_window_t w; xcb_void_cookie_t check_cookie; xcb_generic_error_t *error; xcb_visualtype_t *v = xcb_aux_find_visual_by_id(s, s->root_visual); assert(v); XCB_AUX_ADD_PARAM(&mask, &cwa, back_pixel, bg); XCB_AUX_ADD_PARAM(&mask, &cwa, border_pixel, fg); XCB_AUX_ADD_PARAM(&mask, &cwa, override_redirect, 1); XCB_AUX_ADD_PARAM(&mask, &cwa, event_mask, XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_EXPOSURE); w = xcb_generate_id(c); check_cookie = xcb_aux_create_window_checked(c, s->root_depth, w, s->root, 0, 0, width, height, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, v->visual_id, mask, &cwa); error = xcb_request_check(c, check_cookie); assert(!error); check_cookie = xcb_map_window_checked(c, w); error = xcb_request_check(c, check_cookie); assert(!error); return w; }
xcb_visualtype_t * ephyr_glamor_get_visual(void) { xcb_screen_t *xscreen = xcb_aux_get_screen(XGetXCBConnection(dpy), DefaultScreen(dpy)); int attribs[] = { GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, 1, None }; int event_base = 0, error_base = 0, nelements; GLXFBConfig *fbconfigs; if (!glXQueryExtension (dpy, &error_base, &event_base)) FatalError("Couldn't find GLX extension\n"); fbconfigs = glXChooseFBConfig(dpy, DefaultScreen(dpy), attribs, &nelements); if (!nelements) FatalError("Couldn't choose an FBConfig\n"); fb_config = fbconfigs[0]; free(fbconfigs); visual_info = glXGetVisualFromFBConfig(dpy, fb_config); if (visual_info == NULL) FatalError("Couldn't get RGB visual\n"); return xcb_aux_find_visual_by_id(xscreen, visual_info->visualid); }
static void towel_window_init_cairo(towel_window_t *win) { xcb_visualtype_t *vt; xcb_get_geometry_cookie_t cookie = xcb_get_geometry_unchecked(win->conn, win->id); xcb_get_geometry_reply_t *geo = xcb_get_geometry_reply(win->conn, cookie, NULL); vt = xcb_aux_find_visual_by_id(win->screen, win->screen->root_visual); win->cs = cairo_xcb_surface_create(win->conn, win->id, vt, geo->width, geo->height); win->cr = cairo_create(win->cs); free(geo); }