diff options
| author | Mateja <mail@matejamaric.com> | 2021-04-07 12:49:06 +0200 | 
|---|---|---|
| committer | Mateja <mail@matejamaric.com> | 2021-04-07 12:55:08 +0200 | 
| commit | e9bb39d56fe9982b8a1b6e3f6864a10b4a35aa51 (patch) | |
| tree | eb013d701bfd26f3b3c2535ba1d29713b61c035a | |
| parent | 6f9f01061a2332460d02bb8071887d504d5f924c (diff) | |
| download | st-e9bb39d56fe9982b8a1b6e3f6864a10b4a35aa51.tar.gz st-e9bb39d56fe9982b8a1b6e3f6864a10b4a35aa51.zip | |
Applied alpha patch.v1.0.0
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | config.def.h | 5 | ||||
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | st.h | 1 | ||||
| -rw-r--r-- | x.c | 40 | 
5 files changed, 38 insertions, 13 deletions
| @@ -3,7 +3,8 @@  This is my fork of [st][stterm] terminal with following patches applied:  - bold is not bright -- nordtheme +- nordtheme (with black background) +- alpha  ### Build requirements: diff --git a/config.def.h b/config.def.h index f80d915..9f622d8 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.85; +  /* Terminal colors (16 first used in escape sequence) */  static const char *colorname[] = {  	/* 8 normal colors */ @@ -118,7 +121,7 @@ static const char *colorname[] = {  	[255] = 0,  	/* more colors can be added after 255 to use with DefaultXX */ -	"#2e3440", /* background */ +	"#000000", /* background */  	"#d8dee9", /* foreground */  }; @@ -16,7 +16,7 @@ PKG_CONFIG = pkg-config  INCS = -I$(X11INC) \         `$(PKG_CONFIG) --cflags fontconfig` \         `$(PKG_CONFIG) --cflags freetype2` -LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ +LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft -lXrender\         `$(PKG_CONFIG) --libs fontconfig` \         `$(PKG_CONFIG) --libs freetype2` @@ -123,3 +123,4 @@ extern char *termname;  extern unsigned int tabspaces;  extern unsigned int defaultfg;  extern unsigned int defaultbg; +extern float alpha; @@ -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; @@ -243,6 +244,7 @@ static char *usedfont = NULL;  static double usedfontsize = 0;  static double defaultfontsize = 0; +static char *opt_alpha = NULL;  static char *opt_class = NULL;  static char **opt_cmd  = NULL;  static char *opt_embed = NULL; @@ -734,7 +736,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); @@ -794,6 +796,13 @@ xloadcols(void)  			else  				die("could not allocate color %d\n", i);  		} + +	/* set alpha value of bg color */ +	if (opt_alpha) +		alpha = strtof(opt_alpha, NULL); +	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;  } @@ -1103,11 +1112,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()) @@ -1117,7 +1138,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 */ @@ -1137,19 +1158,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); @@ -1984,6 +2001,9 @@ main(int argc, char *argv[])  	case 'a':  		allowaltscreen = 0;  		break; +	case 'A': +		opt_alpha = EARGF(usage()); +		break;  	case 'c':  		opt_class = EARGF(usage());  		break; | 
