anysize - st - simple terminal
 (HTM) git clone https://git.parazyd.org/st
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d7a6be454944e0de0907e03883ee8a0d6e49ed5e
 (DIR) parent cc6999c8b6eaa714222eecd519d8212781190ce7
 (HTM) Author: parazyd <parazyd@dyne.org>
       Date:   Tue, 26 Apr 2022 20:50:06 +0200
       
       anysize
       
       Diffstat:
         M x.c                                 |      56 +++++++++++++++++--------------
       
       1 file changed, 30 insertions(+), 26 deletions(-)
       ---
 (DIR) diff --git a/x.c b/x.c
       @@ -83,6 +83,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 */
       @@ -358,7 +359,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;
        }
       @@ -366,7 +367,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;
        }
       @@ -793,6 +794,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);
       @@ -933,8 +937,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;
       @@ -1228,8 +1232,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)
       @@ -1314,7 +1318,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;
       @@ -1447,7 +1451,7 @@ void
        xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y, int dmode)
        {
                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;
       @@ -1550,17 +1554,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
            if (dmode & DRAW_BG) {
                /* 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);
                /* Fill the background */
                XftDrawRect(xw.draw, bg, winx, winy, width, win.ch);
       @@ -1649,35 +1653,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);
                }
        }