[hackers] Re: [st][PATCH] st-alpha-0.8.1
I applied the st alpha patch to a previous commit in git, resolved
conflicts, merged it in 0.8.1 and generated a patch to be used in my st
0.8.1 at work too.
I thought of sharing here to avoid re-work in case anyone is going to make
a patch to the last version.
Em qua, 21 de mar de 2018 às 18:14, Abraão C. de Santana <
abraaocsantana_AT_gmail.com> escreveu:
> From: Abraão C. de Santana <abraao.santana_AT_stone.com.br>
>
> ---
> config.def.h | 6 ++++-
> config.mk | 4 ++--
> st.h | 1 +
> win.h | 4 ++++
> x.c | 71
> +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
> 5 files changed, 75 insertions(+), 11 deletions(-)
>
> diff --git a/config.def.h b/config.def.h
> index 82b1b09..2c721e8 100644
> --- a/config.def.h
> +++ b/config.def.h
> _AT__AT_ -82,6 +82,9 @@ char *termname = "st-256color";
> */
> unsigned int tabspaces = 8;
>
> +/* bg opacity */
> +unsigned int alpha = 0xcc;
> +
> /* Terminal colors (16 first used in escape sequence) */
> static const char *colorname[] = {
> /* 8 normal colors */
> _AT__AT_ -109,6 +112,7 @@ static const char *colorname[] = {
> /* more colors can be added after 255 to use with DefaultXX */
> "#cccccc",
> "#555555",
> + "black",
> };
>
>
> _AT__AT_ -117,7 +121,7 @@ static const char *colorname[] = {
> * foreground, background, cursor, reverse cursor
> */
> unsigned int defaultfg = 7;
> -unsigned int defaultbg = 0;
> +unsigned int defaultbg = 257;
> static unsigned int defaultcs = 256;
> static unsigned int defaultrcs = 257;
>
> diff --git a/config.mk b/config.mk
> index 039c42c..b1fa717 100644
> --- a/config.mk
> +++ b/config.mk
> _AT__AT_ -11,10 +11,10 @@ X11INC = /usr/X11R6/include
> X11LIB = /usr/X11R6/lib
>
> # includes and libs
> -INCS = -I$(X11INC) \
> +INCS = -I. -I/usr/include -I${X11INC} \
> `pkg-config --cflags fontconfig` \
> `pkg-config --cflags freetype2`
> -LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \
> +LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXft -lXrender\
> `pkg-config --libs fontconfig` \
> `pkg-config --libs freetype2`
>
> diff --git a/st.h b/st.h
> index dac64d8..433c74f 100644
> --- a/st.h
> +++ b/st.h
> _AT__AT_ -119,5 +119,6 @@ extern char *worddelimiters;
> extern int allowaltscreen;
> extern char *termname;
> extern unsigned int tabspaces;
> +extern unsigned int alpha;
> extern unsigned int defaultfg;
> extern unsigned int defaultbg;
> diff --git a/win.h b/win.h
> index 31f327d..7ade3ae 100644
> --- a/win.h
> +++ b/win.h
> _AT__AT_ -24,6 +24,10 @@ enum win_mode {
> };
>
> void xbell(void);
> +/* alpha */
> +#define OPAQUE 0Xff
> +#define USE_ARGB (alpha != OPAQUE && opt_embed == NULL)
> +
> void xclipcopy(void);
> void xdrawcursor(int, int, Glyph, int, int, Glyph);
> void xdrawline(Line, int, int, int);
> diff --git a/x.c b/x.c
> index c343ba2..a174419 100644
> --- a/x.c
> +++ b/x.c
> _AT__AT_ -98,6 +98,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__AT_ -686,7 +687,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__AT_ -746,6 +747,13 @@ xloadcols(void)
> else
> die("Could not allocate color %d\n", i);
> }
> +
> + /* set alpha value of bg color */
> + if (USE_ARGB) {
> + dc.col[defaultbg].color.alpha = (0xffff * alpha) / OPAQUE;
> + dc.col[defaultbg].pixel &= 0x00111111;
> + dc.col[defaultbg].pixel |= alpha << 24;
> + }
> loaded = 1;
> }
>
> _AT__AT_ -767,6 +775,17 @@ xsetcolorname(int x, const char *name)
> return 0;
> }
>
> +void
> +xtermclear(int col1, int row1, int col2, int row2)
> +{
> + XftDrawRect(xw.draw,
> + &dc.col[IS_SET(MODE_REVERSE) ? defaultfg :
> defaultbg],
> + borderpx + col1 * win.cw,
> + borderpx + row1 * win.ch,
> + (col2-col1+1) * win.cw,
> + (row2-row1+1) * win.ch);
> +}
> +
> /*
> * Absolute coordinates.
> */
> _AT__AT_ -1005,7 +1024,40 @@ xinit(int cols, int rows)
> if (!(xw.dpy = XOpenDisplay(NULL)))
> die("Can't open display\n");
> xw.scr = XDefaultScreen(xw.dpy);
> - xw.vis = XDefaultVisual(xw.dpy, xw.scr);
> + xw.depth = (USE_ARGB) ? 32: XDefaultDepth(xw.dpy, xw.scr);
> + if (!USE_ARGB)
> + xw.vis = XDefaultVisual(xw.dpy, xw.scr);
> + else {
> + XVisualInfo *vis;
> + XRenderPictFormat *fmt;
> + int nvi;
> + int i;
> +
> + XVisualInfo tpl = {
> + .screen = xw.scr,
> + .depth = 32,
> + .class = TrueColor
> + };
> +
> + vis = XGetVisualInfo(xw.dpy,
> + VisualScreenMask | VisualDepthMask |
> VisualClassMask,
> + &tpl, &nvi);
> + xw.vis = NULL;
> + for (i = 0; i < nvi; i++) {
> + fmt = XRenderFindVisualFormat(xw.dpy,
> vis[i].visual);
> + if (fmt->type == PictTypeDirect &&
> fmt->direct.alphaMask) {
> + xw.vis = vis[i].visual;
> + break;
> + }
> + }
> +
> + XFree(vis);
> +
> + if (!xw.vis) {
> + fprintf(stderr, "Couldn't find ARGB visual.\n");
> + exit(1);
> + }
> + }
>
> /* font */
> if (!FcInit())
> _AT__AT_ -1015,7 +1067,11 @@ xinit(int cols, int rows)
> xloadfonts(usedfont, 0);
>
> /* colors */
> - xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
> + if (!USE_ARGB)
> + xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
> + else
> + xw.cmap = XCreateColormap(xw.dpy, XRootWindow(xw.dpy,
> xw.scr),
> + xw.vis, None);
> xloadcols();
>
> /* adjust fixed window geometry */
> _AT__AT_ -1038,16 +1094,15 @@ xinit(int cols, int rows)
> 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, (USE_ARGB) ? xw.buf: parent,
> + GCGraphicsExposures, &gcvalues);
> XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
> XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
>
> --
> 2.16.2
>
>
Received on Wed Mar 21 2018 - 22:18:21 CET
This archive was generated by hypermail 2.3.0
: Wed Mar 21 2018 - 22:24:27 CET