diff options
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(); |