commit 184328428e41704305f3af18c664c9ed7bd9fab6
parent c6990309e655802f9c64fedbbdab6cb6e97d0f11
Author: Matsuda Kenji <info@mtkn.jp>
Date: Wed, 17 Dec 2025 08:32:00 +0900
use 32bit-deep visual to create window, still BadMatch
Diffstat:
| M | win32.c | | | 27 | ++++++++++++++++++++++++++- |
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/win32.c b/win32.c
@@ -1,8 +1,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
void fatal(char *msg);
+int findVisual32(Display *display, int screen, XVisualInfo *return_visual_info);
int main(void) {
Display *display = XOpenDisplay(NULL);
@@ -23,11 +25,16 @@ int main(void) {
&attr);
XMapWindow(display, window);
+ XVisualInfo vi32;
+ if (findVisual32(display, screen, &vi32) < 0) {
+ fatal("32bit-deep visual info not found");
+ }
+
Window window32 = XCreateWindow(display, DefaultRootWindow(display),
0, 0, 1, 1, 0,
32,
InputOutput,
- DefaultVisual(display, screen),
+ vi32.visual,
0, NULL);
XSync(display, window);
@@ -47,3 +54,21 @@ void fatal(char *msg) {
fprintf(stderr, "%s\n", msg);
exit(1);
}
+
+int findVisual32(Display *display, int screen, XVisualInfo *return_visual_info) {
+ long mask = VisualDepthMask|VisualRedMaskMask|VisualGreenMaskMask|VisualBlueMaskMask;
+ XVisualInfo template = {
+ .depth = 32,
+ .red_mask = 0xff0000,
+ .green_mask = 0x00ff00,
+ .blue_mask = 0x0000ff,
+ };
+ int n;
+ XVisualInfo *vinfos = XGetVisualInfo(display, mask, &template, &n);
+ if (n == 0) {
+ return -1;
+ }
+ *return_visual_info = vinfos[0];
+ XFree(vinfos);
+ return 0;
+}