aboutsummaryrefslogtreecommitdiffstats
path: root/x.c
diff options
context:
space:
mode:
authorDevin J. Pohly <djpohly@gmail.com>2018-02-24 15:32:48 -0600
committerDevin J. Pohly <djpohly@gmail.com>2018-02-25 21:56:26 -0600
commita3beb626d2dae9d4d0883c7c8cb6ba58b0609105 (patch)
tree2b375342df7c33c98ab070ee38b40bbb0da4acf1 /x.c
parenta5dc1b46976b2252f9d7bb68f126c4b0f351dd1a (diff)
downloadst-a3beb626d2dae9d4d0883c7c8cb6ba58b0609105.tar.gz
Remove x.c dependency on term
The xinit function only needs to the rows/cols, so pass those in rather than accessing term directly. With a bit of arithmetic, we are able to avoid the need for term.row and term.col in x2col, y2row, and xdrawglyphfontspecs as well, completing the removal. Term is now fully internal to st.c. Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
Diffstat (limited to 'x.c')
-rw-r--r--x.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/x.c b/x.c
index d205ca7..873ff08 100644
--- a/x.c
+++ b/x.c
@@ -130,7 +130,7 @@ static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);
static void xdrawglyph(Glyph, int, int);
static void xclear(int, int, int, int);
static int xgeommasktogravity(int);
-static void xinit(void);
+static void xinit(int, int);
static void cresize(int, int);
static void xresize(int, int);
static int xloadfont(Font *, FcPattern *);
@@ -299,18 +299,16 @@ int
x2col(int x)
{
x -= borderpx;
- x /= win.cw;
-
- return LIMIT(x, 0, term.col-1);
+ LIMIT(x, 0, win.tw - 1);
+ return x / win.cw;
}
int
y2row(int y)
{
y -= borderpx;
- y /= win.ch;
-
- return LIMIT(y, 0, term.row-1);
+ LIMIT(y, 0, win.th - 1);
+ return y / win.ch;
}
void
@@ -984,7 +982,7 @@ xunloadfonts(void)
}
void
-xinit(void)
+xinit(int cols, int rows)
{
XGCValues gcvalues;
Cursor cursor;
@@ -1009,8 +1007,8 @@ xinit(void)
xloadcols();
/* adjust fixed window geometry */
- win.w = 2 * borderpx + term.col * win.cw;
- win.h = 2 * borderpx + term.row * win.ch;
+ win.w = 2 * borderpx + cols * win.cw;
+ win.h = 2 * borderpx + rows * win.ch;
if (xw.gm & XNegative)
xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
if (xw.gm & YNegative)
@@ -1042,7 +1040,7 @@ xinit(void)
XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
/* font spec buffer */
- xw.specbuf = xmalloc(term.col * sizeof(GlyphFontSpec));
+ xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec));
/* Xft rendering context */
xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
@@ -1337,15 +1335,16 @@ 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,
- winy + win.ch + ((y >= term.row-1)? win.h : 0));
+ winy + win.ch +
+ ((winy + win.ch >= borderpx + win.th)? win.h : 0));
}
- if (x + charlen >= term.col) {
+ if (winx + width >= borderpx + win.tw) {
xclear(winx + width, (y == 0)? 0 : winy, win.w,
- ((y >= term.row-1)? win.h : (winy + win.ch)));
+ ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
}
if (y == 0)
xclear(winx, 0, winx + width, borderpx);
- if (y == term.row-1)
+ if (winy + win.ch >= borderpx + win.th)
xclear(winx, winy + win.ch, winx + width, win.h);
/* Clean up the region we want to draw to. */
@@ -1930,8 +1929,10 @@ run:
}
setlocale(LC_CTYPE, "");
XSetLocaleModifiers("");
- tnew(MAX(cols, 1), MAX(rows, 1));
- xinit();
+ cols = MAX(cols, 1);
+ rows = MAX(rows, 1);
+ tnew(cols, rows);
+ xinit(cols, rows);
xsetenv();
selinit();
run();
remember that computers suck.