[hackers] [st][PATCH] Allow independent border size for x and y directions

From: Greg Anders <greg_AT_gpanders.com>
Date: Tue, 11 Jun 2019 23:12:59 +0000

Split the borderpx config variable into two parts to allow the border
size to be set differently in the x and y directions.
---
 config.def.h |  5 ++++-
 x.c          | 60 ++++++++++++++++++++++++++--------------------------
 2 files changed, 34 insertions(+), 31 deletions(-)
diff --git a/config.def.h b/config.def.h
index 482901e..161611e 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -6,7 +6,10 @@
  * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
  */
 static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
-static int borderpx = 2;
+static struct { int x; int y; } borderpx = {
+  .x = 2,
+  .y = 2
+};
 
 /*
  * What program is execed by st depends of these precedence rules:
diff --git a/x.c b/x.c
index 5828a3b..3b7f685 100644
--- a/x.c
+++ b/x.c
_AT_@ -315,7 +315,7 @@ zoomreset(const Arg *arg)
 int
 evcol(XEvent *e)
 {
-	int x = e->xbutton.x - borderpx;
+	int x = e->xbutton.x - borderpx.x;
 	LIMIT(x, 0, win.tw - 1);
 	return x / win.cw;
 }
_AT_@ -323,7 +323,7 @@ evcol(XEvent *e)
 int
 evrow(XEvent *e)
 {
-	int y = e->xbutton.y - borderpx;
+	int y = e->xbutton.y - borderpx.y;
 	LIMIT(y, 0, win.th - 1);
 	return y / win.ch;
 }
_AT_@ -674,8 +674,8 @@ cresize(int width, int height)
 	if (height != 0)
 		win.h = height;
 
-	col = (win.w - 2 * borderpx) / win.cw;
-	row = (win.h - 2 * borderpx) / win.ch;
+	col = (win.w - 2 * borderpx.x) / win.cw;
+	row = (win.h - 2 * borderpx.y) / win.ch;
 	col = MAX(1, col);
 	row = MAX(1, row);
 
_AT_@ -798,10 +798,10 @@ xhints(void)
 	sizeh->width = win.w;
 	sizeh->height_inc = win.ch;
 	sizeh->width_inc = win.cw;
-	sizeh->base_height = 2 * borderpx;
-	sizeh->base_width = 2 * borderpx;
-	sizeh->min_height = win.ch + 2 * borderpx;
-	sizeh->min_width = win.cw + 2 * borderpx;
+	sizeh->base_height = 2 * borderpx.y;
+	sizeh->base_width = 2 * borderpx.x;
+	sizeh->min_height = win.ch + 2 * borderpx.y;
+	sizeh->min_width = win.cw + 2 * borderpx.x;
 	if (xw.isfixed) {
 		sizeh->flags |= PMaxSize;
 		sizeh->min_width = sizeh->max_width = win.w;
_AT_@ -1062,8 +1062,8 @@ xinit(int cols, int rows)
 	xloadcols();
 
 	/* adjust fixed window geometry */
-	win.w = 2 * borderpx + cols * win.cw;
-	win.h = 2 * borderpx + rows * win.ch;
+	win.w = 2 * borderpx.x + cols * win.cw;
+	win.h = 2 * borderpx.y + rows * win.ch;
 	if (xw.gm & XNegative)
 		xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
 	if (xw.gm & YNegative)
_AT_@ -1148,7 +1148,7 @@ xinit(int cols, int rows)
 int
 xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y)
 {
-	float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp;
+	float winx = borderpx.x + x * win.cw, winy = borderpx.y + y * win.ch, xp, yp;
 	ushort mode, prevmode = USHRT_MAX;
 	Font *font = &dc.font;
 	int frcflags = FRC_NORMAL;
_AT_@ -1281,7 +1281,7 @@ void
 xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)
 {
 	int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1);
-	int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch,
+	int winx = borderpx.x + x * win.cw, winy = borderpx.y + y * win.ch,
 	    width = charlen * win.cw;
 	Color *fg, *bg, *temp, revfg, revbg, truefg, truebg;
 	XRenderColor colfg, colbg;
_AT_@ -1371,17 +1371,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
 
 	/* Intelligent cleaning up of the borders. */
 	if (x == 0) {
-		xclear(0, (y == 0)? 0 : winy, borderpx,
+		xclear(0, (y == 0)? 0 : winy, borderpx.y,
 			winy + win.ch +
-			((winy + win.ch >= borderpx + win.th)? win.h : 0));
+			((winy + win.ch >= borderpx.y + win.th)? win.h : 0));
 	}
-	if (winx + width >= borderpx + win.tw) {
+	if (winx + width >= borderpx.x + win.tw) {
 		xclear(winx + width, (y == 0)? 0 : winy, win.w,
-			((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
+			((winy + win.ch >= borderpx.y + win.th)? win.h : (winy + win.ch)));
 	}
 	if (y == 0)
-		xclear(winx, 0, winx + width, borderpx);
-	if (winy + win.ch >= borderpx + win.th)
+		xclear(winx, 0, winx + width, borderpx.x);
+	if (winy + win.ch >= borderpx.y + win.th)
 		xclear(winx, winy + win.ch, winx + width, win.h);
 
 	/* Clean up the region we want to draw to. */
_AT_@ -1474,35 +1474,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
 		case 3: /* Blinking Underline */
 		case 4: /* Steady Underline */
 			XftDrawRect(xw.draw, &drawcol,
-					borderpx + cx * win.cw,
-					borderpx + (cy + 1) * win.ch - \
+					borderpx.x + cx * win.cw,
+					borderpx.y + (cy + 1) * win.ch - \
 						cursorthickness,
 					win.cw, cursorthickness);
 			break;
 		case 5: /* Blinking bar */
 		case 6: /* Steady bar */
 			XftDrawRect(xw.draw, &drawcol,
-					borderpx + cx * win.cw,
-					borderpx + cy * win.ch,
+					borderpx.x + cx * win.cw,
+					borderpx.y + cy * win.ch,
 					cursorthickness, win.ch);
 			break;
 		}
 	} else {
 		XftDrawRect(xw.draw, &drawcol,
-				borderpx + cx * win.cw,
-				borderpx + cy * win.ch,
+				borderpx.x + cx * win.cw,
+				borderpx.y + cy * win.ch,
 				win.cw - 1, 1);
 		XftDrawRect(xw.draw, &drawcol,
-				borderpx + cx * win.cw,
-				borderpx + cy * win.ch,
+				borderpx.x + cx * win.cw,
+				borderpx.y + cy * win.ch,
 				1, win.ch - 1);
 		XftDrawRect(xw.draw, &drawcol,
-				borderpx + (cx + 1) * win.cw - 1,
-				borderpx + cy * win.ch,
+				borderpx.x + (cx + 1) * win.cw - 1,
+				borderpx.y + cy * win.ch,
 				1, win.ch - 1);
 		XftDrawRect(xw.draw, &drawcol,
-				borderpx + cx * win.cw,
-				borderpx + (cy + 1) * win.ch - 1,
+				borderpx.x + cx * win.cw,
+				borderpx.y + (cy + 1) * win.ch - 1,
 				win.cw, 1);
 	}
 }
-- 
2.17.1
Received on Wed Jun 12 2019 - 01:12:59 CEST

This archive was generated by hypermail 2.3.0 : Wed Jun 12 2019 - 01:36:25 CEST