diff options
Diffstat (limited to 'patch')
| -rw-r--r-- | patch/alpha.c | 42 | ||||
| -rw-r--r-- | patch/alpha.h | 3 | ||||
| -rw-r--r-- | patch/include.c | 5 | ||||
| -rw-r--r-- | patch/include.h | 5 |
4 files changed, 55 insertions, 0 deletions
diff --git a/patch/alpha.c b/patch/alpha.c new file mode 100644 index 0000000..7da7215 --- /dev/null +++ b/patch/alpha.c @@ -0,0 +1,42 @@ + +static int useargb = 0; +static Visual *visual; +static int depth; +static Colormap cmap; + +void +xinitvisual() +{ + XVisualInfo *infos; + XRenderPictFormat *fmt; + int nitems; + int i; + + XVisualInfo tpl = { + .screen = screen, + .depth = 32, + .class = TrueColor + }; + long masks = VisualScreenMask | VisualDepthMask | VisualClassMask; + + infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); + visual = NULL; + for (i = 0; i < nitems; i ++) { + fmt = XRenderFindVisualFormat(dpy, infos[i].visual); + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { + visual = infos[i].visual; + depth = infos[i].depth; + cmap = XCreateColormap(dpy, root, visual, AllocNone); + useargb = 1; + break; + } + } + + XFree(infos); + + if (! visual) { + visual = DefaultVisual(dpy, screen); + depth = DefaultDepth(dpy, screen); + cmap = DefaultColormap(dpy, screen); + } +} diff --git a/patch/alpha.h b/patch/alpha.h new file mode 100644 index 0000000..3c81522 --- /dev/null +++ b/patch/alpha.h @@ -0,0 +1,3 @@ +#define OPAQUE 0xffU + +static void xinitvisual(); diff --git a/patch/include.c b/patch/include.c new file mode 100644 index 0000000..de31d1e --- /dev/null +++ b/patch/include.c @@ -0,0 +1,5 @@ + +#if ALPHA_PATCH +#include "alpha.c" +#endif + diff --git a/patch/include.h b/patch/include.h new file mode 100644 index 0000000..c5c8947 --- /dev/null +++ b/patch/include.h @@ -0,0 +1,5 @@ + +#if ALPHA_PATCH +#include "alpha.h" +#endif + |
