st-anysize-20220718-baa9357.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-anysize-20220718-baa9357.diff (5373B)
---
1 From 8dcdc4b21a73268e167d98aa30f24315c7f3b7ff Mon Sep 17 00:00:00 2001
2 From: Bakkeby <bakkeby@gmail.com>
3 Date: Mon, 18 Jul 2022 16:52:03 +0200
4 Subject: [PATCH] Adding anysize patch
5
6 ---
7 x.c | 56 ++++++++++++++++++++++++++++++--------------------------
8 1 file changed, 30 insertions(+), 26 deletions(-)
9
10 diff --git a/x.c b/x.c
11 index 2a3bd38..f534347 100644
12 --- a/x.c
13 +++ b/x.c
14 @@ -81,6 +81,7 @@ typedef XftGlyphFontSpec GlyphFontSpec;
15 typedef struct {
16 int tw, th; /* tty width and height */
17 int w, h; /* window width and height */
18 + int hborderpx, vborderpx;
19 int ch; /* char height */
20 int cw; /* char width */
21 int mode; /* window state/mode flags */
22 @@ -331,7 +332,7 @@ ttysend(const Arg *arg)
23 int
24 evcol(XEvent *e)
25 {
26 - int x = e->xbutton.x - borderpx;
27 + int x = e->xbutton.x - win.hborderpx;
28 LIMIT(x, 0, win.tw - 1);
29 return x / win.cw;
30 }
31 @@ -339,7 +340,7 @@ evcol(XEvent *e)
32 int
33 evrow(XEvent *e)
34 {
35 - int y = e->xbutton.y - borderpx;
36 + int y = e->xbutton.y - win.vborderpx;
37 LIMIT(y, 0, win.th - 1);
38 return y / win.ch;
39 }
40 @@ -739,6 +740,9 @@ cresize(int width, int height)
41 col = MAX(1, col);
42 row = MAX(1, row);
43
44 + win.hborderpx = (win.w - col * win.cw) / 2;
45 + win.vborderpx = (win.h - row * win.ch) / 2;
46 +
47 tresize(col, row);
48 xresize(col, row);
49 ttyresize(win.tw, win.th);
50 @@ -869,8 +873,8 @@ xhints(void)
51 sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize;
52 sizeh->height = win.h;
53 sizeh->width = win.w;
54 - sizeh->height_inc = win.ch;
55 - sizeh->width_inc = win.cw;
56 + sizeh->height_inc = 1;
57 + sizeh->width_inc = 1;
58 sizeh->base_height = 2 * borderpx;
59 sizeh->base_width = 2 * borderpx;
60 sizeh->min_height = win.ch + 2 * borderpx;
61 @@ -1152,8 +1156,8 @@ xinit(int cols, int rows)
62 xloadcols();
63
64 /* adjust fixed window geometry */
65 - win.w = 2 * borderpx + cols * win.cw;
66 - win.h = 2 * borderpx + rows * win.ch;
67 + win.w = 2 * win.hborderpx + 2 * borderpx + cols * win.cw;
68 + win.h = 2 * win.vborderpx + 2 * borderpx + rows * win.ch;
69 if (xw.gm & XNegative)
70 xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
71 if (xw.gm & YNegative)
72 @@ -1242,7 +1246,7 @@ xinit(int cols, int rows)
73 int
74 xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y)
75 {
76 - float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp;
77 + float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp;
78 ushort mode, prevmode = USHRT_MAX;
79 Font *font = &dc.font;
80 int frcflags = FRC_NORMAL;
81 @@ -1375,7 +1379,7 @@ void
82 xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)
83 {
84 int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1);
85 - int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch,
86 + int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch,
87 width = charlen * win.cw;
88 Color *fg, *bg, *temp, revfg, revbg, truefg, truebg;
89 XRenderColor colfg, colbg;
90 @@ -1465,17 +1469,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
91
92 /* Intelligent cleaning up of the borders. */
93 if (x == 0) {
94 - xclear(0, (y == 0)? 0 : winy, borderpx,
95 + xclear(0, (y == 0)? 0 : winy, win.hborderpx,
96 winy + win.ch +
97 - ((winy + win.ch >= borderpx + win.th)? win.h : 0));
98 + ((winy + win.ch >= win.vborderpx + win.th)? win.h : 0));
99 }
100 - if (winx + width >= borderpx + win.tw) {
101 + if (winx + width >= win.hborderpx + win.tw) {
102 xclear(winx + width, (y == 0)? 0 : winy, win.w,
103 - ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
104 + ((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch)));
105 }
106 if (y == 0)
107 - xclear(winx, 0, winx + width, borderpx);
108 - if (winy + win.ch >= borderpx + win.th)
109 + xclear(winx, 0, winx + width, win.vborderpx);
110 + if (winy + win.ch >= win.vborderpx + win.th)
111 xclear(winx, winy + win.ch, winx + width, win.h);
112
113 /* Clean up the region we want to draw to. */
114 @@ -1569,35 +1573,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
115 case 3: /* Blinking Underline */
116 case 4: /* Steady Underline */
117 XftDrawRect(xw.draw, &drawcol,
118 - borderpx + cx * win.cw,
119 - borderpx + (cy + 1) * win.ch - \
120 + win.hborderpx + cx * win.cw,
121 + win.vborderpx + (cy + 1) * win.ch - \
122 cursorthickness,
123 win.cw, cursorthickness);
124 break;
125 case 5: /* Blinking bar */
126 case 6: /* Steady bar */
127 XftDrawRect(xw.draw, &drawcol,
128 - borderpx + cx * win.cw,
129 - borderpx + cy * win.ch,
130 + win.hborderpx + cx * win.cw,
131 + win.vborderpx + cy * win.ch,
132 cursorthickness, win.ch);
133 break;
134 }
135 } else {
136 XftDrawRect(xw.draw, &drawcol,
137 - borderpx + cx * win.cw,
138 - borderpx + cy * win.ch,
139 + win.hborderpx + cx * win.cw,
140 + win.vborderpx + cy * win.ch,
141 win.cw - 1, 1);
142 XftDrawRect(xw.draw, &drawcol,
143 - borderpx + cx * win.cw,
144 - borderpx + cy * win.ch,
145 + win.hborderpx + cx * win.cw,
146 + win.vborderpx + cy * win.ch,
147 1, win.ch - 1);
148 XftDrawRect(xw.draw, &drawcol,
149 - borderpx + (cx + 1) * win.cw - 1,
150 - borderpx + cy * win.ch,
151 + win.hborderpx + (cx + 1) * win.cw - 1,
152 + win.vborderpx + cy * win.ch,
153 1, win.ch - 1);
154 XftDrawRect(xw.draw, &drawcol,
155 - borderpx + cx * win.cw,
156 - borderpx + (cy + 1) * win.ch - 1,
157 + win.hborderpx + cx * win.cw,
158 + win.vborderpx + (cy + 1) * win.ch - 1,
159 win.cw, 1);
160 }
161 }
162 --
163 2.37.1
164