st-visualbell2-enhanced-2020-05-13-045a0fa.diff - sites - public wiki contents … | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
st-visualbell2-enhanced-2020-05-13-045a0fa.diff (2963B) | |
--- | |
1 From d6a060dfeeef28548e6c6b1fcb92c73c4884cd6c Mon Sep 17 00:00:00 2001 | |
2 From: "Avi Halachmi (:avih)" <[email protected]> | |
3 Date: Tue, 12 May 2020 11:40:19 +0300 | |
4 Subject: [PATCH] visual bell: add circle rendering mode | |
5 | |
6 This commit experiments with alternative rendering of visual bell, | |
7 and as such it's extensively/excessively configurable. | |
8 | |
9 It renders an overlay of a circle with configurable colors (base, | |
10 outline), position and size. Defaults to the center of the window. | |
11 | |
12 Size can be relative to window or chars width, and allows for instance | |
13 to place it at the middle/side of a top/bottom tmux status-bar with | |
14 exact char height to make it look like a flashing LED at the bar, etc. | |
15 --- | |
16 config.def.h | 11 +++++++++++ | |
17 x.c | 21 ++++++++++++++++++++- | |
18 2 files changed, 31 insertions(+), 1 deletion(-) | |
19 | |
20 diff --git a/config.def.h b/config.def.h | |
21 index fe07204..927dfea 100644 | |
22 --- a/config.def.h | |
23 +++ b/config.def.h | |
24 @@ -77,6 +77,17 @@ static int vbelltimeout = 150; | |
25 // #define VBCELL 1 /* all cells - whole screen */ | |
26 // #define VBCELL y==bottom && x>right-2 /* bottom-right */ | |
27 | |
28 +static int vbellmode = 1; | |
29 +/* vbellmode: 0: invert cells. 1: draw a circle with these parameters: | |
30 + * - base and outline colors (colorname index - see below) | |
31 + * - radius: relative to window width, or if negative: relative to cell… | |
32 + * - position: relative to window width/height (0 and 1 are at the edge… | |
33 +static int vbellcolor = 3; | |
34 +static int vbellcolor_outline = 1; | |
35 +static float vbellradius = 0.03; | |
36 +static float vbellx = 0.5; | |
37 +static float vbelly = 0.5; | |
38 + | |
39 /* default TERM value */ | |
40 char *termname = "st-256color"; | |
41 | |
42 diff --git a/x.c b/x.c | |
43 index 44d5a8d..189aa1c 100644 | |
44 --- a/x.c | |
45 +++ b/x.c | |
46 @@ -1600,7 +1600,7 @@ static int | |
47 isvbellcell(int x, int y) | |
48 { | |
49 int right = win.tw / win.cw - 1, bottom = win.th / win.ch - 1; | |
50 - return VBCELL; /* logic condition defined at config.h */ | |
51 + return vbellmode == 0 && (VBCELL); /* logic defined at config.… | |
52 } | |
53 | |
54 static void | |
55 @@ -1613,6 +1613,22 @@ vbellbegin() { | |
56 XFlush(xw.dpy); | |
57 } | |
58 | |
59 +static void | |
60 +xfillcircle(int x, int y, int r, uint color_ix) | |
61 +{ | |
62 + XSetForeground(xw.dpy, dc.gc, dc.col[color_ix].pixel); | |
63 + XFillArc(xw.dpy, xw.buf, dc.gc, x - r, y - r, r * 2, r * 2, 0, … | |
64 +} | |
65 + | |
66 +static void | |
67 +xdrawvbell() { | |
68 + int r = round(vbellradius * (vbellradius > 0 ? win.w : -win.cw)… | |
69 + int x = borderpx + r + vbellx * (win.tw - 2 * r); | |
70 + int y = borderpx + r + vbelly * (win.th - 2 * r); | |
71 + xfillcircle(x, y, r, vbellcolor_outline); | |
72 + xfillcircle(x, y, r / 1.2, vbellcolor); /* 1.2 - an artistic ch… | |
73 +} | |
74 + | |
75 int | |
76 xstartdraw(void) | |
77 { | |
78 @@ -1655,6 +1671,9 @@ xdrawline(Line line, int x1, int y1, int x2) | |
79 void | |
80 xfinishdraw(void) | |
81 { | |
82 + if (vbellset && vbellmode == 1) | |
83 + xdrawvbell(); | |
84 + | |
85 XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w, | |
86 win.h, 0, 0); | |
87 XSetForeground(xw.dpy, dc.gc, | |
88 | |
89 base-commit: 045a0fab4f80b57f4a982ae6bc5f33fe21d66111 | |
90 prerequisite-patch-id: d5f30ab22e0caa901341e31c40606787c3921821 | |
91 -- | |
92 2.17.1 | |
93 |