void tile(Monitor *m) { unsigned int i, n, h, mw, my, ty; Client *c; for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); if (n == 0) return; if (n > m->nmaster) mw = m->nmaster ? m->ww * m->mfact : 0; else mw = m->ww - gappx; for (i = 0, my = ty = gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { h = (m->wh - my) / (MIN(n, m->nmaster) - i) - gappx; resize(c, m->wx + gappx, m->wy + my, mw - (2*c->bw) - gappx, h - (2*c->bw), 0); if (my + HEIGHT(c) + gappx < m->wh) my += HEIGHT(c) + gappx; } else { h = (m->wh - ty) / (n - i) - gappx; resize(c, m->wx + mw + gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*gappx, h - (2*c->bw), 0); if (ty + HEIGHT(c) + gappx < m->wh) ty += HEIGHT(c) + gappx; } } void monocle(Monitor *m) { unsigned int n = 0; Client *c; for (c = m->clients; c; c = c->next) if (ISVISIBLE(c)) n++; if (n > 0) /* override layout symbol */ snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); } 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 - gappx) / cols : m->ww - gappx; 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 - gappx) / rows : m->wh - gappx; cx = m->wx + cn*cw; cy = m->wy + rn*ch; resize(c, cx + gappx, cy + gappx, cw - 2 * c->bw - gappx, ch - 2 * c->bw - gappx, False); rn++; if(rn >= rows) { rn = 0; cn++; } } }