win32

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 5bc8a86084c7a23fa1a5d8dbcb963472f66a2ae6
parent e54909a53f7a6ef17135e60b9809ceb373596d33
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Fri, 19 Dec 2025 21:23:20 +0900

create 32bit window

Diffstat:
Mxcb.c | 35+++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+), 0 deletions(-)

diff --git a/xcb.c b/xcb.c @@ -7,6 +7,7 @@ void fatal(char *msg); void fatalf(char *fmt, ...); +int findVisual32(xcb_screen_t *screen, xcb_visualtype_t *return_visualtype); int findPictFormat(xcb_connection_t *conn, int dept, xcb_render_pictformat_t *return_pictformat); int main(void) { @@ -46,6 +47,20 @@ int main(void) { xcb_rectangle_t rectangle = { .x = 0, .y = 0, .width = width, .height = height }; xcb_render_fill_rectangles(conn, XCB_RENDER_PICT_OP_SRC, picture, color, 1, &rectangle); + xcb_visualtype_t visual32; + if (findVisual32(screen, &visual32) < 0) { + fatal("32bit visual not found"); + } + xcb_colormap_t colormap32 = xcb_generate_id(conn); + xcb_create_colormap(conn, XCB_COLORMAP_ALLOC_NONE, colormap32, screen->root, visual32.visual_id); + xcb_window_t window32 = xcb_generate_id(conn); + uint32_t attr32[2] = { 0, colormap32 }; + xcb_create_window(conn, 32, window32, screen->root, + 0, 0, 1, 1, 0, + XCB_WINDOW_CLASS_INPUT_OUTPUT, + visual32.visual_id, + XCB_CW_BORDER_PIXEL|XCB_CW_COLORMAP, &attr32); + xcb_flush(conn); int quit = 0; @@ -78,6 +93,26 @@ void fatalf(char *fmt, ...) { exit(1); } +int findVisual32(xcb_screen_t *screen, xcb_visualtype_t *return_visualtype) { + xcb_depth_iterator_t depth_iter = xcb_screen_allowed_depths_iterator(screen); + for (;depth_iter.rem > 0; xcb_depth_next(&depth_iter)) { + xcb_depth_t *d = depth_iter.data; + if (d->depth != 32) { + continue; + } + xcb_visualtype_iterator_t visual_iter = xcb_depth_visuals_iterator(d); + while (visual_iter.rem > 0) { + xcb_visualtype_t *v = visual_iter.data; + if (v->red_mask == 0xff0000 && v->green_mask == 0x00ff00 && v->blue_mask == 0x0000ff) { + *return_visualtype = *v; + return 0; + } + xcb_visualtype_next(&visual_iter); + } + } + return -1; +} + int findPictFormat(xcb_connection_t *conn, int depth, xcb_render_pictformat_t *return_pictformat) { xcb_generic_error_t *error; xcb_render_query_pict_formats_cookie_t cookie = xcb_render_query_pict_formats(conn);