st-invert-0.8.2.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
st-invert-0.8.2.diff (2653B) | |
--- | |
1 From 1e4f29c34c3631e1d7350b02a199ae6000b33f6d Mon Sep 17 00:00:00 2001 | |
2 From: Miles Alan <[email protected]> | |
3 Date: Wed, 25 Mar 2020 21:40:10 -0500 | |
4 Subject: [PATCH] Add invert function which changes the current colors' R… | |
5 values to be inversed | |
6 | |
7 Bind invert function in example config.def.h to Ctrl-Shift-x | |
8 --- | |
9 config.def.h | 1 + | |
10 x.c | 37 ++++++++++++++++++++++++++++++++++--- | |
11 2 files changed, 35 insertions(+), 3 deletions(-) | |
12 | |
13 diff --git a/config.def.h b/config.def.h | |
14 index 0e01717..6c7293c 100644 | |
15 --- a/config.def.h | |
16 +++ b/config.def.h | |
17 @@ -178,6 +178,7 @@ static Shortcut shortcuts[] = { | |
18 { TERMMOD, XK_Y, selpaste, {.i = … | |
19 { ShiftMask, XK_Insert, selpaste, {.i = … | |
20 { TERMMOD, XK_Num_Lock, numlock, {.i = … | |
21 + { TERMMOD, XK_X, invert, { } … | |
22 }; | |
23 | |
24 /* | |
25 diff --git a/x.c b/x.c | |
26 index 0422421..7379969 100644 | |
27 --- a/x.c | |
28 +++ b/x.c | |
29 @@ -56,6 +56,7 @@ static void selpaste(const Arg *); | |
30 static void zoom(const Arg *); | |
31 static void zoomabs(const Arg *); | |
32 static void zoomreset(const Arg *); | |
33 +static void invert(const Arg *); | |
34 | |
35 /* config.h for applying patches and the configuration. */ | |
36 #include "config.h" | |
37 @@ -238,8 +239,28 @@ static char *opt_line = NULL; | |
38 static char *opt_name = NULL; | |
39 static char *opt_title = NULL; | |
40 | |
41 +static int invertcolors = 0; | |
42 static int oldbutton = 3; /* button event on startup: 3 = release */ | |
43 | |
44 +void | |
45 +invert(const Arg *dummy) | |
46 +{ | |
47 + invertcolors = !invertcolors; | |
48 + redraw(); | |
49 +} | |
50 + | |
51 +Color | |
52 +invertedcolor(Color *clr) { | |
53 + XRenderColor rc; | |
54 + Color inverted; | |
55 + rc.red = ~clr->color.red; | |
56 + rc.green = ~clr->color.green; | |
57 + rc.blue = ~clr->color.blue; | |
58 + rc.alpha = clr->color.alpha; | |
59 + XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &rc, &inverted); | |
60 + return inverted; | |
61 +} | |
62 + | |
63 void | |
64 clipcopy(const Arg *dummy) | |
65 { | |
66 @@ -775,9 +796,12 @@ xsetcolorname(int x, const char *name) | |
67 void | |
68 xclear(int x1, int y1, int x2, int y2) | |
69 { | |
70 - XftDrawRect(xw.draw, | |
71 - &dc.col[IS_SET(MODE_REVERSE)? defaultfg : defau… | |
72 - x1, y1, x2-x1, y2-y1); | |
73 + Color c; | |
74 + c = dc.col[IS_SET(MODE_REVERSE)? defaultfg : defaultbg]; | |
75 + if (invertcolors) { | |
76 + c = invertedcolor(&c); | |
77 + } | |
78 + XftDrawRect(xw.draw, &c, x1, y1, x2-x1, y2-y1); | |
79 } | |
80 | |
81 void | |
82 @@ -1347,6 +1371,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs… | |
83 if (base.mode & ATTR_INVISIBLE) | |
84 fg = bg; | |
85 | |
86 + if (invertcolors) { | |
87 + revfg = invertedcolor(fg); | |
88 + revbg = invertedcolor(bg); | |
89 + fg = &revfg; | |
90 + bg = &revbg; | |
91 + } | |
92 + | |
93 /* Intelligent cleaning up of the borders. */ | |
94 if (x == 0) { | |
95 xclear(0, (y == 0)? 0 : winy, borderpx, | |
96 -- | |
97 2.23.1 | |
98 |