st-alpha-20171221-0ac685f.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-alpha-20171221-0ac685f.diff (5879B)
---
1 From adc6b217669b30f4396e8a89f2a15b679d0e313e Mon Sep 17 00:00:00 2001
2 From: fanboimsft <fanboimsft@icloud.com>
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) / OPAQUE;
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 : defaultbg],
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 | VisualClassMask,
164 + &tpl, &nvi);
165 + xw.vis = NULL;
166 + for (i = 0; i < nvi; i++) {
167 + fmt = XRenderFindVisualFormat(xw.dpy, vis[i].visual);
168 + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
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, xw.scr),
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), InputOutput,
202 + win.w, win.h, 0, xw.depth, InputOutput,
203 xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
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