dwm

my build of dwm
git clone git://git.ckyln.com/~cem/dwm.git
Log | Files | Refs | README | LICENSE

fibonacci.c (1100B)


      1 void
      2 fibonacci(Monitor *mon, int s) {
      3 	unsigned int i, n, nx, ny, nw, nh;
      4 	Client *c;
      5 
      6 	for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
      7 	if(n == 0)
      8 		return;
      9 	
     10 	nx = mon->wx;
     11 	ny = 0;
     12 	nw = mon->ww;
     13 	nh = mon->wh;
     14 	
     15 	for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
     16 		if((i % 2 && nh / 2 > 2 * c->bw)
     17 		   || (!(i % 2) && nw / 2 > 2 * c->bw)) {
     18 			if(i < n - 1) {
     19 				if(i % 2)
     20 					nh /= 2;
     21 				else
     22 					nw /= 2;
     23 				if((i % 4) == 2 && !s)
     24 					nx += nw;
     25 				else if((i % 4) == 3 && !s)
     26 					ny += nh;
     27 			}
     28 			if((i % 4) == 0) {
     29 				if(s)
     30 					ny += nh;
     31 				else
     32 					ny -= nh;
     33 			}
     34 			else if((i % 4) == 1)
     35 				nx += nw;
     36 			else if((i % 4) == 2)
     37 				ny += nh;
     38 			else if((i % 4) == 3) {
     39 				if(s)
     40 					nx += nw;
     41 				else
     42 					nx -= nw;
     43 			}
     44 			if(i == 0)
     45 			{
     46 				if(n != 1)
     47 					nw = mon->ww * mon->mfact;
     48 				ny = mon->wy;
     49 			}
     50 			else if(i == 1)
     51 				nw = mon->ww - nw;
     52 			i++;
     53 		}
     54 		resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
     55 	}
     56 }
     57 
     58 void
     59 dwindle(Monitor *mon) {
     60 	fibonacci(mon, 1);
     61 }
     62 
     63 void
     64 spiral(Monitor *mon) {
     65 	fibonacci(mon, 0);
     66 }