st-invert-0.8.4.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-invert-0.8.4.diff (2845B)
---
1 From 9a6f20cd810e7c556534ba76f379573212c2dc66 Mon Sep 17 00:00:00 2001
2 From: Miles Alan <m@milesalan.com>
3 Date: Wed, 24 Mar 2021 20:22:30 -0500
4 Subject: [PATCH] Add invert function which changes the current colors' RGB
5 values to be inversed
6
7 ---
8 config.def.h | 1 +
9 x.c | 39 ++++++++++++++++++++++++++++++++++++---
10 2 files changed, 37 insertions(+), 3 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 6f05dce..8669717 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -199,6 +199,7 @@ static Shortcut shortcuts[] = {
17 { TERMMOD, XK_Y, selpaste, {.i = 0} },
18 { ShiftMask, XK_Insert, selpaste, {.i = 0} },
19 { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
20 + { TERMMOD, XK_X, invert, { } },
21 };
22
23 /*
24 diff --git a/x.c b/x.c
25 index 210f184..3dd9f3d 100644
26 --- a/x.c
27 +++ b/x.c
28 @@ -59,6 +59,7 @@ static void zoom(const Arg *);
29 static void zoomabs(const Arg *);
30 static void zoomreset(const Arg *);
31 static void ttysend(const Arg *);
32 +static void invert(const Arg *);
33
34 /* config.h for applying patches and the configuration. */
35 #include "config.h"
36 @@ -252,8 +253,28 @@ static char *opt_line = NULL;
37 static char *opt_name = NULL;
38 static char *opt_title = NULL;
39
40 +static int invertcolors = 0;
41 static int oldbutton = 3; /* button event on startup: 3 = release */
42
43 +void
44 +invert(const Arg *dummy)
45 +{
46 + invertcolors = !invertcolors;
47 + redraw();
48 +}
49 +
50 +Color
51 +invertedcolor(Color *clr) {
52 + XRenderColor rc;
53 + Color inverted;
54 + rc.red = ~clr->color.red;
55 + rc.green = ~clr->color.green;
56 + rc.blue = ~clr->color.blue;
57 + rc.alpha = clr->color.alpha;
58 + XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &rc, &inverted);
59 + return inverted;
60 +}
61 +
62 void
63 clipcopy(const Arg *dummy)
64 {
65 @@ -820,9 +841,11 @@ xsetcolorname(int x, const char *name)
66 void
67 xclear(int x1, int y1, int x2, int y2)
68 {
69 - XftDrawRect(xw.draw,
70 - &dc.col[IS_SET(MODE_REVERSE)? defaultfg : defaultbg],
71 - x1, y1, x2-x1, y2-y1);
72 + Color c;
73 + c = dc.col[IS_SET(MODE_REVERSE)? defaultfg : defaultbg];
74 + if (invertcolors)
75 + c = invertedcolor(&c);
76 + XftDrawRect(xw.draw, &c, x1, y1, x2-x1, y2-y1);
77 }
78
79 void
80 @@ -1431,6 +1454,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
81 if (base.mode & ATTR_INVISIBLE)
82 fg = bg;
83
84 + if (invertcolors) {
85 + revfg = invertedcolor(fg);
86 + revbg = invertedcolor(bg);
87 + fg = &revfg;
88 + bg = &revbg;
89 + }
90 +
91 /* Intelligent cleaning up of the borders. */
92 if (x == 0) {
93 xclear(0, (y == 0)? 0 : winy, borderpx,
94 @@ -1523,6 +1553,9 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
95 drawcol = dc.col[g.bg];
96 }
97
98 + if (invertcolors)
99 + drawcol = invertedcolor(&drawcol);
100 +
101 /* draw the new one */
102 if (IS_SET(MODE_FOCUSED)) {
103 switch (win.cursor) {
104 --
105 2.26.2
106