[hackers] Re: [st][PATCH] st-alpha-0.8.1

From: Abraão Caldas de Santana <abraaocsantana_AT_gmail.com>
Date: Fri, 23 Mar 2018 03:42:53 +0000

(oh and I'm also new around here and wasn't subscribed to the mail lists,
so if somebody already did this, I apologize).

Em qua, 21 de mar de 2018 às 18:18, Abraão Caldas de Santana <
abraaocsantana_AT_gmail.com> escreveu:

> 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 Fri Mar 23 2018 - 04:42:53 CET

This archive was generated by hypermail 2.3.0 : Fri Mar 23 2018 - 04:48:22 CET