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 | |
parent | 23d66b0e0be9ad4a36f8a6199e248b842e6d2358 (diff) |
fibonacci patch
-rw-r--r-- | config.def.h | 3 | ||||
-rw-r--r-- | fibonacci.c | 66 |
2 files changed, 69 insertions, 0 deletions
diff --git a/config.def.h b/config.def.h index 884a78e..7c2efdf 100644 --- a/config.def.h +++ b/config.def.h @@ -37,6 +37,7 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ +#include "fibonacci.c" static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ @@ -44,6 +45,8 @@ static const Layout layouts[] = { { "[M]", monocle }, { "|M|", centeredmaster }, { ">M>", centeredfloatingmaster }, + { "[@]", spiral }, + { "[\\]", dwindle }, }; /* key definitions */ 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); +} |