|
|
@ -88,6 +88,7 @@ typedef XftGlyphFontSpec GlyphFontSpec; |
|
|
|
typedef struct { |
|
|
|
int tw, th; /* tty width and height */ |
|
|
|
int w, h; /* window width and height */ |
|
|
|
int hborderpx, vborderpx; |
|
|
|
int ch; /* char height */ |
|
|
|
int cw; /* char width */ |
|
|
|
int mode; /* window state/mode flags */ |
|
|
@ -340,7 +341,7 @@ ttysend(const Arg *arg) |
|
|
|
int |
|
|
|
evcol(XEvent *e) |
|
|
|
{ |
|
|
|
int x = e->xbutton.x - borderpx; |
|
|
|
int x = e->xbutton.x - win.hborderpx; |
|
|
|
LIMIT(x, 0, win.tw - 1); |
|
|
|
return x / win.cw; |
|
|
|
} |
|
|
@ -348,7 +349,7 @@ evcol(XEvent *e) |
|
|
|
int |
|
|
|
evrow(XEvent *e) |
|
|
|
{ |
|
|
|
int y = e->xbutton.y - borderpx; |
|
|
|
int y = e->xbutton.y - win.vborderpx; |
|
|
|
LIMIT(y, 0, win.th - 1); |
|
|
|
return y / win.ch; |
|
|
|
} |
|
|
@ -749,6 +750,9 @@ cresize(int width, int height) |
|
|
|
col = MAX(1, col); |
|
|
|
row = MAX(1, row); |
|
|
|
|
|
|
|
win.hborderpx = (win.w - col * win.cw) / 2; |
|
|
|
win.vborderpx = (win.h - row * win.ch) / 2; |
|
|
|
|
|
|
|
tresize(col, row); |
|
|
|
xresize(col, row); |
|
|
|
ttyresize(win.tw, win.th); |
|
|
@ -879,8 +883,8 @@ xhints(void) |
|
|
|
sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize; |
|
|
|
sizeh->height = win.h; |
|
|
|
sizeh->width = win.w; |
|
|
|
sizeh->height_inc = win.ch; |
|
|
|
sizeh->width_inc = win.cw; |
|
|
|
sizeh->height_inc = 1; |
|
|
|
sizeh->width_inc = 1; |
|
|
|
sizeh->base_height = 2 * borderpx; |
|
|
|
sizeh->base_width = 2 * borderpx; |
|
|
|
sizeh->min_height = win.ch + 2 * borderpx; |
|
|
@ -1167,8 +1171,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 * win.hborderpx + 2 * borderpx + cols * win.cw; |
|
|
|
win.h = 2 * win.vborderpx + 2 * borderpx + rows * win.ch; |
|
|
|
if (xw.gm & XNegative) |
|
|
|
xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; |
|
|
|
if (xw.gm & YNegative) |
|
|
@ -1257,7 +1261,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 = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp; |
|
|
|
ushort mode, prevmode = USHRT_MAX; |
|
|
|
Font *font = &dc.font; |
|
|
|
int frcflags = FRC_NORMAL; |
|
|
@ -1390,7 +1394,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 = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, |
|
|
|
width = charlen * win.cw; |
|
|
|
Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; |
|
|
|
XRenderColor colfg, colbg; |
|
|
@ -1480,17 +1484,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, win.vborderpx, |
|
|
|
winy + win.ch + |
|
|
|
((winy + win.ch >= borderpx + win.th)? win.h : 0)); |
|
|
|
((winy + win.ch >= win.vborderpx + win.th)? win.h : 0)); |
|
|
|
} |
|
|
|
if (winx + width >= borderpx + win.tw) { |
|
|
|
if (winx + width >= win.hborderpx + 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 >= win.vborderpx + 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, win.vborderpx); |
|
|
|
if (winy + win.ch >= win.vborderpx + win.th) |
|
|
|
xclear(winx, winy + win.ch, winx + width, win.h); |
|
|
|
|
|
|
|
/* Clean up the region we want to draw to. */ |
|
|
@ -1584,35 +1588,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 - \ |
|
|
|
win.hborderpx + cx * win.cw, |
|
|
|
win.vborderpx + (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, |
|
|
|
win.hborderpx + cx * win.cw, |
|
|
|
win.vborderpx + cy * win.ch, |
|
|
|
cursorthickness, win.ch); |
|
|
|
break; |
|
|
|
} |
|
|
|
} else { |
|
|
|
XftDrawRect(xw.draw, &drawcol, |
|
|
|
borderpx + cx * win.cw, |
|
|
|
borderpx + cy * win.ch, |
|
|
|
win.hborderpx + cx * win.cw, |
|
|
|
win.vborderpx + cy * win.ch, |
|
|
|
win.cw - 1, 1); |
|
|
|
XftDrawRect(xw.draw, &drawcol, |
|
|
|
borderpx + cx * win.cw, |
|
|
|
borderpx + cy * win.ch, |
|
|
|
win.hborderpx + cx * win.cw, |
|
|
|
win.vborderpx + cy * win.ch, |
|
|
|
1, win.ch - 1); |
|
|
|
XftDrawRect(xw.draw, &drawcol, |
|
|
|
borderpx + (cx + 1) * win.cw - 1, |
|
|
|
borderpx + cy * win.ch, |
|
|
|
win.hborderpx + (cx + 1) * win.cw - 1, |
|
|
|
win.vborderpx + cy * win.ch, |
|
|
|
1, win.ch - 1); |
|
|
|
XftDrawRect(xw.draw, &drawcol, |
|
|
|
borderpx + cx * win.cw, |
|
|
|
borderpx + (cy + 1) * win.ch - 1, |
|
|
|
win.hborderpx + cx * win.cw, |
|
|
|
win.vborderpx + (cy + 1) * win.ch - 1, |
|
|
|
win.cw, 1); |
|
|
|
} |
|
|
|
} |
|
|
|