aboutsummaryrefslogtreecommitdiff
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
st-a3beb626d2dae9d4d0883c7c8cb6ba58b0609105.zip
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);
130static void xdrawglyph(Glyph, int, int); 130static void xdrawglyph(Glyph, int, int);
131static void xclear(int, int, int, int); 131static void xclear(int, int, int, int);
132static int xgeommasktogravity(int); 132static int xgeommasktogravity(int);
133static void xinit(void); 133static void xinit(int, int);
134static void cresize(int, int); 134static void cresize(int, int);
135static void xresize(int, int); 135static void xresize(int, int);
136static int xloadfont(Font *, FcPattern *); 136static int xloadfont(Font *, FcPattern *);
@@ -299,18 +299,16 @@ int
299x2col(int x) 299x2col(int x)
300{ 300{
301 x -= borderpx; 301 x -= borderpx;
302 x /= win.cw; 302 LIMIT(x, 0, win.tw - 1);
303 303 return x / win.cw;
304 return LIMIT(x, 0, term.col-1);
305} 304}
306 305
307int 306int
308y2row(int y) 307y2row(int y)
309{ 308{
310 y -= borderpx; 309 y -= borderpx;
311 y /= win.ch; 310 LIMIT(y, 0, win.th - 1);
312 311 return y / win.ch;
313 return LIMIT(y, 0, term.row-1);
314} 312}
315 313
316void 314void
@@ -984,7 +982,7 @@ xunloadfonts(void)
984} 982}
985 983
986void 984void
987xinit(void) 985xinit(int cols, int rows)
988{ 986{
989 XGCValues gcvalues; 987 XGCValues gcvalues;
990 Cursor cursor; 988 Cursor cursor;
@@ -1009,8 +1007,8 @@ xinit(void)
1009 xloadcols(); 1007 xloadcols();
1010 1008
1011 /* adjust fixed window geometry */ 1009 /* adjust fixed window geometry */
1012 win.w = 2 * borderpx + term.col * win.cw; 1010 win.w = 2 * borderpx + cols * win.cw;
1013 win.h = 2 * borderpx + term.row * win.ch; 1011 win.h = 2 * borderpx + rows * win.ch;
1014 if (xw.gm & XNegative) 1012 if (xw.gm & XNegative)
1015 xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; 1013 xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
1016 if (xw.gm & YNegative) 1014 if (xw.gm & YNegative)
@@ -1042,7 +1040,7 @@ xinit(void)
1042 XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); 1040 XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
1043 1041
1044 /* font spec buffer */ 1042 /* font spec buffer */
1045 xw.specbuf = xmalloc(term.col * sizeof(GlyphFontSpec)); 1043 xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec));
1046 1044
1047 /* Xft rendering context */ 1045 /* Xft rendering context */
1048 xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); 1046 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
1337 /* Intelligent cleaning up of the borders. */ 1335 /* Intelligent cleaning up of the borders. */
1338 if (x == 0) { 1336 if (x == 0) {
1339 xclear(0, (y == 0)? 0 : winy, borderpx, 1337 xclear(0, (y == 0)? 0 : winy, borderpx,
1340 winy + win.ch + ((y >= term.row-1)? win.h : 0)); 1338 winy + win.ch +
1339 ((winy + win.ch >= borderpx + win.th)? win.h : 0));
1341 } 1340 }
1342 if (x + charlen >= term.col) { 1341 if (winx + width >= borderpx + win.tw) {
1343 xclear(winx + width, (y == 0)? 0 : winy, win.w, 1342 xclear(winx + width, (y == 0)? 0 : winy, win.w,
1344 ((y >= term.row-1)? win.h : (winy + win.ch))); 1343 ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
1345 } 1344 }
1346 if (y == 0) 1345 if (y == 0)
1347 xclear(winx, 0, winx + width, borderpx); 1346 xclear(winx, 0, winx + width, borderpx);
1348 if (y == term.row-1) 1347 if (winy + win.ch >= borderpx + win.th)
1349 xclear(winx, winy + win.ch, winx + width, win.h); 1348 xclear(winx, winy + win.ch, winx + width, win.h);
1350 1349
1351 /* Clean up the region we want to draw to. */ 1350 /* Clean up the region we want to draw to. */
@@ -1930,8 +1929,10 @@ run:
1930 } 1929 }
1931 setlocale(LC_CTYPE, ""); 1930 setlocale(LC_CTYPE, "");
1932 XSetLocaleModifiers(""); 1931 XSetLocaleModifiers("");
1933 tnew(MAX(cols, 1), MAX(rows, 1)); 1932 cols = MAX(cols, 1);
1934 xinit(); 1933 rows = MAX(rows, 1);
1934 tnew(cols, rows);
1935 xinit(cols, rows);
1935 xsetenv(); 1936 xsetenv();
1936 selinit(); 1937 selinit();
1937 run(); 1938 run();