(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 <
[email protected]> 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 <
> [email protected]> escreveu:
>
>> From: Abraão C. de Santana <[email protected]>
>>
>> ---
>>  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
>> @@ -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 */
>> @@ -109,6 +112,7 @@ static const char *colorname[] = {
>>         /* more colors can be added after 255 to use with DefaultXX */
>>         "#cccccc",
>>         "#555555",
>> +       "black",
>>  };
>>
>>
>> @@ -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
>> @@ -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
>> @@ -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
>> @@ -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
>> @@ -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;
>> @@ -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);
>>
>> @@ -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;
>>  }
>>
>> @@ -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.
>>   */
>> @@ -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())
>> @@ -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 */
>> @@ -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
>>
>>

Reply via email to