Mercurial > hg > index.fcgi > dwm > dwm-3.6.1-12pba
diff layout.c @ 5:e060ab82b136
gapless grid
author | paulo@thepaulopc |
---|---|
date | Wed, 27 Jan 2010 23:28:29 -0800 |
parents | faa4cb9d7bd6 |
children | 162accc5d36d |
line diff
1.1 --- a/layout.c Fri Apr 24 01:34:17 2009 -0700 1.2 +++ b/layout.c Wed Jan 27 23:28:29 2010 -0800 1.3 @@ -222,43 +222,46 @@ 1.4 1.5 static void 1.6 grid(void) { 1.7 - unsigned int i, n, nx, ny, nw, nh, aw, ah, tw, th, cols, rows; 1.8 + unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch; 1.9 Client *c; 1.10 1.11 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) 1.12 n++; 1.13 + if(n == 0) 1.14 + return; 1.15 1.16 - for(rows = 0; rows <= n/2; rows++) 1.17 - if(rows*rows >= n) 1.18 + /* grid dimensions */ 1.19 + for(cols = 0; cols <= n/2; cols++) 1.20 + if(cols*cols >= n) 1.21 break; 1.22 - cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; 1.23 + if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ 1.24 + cols = 2; 1.25 + rows = n/cols; 1.26 1.27 - th = wah / (rows ? rows : 1); 1.28 - tw = waw / (cols ? cols : 1); 1.29 - nw = tw - 2 * BORDERPX; 1.30 - nh = th - 2 * BORDERPX; 1.31 - 1.32 + /* window geometries */ 1.33 + cw = cols ? waw / cols : waw; 1.34 + cn = 0; /* current column number */ 1.35 + rn = 0; /* current row number */ 1.36 for(i = 0, c = clients; c; c = c->next) 1.37 if(isvisible(c)) { 1.38 - if(c->isbanned) 1.39 - XMoveWindow(dpy, c->win, c->x, c->y); 1.40 - c->isbanned = False; 1.41 - if(c->isversatile) 1.42 - continue; 1.43 - c->ismax = False; 1.44 - nx = (i / rows) * tw; 1.45 - ny = (i % rows) * th + (TOPBAR ? dc.h : 0); 1.46 - /* adjust height and width of last row's and last column's windows */ 1.47 - ah = ((i + 1) % rows == 0) ? wah - th * rows : 0; 1.48 - aw = (i >= rows * (cols - 1)) ? waw - tw * cols : 0; 1.49 - resize(c, nx, ny, nw + aw, nh + ah, False); 1.50 + if(i/rows + 1 > cols - n%cols) 1.51 + rows = n/cols + 1; 1.52 + ch = rows ? wah / rows : wah; 1.53 + cx = cn*cw; 1.54 + cy = (TOPBAR ? dc.h : 0) + rn*ch; 1.55 + resize(c, cx, cy, cw - 2 * BORDERPX, ch - 2 * BORDERPX, False); 1.56 + rn++; 1.57 + if(rn >= rows) { 1.58 + rn = 0; 1.59 + cn++; 1.60 + } 1.61 i++; 1.62 } 1.63 else { 1.64 c->isbanned = True; 1.65 XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); 1.66 } 1.67 - 1.68 + 1.69 if(!sel || !isvisible(sel)) { 1.70 for(c = stack; c && !isvisible(c); c = c->snext); 1.71 focus(c);