| st-alpha-20171221-0ac685f.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| st-alpha-20171221-0ac685f.diff (5879B) | |
| --- | |
| 1 From adc6b217669b30f4396e8a89f2a15b679d0e313e Mon Sep 17 00:00:00 2001 | |
| 2 From: fanboimsft <[email protected]> | |
| 3 Date: Thu, 21 Dec 2017 23:21:53 +0700 | |
| 4 Subject: [PATCH] alpha patch to latest git version | |
| 5 | |
| 6 --- | |
| 7 config.def.h | 6 ++++- | |
| 8 config.mk | 4 ++-- | |
| 9 st.h | 1 + | |
| 10 win.h | 4 ++++ | |
| 11 x.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++… | |
| 12 5 files changed, 75 insertions(+), 11 deletions(-) | |
| 13 | |
| 14 diff --git a/config.def.h b/config.def.h | |
| 15 index 877afab..0e423b1 100644 | |
| 16 --- a/config.def.h | |
| 17 +++ b/config.def.h | |
| 18 @@ -82,6 +82,9 @@ char termname[] = "st-256color"; | |
| 19 */ | |
| 20 static unsigned int tabspaces = 8; | |
| 21 | |
| 22 +/* bg opacity */ | |
| 23 +unsigned int alpha = 0xcc; | |
| 24 + | |
| 25 /* Terminal colors (16 first used in escape sequence) */ | |
| 26 const char *colorname[] = { | |
| 27 /* 8 normal colors */ | |
| 28 @@ -109,6 +112,7 @@ const char *colorname[] = { | |
| 29 /* more colors can be added after 255 to use with DefaultXX */ | |
| 30 "#cccccc", | |
| 31 "#555555", | |
| 32 + "black", | |
| 33 }; | |
| 34 | |
| 35 | |
| 36 @@ -117,7 +121,7 @@ const char *colorname[] = { | |
| 37 * foreground, background, cursor, reverse cursor | |
| 38 */ | |
| 39 unsigned int defaultfg = 7; | |
| 40 -unsigned int defaultbg = 0; | |
| 41 +unsigned int defaultbg = 257; | |
| 42 unsigned int defaultcs = 256; | |
| 43 unsigned int defaultrcs = 257; | |
| 44 | |
| 45 diff --git a/config.mk b/config.mk | |
| 46 index 0aceec4..d2421f8 100644 | |
| 47 --- a/config.mk | |
| 48 +++ b/config.mk | |
| 49 @@ -11,10 +11,10 @@ X11INC = /usr/X11R6/include | |
| 50 X11LIB = /usr/X11R6/lib | |
| 51 | |
| 52 # includes and libs | |
| 53 -INCS = -I$(X11INC) \ | |
| 54 +INCS = -I. -I/usr/include -I${X11INC} \ | |
| 55 `pkg-config --cflags fontconfig` \ | |
| 56 `pkg-config --cflags freetype2` | |
| 57 -LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ | |
| 58 +LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXft -lXrender\ | |
| 59 `pkg-config --libs fontconfig` \ | |
| 60 `pkg-config --libs freetype2` | |
| 61 | |
| 62 diff --git a/st.h b/st.h | |
| 63 index 44d4938..180fdba 100644 | |
| 64 --- a/st.h | |
| 65 +++ b/st.h | |
| 66 @@ -251,6 +251,7 @@ extern unsigned int blinktimeout; | |
| 67 extern char termname[]; | |
| 68 extern const char *colorname[]; | |
| 69 extern size_t colornamelen; | |
| 70 +extern unsigned int alpha; | |
| 71 extern unsigned int defaultfg; | |
| 72 extern unsigned int defaultbg; | |
| 73 extern unsigned int defaultcs; | |
| 74 diff --git a/win.h b/win.h | |
| 75 index 428111c..05e8482 100644 | |
| 76 --- a/win.h | |
| 77 +++ b/win.h | |
| 78 @@ -5,6 +5,10 @@ | |
| 79 #define XK_NO_MOD 0 | |
| 80 #define XK_SWITCH_MOD (1<<13) | |
| 81 | |
| 82 +/* alpha */ | |
| 83 +#define OPAQUE 0Xff | |
| 84 +#define USE_ARGB (alpha != OPAQUE && opt_embed == NULL) | |
| 85 + | |
| 86 typedef XftGlyphFontSpec GlyphFontSpec; | |
| 87 | |
| 88 void draw(void); | |
| 89 diff --git a/x.c b/x.c | |
| 90 index 191e5dc..0e12ab9 100644 | |
| 91 --- a/x.c | |
| 92 +++ b/x.c | |
| 93 @@ -49,6 +49,7 @@ typedef struct { | |
| 94 XSetWindowAttributes attrs; | |
| 95 int scr; | |
| 96 int isfixed; /* is fixed geometry? */ | |
| 97 + int depth; /* bit depth */ | |
| 98 int l, t; /* left and top offset */ | |
| 99 int gm; /* geometry mask */ | |
| 100 } XWindow; | |
| 101 @@ -562,7 +563,7 @@ xresize(int col, int row) | |
| 102 | |
| 103 XFreePixmap(xw.dpy, xw.buf); | |
| 104 xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, | |
| 105 - DefaultDepth(xw.dpy, xw.scr)); | |
| 106 + xw.depth); | |
| 107 XftDrawChange(xw.draw, xw.buf); | |
| 108 xclear(0, 0, win.w, win.h); | |
| 109 } | |
| 110 @@ -619,6 +620,13 @@ xloadcols(void) | |
| 111 else | |
| 112 die("Could not allocate color %d\n", i); | |
| 113 } | |
| 114 + | |
| 115 + /* set alpha value of bg color */ | |
| 116 + if (USE_ARGB) { | |
| 117 + dc.col[defaultbg].color.alpha = (0xffff * alpha) / OPAQ… | |
| 118 + dc.col[defaultbg].pixel &= 0x00111111; | |
| 119 + dc.col[defaultbg].pixel |= alpha << 24; | |
| 120 + } | |
| 121 loaded = 1; | |
| 122 } | |
| 123 | |
| 124 @@ -640,6 +648,17 @@ xsetcolorname(int x, const char *name) | |
| 125 return 0; | |
| 126 } | |
| 127 | |
| 128 +void | |
| 129 +xtermclear(int col1, int row1, int col2, int row2) | |
| 130 +{ | |
| 131 + XftDrawRect(xw.draw, | |
| 132 + &dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defa… | |
| 133 + borderpx + col1 * win.cw, | |
| 134 + borderpx + row1 * win.ch, | |
| 135 + (col2-col1+1) * win.cw, | |
| 136 + (row2-row1+1) * win.ch); | |
| 137 +} | |
| 138 + | |
| 139 /* | |
| 140 * Absolute coordinates. | |
| 141 */ | |
| 142 @@ -879,7 +898,40 @@ xinit(void) | |
| 143 if (!(xw.dpy = XOpenDisplay(NULL))) | |
| 144 die("Can't open display\n"); | |
| 145 xw.scr = XDefaultScreen(xw.dpy); | |
| 146 - xw.vis = XDefaultVisual(xw.dpy, xw.scr); | |
| 147 + xw.depth = (USE_ARGB) ? 32: XDefaultDepth(xw.dpy, xw.scr); | |
| 148 + if (!USE_ARGB) | |
| 149 + xw.vis = XDefaultVisual(xw.dpy, xw.scr); | |
| 150 + else { | |
| 151 + XVisualInfo *vis; | |
| 152 + XRenderPictFormat *fmt; | |
| 153 + int nvi; | |
| 154 + int i; | |
| 155 + | |
| 156 + XVisualInfo tpl = { | |
| 157 + .screen = xw.scr, | |
| 158 + .depth = 32, | |
| 159 + .class = TrueColor | |
| 160 + }; | |
| 161 + | |
| 162 + vis = XGetVisualInfo(xw.dpy, | |
| 163 + VisualScreenMask | VisualDepthMask | Vi… | |
| 164 + &tpl, &nvi); | |
| 165 + xw.vis = NULL; | |
| 166 + for (i = 0; i < nvi; i++) { | |
| 167 + fmt = XRenderFindVisualFormat(xw.dpy, vis[i].vi… | |
| 168 + if (fmt->type == PictTypeDirect && fmt->direct.… | |
| 169 + xw.vis = vis[i].visual; | |
| 170 + break; | |
| 171 + } | |
| 172 + } | |
| 173 + | |
| 174 + XFree(vis); | |
| 175 + | |
| 176 + if (!xw.vis) { | |
| 177 + fprintf(stderr, "Couldn't find ARGB visual.\n"); | |
| 178 + exit(1); | |
| 179 + } | |
| 180 + } | |
| 181 | |
| 182 /* font */ | |
| 183 if (!FcInit()) | |
| 184 @@ -889,7 +941,11 @@ xinit(void) | |
| 185 xloadfonts(usedfont, 0); | |
| 186 | |
| 187 /* colors */ | |
| 188 - xw.cmap = XDefaultColormap(xw.dpy, xw.scr); | |
| 189 + if (!USE_ARGB) | |
| 190 + xw.cmap = XDefaultColormap(xw.dpy, xw.scr); | |
| 191 + else | |
| 192 + xw.cmap = XCreateColormap(xw.dpy, XRootWindow(xw.dpy, x… | |
| 193 + xw.vis, None); | |
| 194 xloadcols(); | |
| 195 | |
| 196 /* adjust fixed window geometry */ | |
| 197 @@ -912,16 +968,15 @@ xinit(void) | |
| 198 if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) | |
| 199 parent = XRootWindow(xw.dpy, xw.scr); | |
| 200 xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t, | |
| 201 - win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr),… | |
| 202 + win.w, win.h, 0, xw.depth, InputOutput, | |
| 203 xw.vis, CWBackPixel | CWBorderPixel | CWBitGrav… | |
| 204 | CWEventMask | CWColormap, &xw.attrs); | |
| 205 | |
| 206 memset(&gcvalues, 0, sizeof(gcvalues)); | |
| 207 gcvalues.graphics_exposures = False; | |
| 208 - dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures, | |
| 209 - &gcvalues); | |
| 210 - xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, | |
| 211 - DefaultDepth(xw.dpy, xw.scr)); | |
| 212 + xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth); | |
| 213 + dc.gc = XCreateGC(xw.dpy, (USE_ARGB) ? xw.buf: parent, | |
| 214 + GCGraphicsExposures, &gcvalues); | |
| 215 XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); | |
| 216 XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); | |
| 217 | |
| 218 -- | |
| 219 2.15.0 | |
| 220 |