diff options
Diffstat (limited to 'dwm/chadwm/gaplessgrid.c')
-rw-r--r-- | dwm/chadwm/gaplessgrid.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/dwm/chadwm/gaplessgrid.c b/dwm/chadwm/gaplessgrid.c new file mode 100644 index 0000000..b46d408 --- /dev/null +++ b/dwm/chadwm/gaplessgrid.c @@ -0,0 +1,37 @@ +void +gaplessgrid(Monitor *m) +{ + unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch; + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) + ; + if (n == 0) + return; + + /* grid dimensions */ + for (cols = 0; cols <= n / 2; cols++) + if (cols * cols >= n) + break; + if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ + cols = 2; + rows = n / cols; + + /* window geometries */ + cw = cols ? m->ww / cols : m->ww; + cn = 0; /* current column number */ + rn = 0; /* current row number */ + for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { + if (i / rows + 1 > cols - n % cols) + rows = n / cols + 1; + ch = rows ? m->wh / rows : m->wh; + cx = m->wx + cn * cw; + cy = m->wy + rn * ch; + resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False); + rn++; + if (rn >= rows) { + rn = 0; + cn++; + } + } +} |