aboutsummaryrefslogtreecommitdiff
path: root/dwm/chadwm/fibonacci.c
diff options
context:
space:
mode:
Diffstat (limited to 'dwm/chadwm/fibonacci.c')
-rw-r--r--dwm/chadwm/fibonacci.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/dwm/chadwm/fibonacci.c b/dwm/chadwm/fibonacci.c
new file mode 100644
index 0000000..658f1c3
--- /dev/null
+++ b/dwm/chadwm/fibonacci.c
@@ -0,0 +1,68 @@
+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);
+}