st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
patches/st-anysize-20220718-baa9357.diff (5373B)
   1 From 8dcdc4b21a73268e167d98aa30f24315c7f3b7ff Mon Sep 17 00:00:00 2001
   2 From: Bakkeby <bakkeby@gmail.com>
   3 Date: Mon, 18 Jul 2022 16:52:03 +0200
   4 Subject: [PATCH] Adding anysize patch
   5 
   6 ---
   7  x.c | 56 ++++++++++++++++++++++++++++++--------------------------
   8  1 file changed, 30 insertions(+), 26 deletions(-)
   9 
  10 diff --git a/x.c b/x.c
  11 index 2a3bd38..f534347 100644
  12 --- a/x.c
  13 +++ b/x.c
  14 @@ -81,6 +81,7 @@ typedef XftGlyphFontSpec GlyphFontSpec;
  15  typedef struct {
  16      int tw, th; /* tty width and height */
  17      int w, h; /* window width and height */
  18 +    int hborderpx, vborderpx;
  19      int ch; /* char height */
  20      int cw; /* char width  */
  21      int mode; /* window state/mode flags */
  22 @@ -331,7 +332,7 @@ ttysend(const Arg *arg)
  23  int
  24  evcol(XEvent *e)
  25  {
  26 -    int x = e->xbutton.x - borderpx;
  27 +    int x = e->xbutton.x - win.hborderpx;
  28      LIMIT(x, 0, win.tw - 1);
  29      return x / win.cw;
  30  }
  31 @@ -339,7 +340,7 @@ evcol(XEvent *e)
  32  int
  33  evrow(XEvent *e)
  34  {
  35 -    int y = e->xbutton.y - borderpx;
  36 +    int y = e->xbutton.y - win.vborderpx;
  37      LIMIT(y, 0, win.th - 1);
  38      return y / win.ch;
  39  }
  40 @@ -739,6 +740,9 @@ cresize(int width, int height)
  41      col = MAX(1, col);
  42      row = MAX(1, row);
  43  
  44 +    win.hborderpx = (win.w - col * win.cw) / 2;
  45 +    win.vborderpx = (win.h - row * win.ch) / 2;
  46 +
  47      tresize(col, row);
  48      xresize(col, row);
  49      ttyresize(win.tw, win.th);
  50 @@ -869,8 +873,8 @@ xhints(void)
  51      sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize;
  52      sizeh->height = win.h;
  53      sizeh->width = win.w;
  54 -    sizeh->height_inc = win.ch;
  55 -    sizeh->width_inc = win.cw;
  56 +    sizeh->height_inc = 1;
  57 +    sizeh->width_inc = 1;
  58      sizeh->base_height = 2 * borderpx;
  59      sizeh->base_width = 2 * borderpx;
  60      sizeh->min_height = win.ch + 2 * borderpx;
  61 @@ -1152,8 +1156,8 @@ xinit(int cols, int rows)
  62      xloadcols();
  63  
  64      /* adjust fixed window geometry */
  65 -    win.w = 2 * borderpx + cols * win.cw;
  66 -    win.h = 2 * borderpx + rows * win.ch;
  67 +    win.w = 2 * win.hborderpx + 2 * borderpx + cols * win.cw;
  68 +    win.h = 2 * win.vborderpx + 2 * borderpx + rows * win.ch;
  69      if (xw.gm & XNegative)
  70          xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
  71      if (xw.gm & YNegative)
  72 @@ -1242,7 +1246,7 @@ xinit(int cols, int rows)
  73  int
  74  xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y)
  75  {
  76 -    float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp;
  77 +    float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp;
  78      ushort mode, prevmode = USHRT_MAX;
  79      Font *font = &dc.font;
  80      int frcflags = FRC_NORMAL;
  81 @@ -1375,7 +1379,7 @@ void
  82  xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)
  83  {
  84      int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1);
  85 -    int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch,
  86 +    int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch,
  87          width = charlen * win.cw;
  88      Color *fg, *bg, *temp, revfg, revbg, truefg, truebg;
  89      XRenderColor colfg, colbg;
  90 @@ -1465,17 +1469,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
  91  
  92      /* Intelligent cleaning up of the borders. */
  93      if (x == 0) {
  94 -        xclear(0, (y == 0)? 0 : winy, borderpx,
  95 +        xclear(0, (y == 0)? 0 : winy, win.hborderpx,
  96              winy + win.ch +
  97 -            ((winy + win.ch >= borderpx + win.th)? win.h : 0));
  98 +            ((winy + win.ch >= win.vborderpx + win.th)? win.h : 0));
  99      }
 100 -    if (winx + width >= borderpx + win.tw) {
 101 +    if (winx + width >= win.hborderpx + win.tw) {
 102          xclear(winx + width, (y == 0)? 0 : winy, win.w,
 103 -            ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
 104 +            ((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch)));
 105      }
 106      if (y == 0)
 107 -        xclear(winx, 0, winx + width, borderpx);
 108 -    if (winy + win.ch >= borderpx + win.th)
 109 +        xclear(winx, 0, winx + width, win.vborderpx);
 110 +    if (winy + win.ch >= win.vborderpx + win.th)
 111          xclear(winx, winy + win.ch, winx + width, win.h);
 112  
 113      /* Clean up the region we want to draw to. */
 114 @@ -1569,35 +1573,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
 115          case 3: /* Blinking Underline */
 116          case 4: /* Steady Underline */
 117              XftDrawRect(xw.draw, &drawcol,
 118 -                    borderpx + cx * win.cw,
 119 -                    borderpx + (cy + 1) * win.ch - \
 120 +                    win.hborderpx + cx * win.cw,
 121 +                    win.vborderpx + (cy + 1) * win.ch - \
 122                          cursorthickness,
 123                      win.cw, cursorthickness);
 124              break;
 125          case 5: /* Blinking bar */
 126          case 6: /* Steady bar */
 127              XftDrawRect(xw.draw, &drawcol,
 128 -                    borderpx + cx * win.cw,
 129 -                    borderpx + cy * win.ch,
 130 +                    win.hborderpx + cx * win.cw,
 131 +                    win.vborderpx + cy * win.ch,
 132                      cursorthickness, win.ch);
 133              break;
 134          }
 135      } else {
 136          XftDrawRect(xw.draw, &drawcol,
 137 -                borderpx + cx * win.cw,
 138 -                borderpx + cy * win.ch,
 139 +                win.hborderpx + cx * win.cw,
 140 +                win.vborderpx + cy * win.ch,
 141                  win.cw - 1, 1);
 142          XftDrawRect(xw.draw, &drawcol,
 143 -                borderpx + cx * win.cw,
 144 -                borderpx + cy * win.ch,
 145 +                win.hborderpx + cx * win.cw,
 146 +                win.vborderpx + cy * win.ch,
 147                  1, win.ch - 1);
 148          XftDrawRect(xw.draw, &drawcol,
 149 -                borderpx + (cx + 1) * win.cw - 1,
 150 -                borderpx + cy * win.ch,
 151 +                win.hborderpx + (cx + 1) * win.cw - 1,
 152 +                win.vborderpx + cy * win.ch,
 153                  1, win.ch - 1);
 154          XftDrawRect(xw.draw, &drawcol,
 155 -                borderpx + cx * win.cw,
 156 -                borderpx + (cy + 1) * win.ch - 1,
 157 +                win.hborderpx + cx * win.cw,
 158 +                win.vborderpx + (cy + 1) * win.ch - 1,
 159                  win.cw, 1);
 160      }
 161  }
 162 -- 
 163 2.37.1
 164