diff options
| author | Luke Smith <luke@lukesmith.xyz> | 2019-12-14 17:22:21 -0500 | 
|---|---|---|
| committer | Luke Smith <luke@lukesmith.xyz> | 2019-12-14 17:22:21 -0500 | 
| commit | 336c411392219497f21fa615d2b1570b4619db3c (patch) | |
| tree | 02a6058488b624aace96e6ca6699f3ef51a14e22 /fibonacci.c | |
| parent | 23d66b0e0be9ad4a36f8a6199e248b842e6d2358 (diff) | |
fibonacci patch
Diffstat (limited to 'fibonacci.c')
| -rw-r--r-- | fibonacci.c | 66 | 
1 files changed, 66 insertions, 0 deletions
diff --git a/fibonacci.c b/fibonacci.c new file mode 100644 index 0000000..fce0a57 --- /dev/null +++ b/fibonacci.c @@ -0,0 +1,66 @@ +void +fibonacci(Monitor *mon, int s) { +	unsigned int i, n, nx, ny, nw, nh; +	Client *c; + +	for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++); +	if(n == 0) +		return; +	 +	nx = mon->wx; +	ny = 0; +	nw = mon->ww; +	nh = mon->wh; +	 +	for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) { +		if((i % 2 && nh / 2 > 2 * c->bw) +		   || (!(i % 2) && nw / 2 > 2 * c->bw)) { +			if(i < n - 1) { +				if(i % 2) +					nh /= 2; +				else +					nw /= 2; +				if((i % 4) == 2 && !s) +					nx += nw; +				else if((i % 4) == 3 && !s) +					ny += nh; +			} +			if((i % 4) == 0) { +				if(s) +					ny += nh; +				else +					ny -= nh; +			} +			else if((i % 4) == 1) +				nx += nw; +			else if((i % 4) == 2) +				ny += nh; +			else if((i % 4) == 3) { +				if(s) +					nx += nw; +				else +					nx -= nw; +			} +			if(i == 0) +			{ +				if(n != 1) +					nw = mon->ww * mon->mfact; +				ny = mon->wy; +			} +			else if(i == 1) +				nw = mon->ww - nw; +			i++; +		} +		resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False); +	} +} + +void +dwindle(Monitor *mon) { +	fibonacci(mon, 1); +} + +void +spiral(Monitor *mon) { +	fibonacci(mon, 0); +}  | 
