[wiki] [sites] [st][patch][alpha] Apply alpha to OSC11 too || Santtu Lakkala

From: <git_AT_suckless.org>
Date: Wed, 23 Feb 2022 12:04:38 +0100

commit 72ff5b345af20c2f1153ff90a3594a9aa9e05937
Author: Santtu Lakkala <inz_AT_inz.fi>
Date: Wed Feb 23 12:15:44 2022 +0200

    [st][patch][alpha] Apply alpha to OSC11 too
    
    The terminal background color can be set with OSC 11; apply alpha also
    to the color set with it.

diff --git a/st.suckless.org/patches/alpha/index.md b/st.suckless.org/patches/alpha/index.md
index 885ee7d9..0b0e77cf 100644
--- a/st.suckless.org/patches/alpha/index.md
+++ b/st.suckless.org/patches/alpha/index.md
_AT_@ -37,6 +37,10 @@ Download
 * [st-alpha-0.8.2.diff](st-alpha-0.8.2.diff)
 * [st-alpha-0.8.5.diff](st-alpha-20220206-0.8.5.diff)
 
+Following patch also applies alpha to background color set with OSC 11:
+
+* [st-alpha-osc11-20220222-0.8.5.diff](st-alpha-osc11-20220222-0.8.5.diff)
+
 Authors
 -------
 * Eon S. Jeon - <esjeon_AT_hyunmu.am>
diff --git a/st.suckless.org/patches/alpha/st-alpha-osc11-20220222-0.8.5.diff b/st.suckless.org/patches/alpha/st-alpha-osc11-20220222-0.8.5.diff
new file mode 100644
index 00000000..09a5533b
--- /dev/null
+++ b/st.suckless.org/patches/alpha/st-alpha-osc11-20220222-0.8.5.diff
_AT_@ -0,0 +1,142 @@
+From f4c164a63fc34c9989af15db3c10e6b658586804 Mon Sep 17 00:00:00 2001
+From: Santtu Lakkala <inz_AT_inz.fi>
+Date: Wed, 16 Feb 2022 21:23:44 +0200
+Subject: [PATCH] Alpha background
+
+Building on previous patches, but also apply alpha to the OSC 11, set
+background, sequence.
+---
+ config.def.h | 3 +++
+ x.c | 43 +++++++++++++++++++++++++++++++++----------
+ 2 files changed, 36 insertions(+), 10 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 91ab8ca..6af616e 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -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/x.c b/x.c
+index 8a16faa..812af66 100644
+--- a/x.c
++++ b/x.c
+_AT_@ -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;
+_AT_@ -736,7 +737,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);
+
+_AT_@ -796,6 +797,10 @@ xloadcols(void)
+ else
+ die("could not allocate color %d
", 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;
+ }
+
+_AT_@ -826,6 +831,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;
+ }
+
+_AT_@ -1118,11 +1129,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
");
+ 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())
+_AT_@ -1132,7 +1155,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 */
+_AT_@ -1152,19 +1175,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);
+
+_AT_@ -2019,6 +2038,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;
+--
+2.32.0
+
Received on Wed Feb 23 2022 - 12:04:38 CET

This archive was generated by hypermail 2.3.0 : Wed Feb 23 2022 - 12:12:49 CET