You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.1 KiB
66 lines
1.1 KiB
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); |
|
}
|
|
|