From 4dbe68e9ec7ff6b6a2f7dd1e15e3abfd016faec7 Mon Sep 17 00:00:00 2001 From: WanderingPenwing Date: Mon, 29 Jul 2024 13:38:22 +0200 Subject: [PATCH] transparent --- config.def.h | 3 +++ config.h | 2 +- x.c | 43 +++++++++++++++++++++++++++++++++---------- x.o | Bin 75304 -> 76856 bytes 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/config.def.h b/config.def.h index 203722e..191c0dd 100644 --- a/config.def.h +++ b/config.def.h @@ -93,6 +93,9 @@ char *termname = "st-256color"; */ unsigned int tabspaces = 8; +/* bg opacity */ +float alpha = 0.8; + /* Terminal colors (16 first used in escape sequence) */ static const char *colorname[] = { /* 8 normal colors */ diff --git a/config.h b/config.h index 614f1dd..9330112 100644 --- a/config.h +++ b/config.h @@ -93,7 +93,7 @@ char *termname = "st-256color"; */ unsigned int tabspaces = 8; -static const int alpha = 0xff; +float alpha = 0.8; /* Terminal colors (16 first used in escape sequence) */ static const char *colorname[] = { diff --git a/x.c b/x.c index 3311d29..cc92efb 100644 --- a/x.c +++ b/x.c @@ -105,6 +105,7 @@ typedef struct { XSetWindowAttributes attrs; int scr; int isfixed; /* is fixed geometry? */ + int depth; /* bit depth */ int l, t; /* left and top offset */ int gm; /* geometry mask */ } XWindow; @@ -753,7 +754,7 @@ xresize(int col, int row) XFreePixmap(xw.dpy, xw.buf); xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, - DefaultDepth(xw.dpy, xw.scr)); + xw.depth); XftDrawChange(xw.draw, xw.buf); xclear(0, 0, win.w, win.h); @@ -813,6 +814,10 @@ xloadcols(void) else die("could not allocate color %d\n", i); } + + dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha); + dc.col[defaultbg].pixel &= 0x00FFFFFF; + dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24; loaded = 1; } @@ -843,6 +848,12 @@ xsetcolorname(int x, const char *name) XftColorFree(xw.dpy, xw.vis, xw.cmap, &dc.col[x]); dc.col[x] = ncolor; + if (x == defaultbg) { + dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha); + dc.col[defaultbg].pixel &= 0x00FFFFFF; + dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24; + } + return 0; } @@ -1135,11 +1146,23 @@ xinit(int cols, int rows) Window parent; pid_t thispid = getpid(); XColor xmousefg, xmousebg; + XWindowAttributes attr; + XVisualInfo vis; if (!(xw.dpy = XOpenDisplay(NULL))) die("can't open display\n"); xw.scr = XDefaultScreen(xw.dpy); - xw.vis = XDefaultVisual(xw.dpy, xw.scr); + + if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) { + parent = XRootWindow(xw.dpy, xw.scr); + xw.depth = 32; + } else { + XGetWindowAttributes(xw.dpy, parent, &attr); + xw.depth = attr.depth; + } + + XMatchVisualInfo(xw.dpy, xw.scr, xw.depth, TrueColor, &vis); + xw.vis = vis.visual; /* font */ if (!FcInit()) @@ -1149,7 +1172,7 @@ xinit(int cols, int rows) xloadfonts(usedfont, 0); /* colors */ - xw.cmap = XDefaultColormap(xw.dpy, xw.scr); + xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None); xloadcols(); /* adjust fixed window geometry */ @@ -1169,19 +1192,15 @@ xinit(int cols, int rows) | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; xw.attrs.colormap = xw.cmap; - if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) - parent = XRootWindow(xw.dpy, xw.scr); xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t, - win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput, + win.w, win.h, 0, xw.depth, InputOutput, xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask | CWColormap, &xw.attrs); memset(&gcvalues, 0, sizeof(gcvalues)); gcvalues.graphics_exposures = False; - dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures, - &gcvalues); - xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, - DefaultDepth(xw.dpy, xw.scr)); + xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth); + dc.gc = XCreateGC(xw.dpy, xw.buf, GCGraphicsExposures, &gcvalues); XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); @@ -2045,6 +2064,10 @@ main(int argc, char *argv[]) case 'a': allowaltscreen = 0; break; + case 'A': + alpha = strtof(EARGF(usage()), NULL); + LIMIT(alpha, 0.0, 1.0); + break; case 'c': opt_class = EARGF(usage()); break; diff --git a/x.o b/x.o index ffc889fda57173e4360c3a2f81ed4eb94c3567f7..cc6a1da9c88daeca12ab43204f01bda5bad70b24 100644 GIT binary patch delta 19615 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 R=XQE4g{6we3<_c%{|BnBIi3Ij delta 18008 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 AWdHyG