diff options
author | Devin J. Pohly <djpohly@gmail.com> | 2018-02-24 15:32:48 -0600 |
---|---|---|
committer | Devin J. Pohly <djpohly@gmail.com> | 2018-02-25 21:56:26 -0600 |
commit | a3beb626d2dae9d4d0883c7c8cb6ba58b0609105 (patch) | |
tree | 2b375342df7c33c98ab070ee38b40bbb0da4acf1 /x.c | |
parent | a5dc1b46976b2252f9d7bb68f126c4b0f351dd1a (diff) | |
download | st-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.c | 35 |
1 files changed, 18 insertions, 17 deletions
@@ -130,7 +130,7 @@ static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int); | |||
130 | static void xdrawglyph(Glyph, int, int); | 130 | static void xdrawglyph(Glyph, int, int); |
131 | static void xclear(int, int, int, int); | 131 | static void xclear(int, int, int, int); |
132 | static int xgeommasktogravity(int); | 132 | static int xgeommasktogravity(int); |
133 | static void xinit(void); | 133 | static void xinit(int, int); |
134 | static void cresize(int, int); | 134 | static void cresize(int, int); |
135 | static void xresize(int, int); | 135 | static void xresize(int, int); |
136 | static int xloadfont(Font *, FcPattern *); | 136 | static int xloadfont(Font *, FcPattern *); |
@@ -299,18 +299,16 @@ int | |||
299 | x2col(int x) | 299 | x2col(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 | ||
307 | int | 306 | int |
308 | y2row(int y) | 307 | y2row(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 | ||
316 | void | 314 | void |
@@ -984,7 +982,7 @@ xunloadfonts(void) | |||
984 | } | 982 | } |
985 | 983 | ||
986 | void | 984 | void |
987 | xinit(void) | 985 | xinit(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(); |