st

st

https://git.tonybtw.com/st.git git://git.tonybtw.com/st.git
5,373 bytes raw
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