summaryrefslogtreecommitdiff
path: root/dwm.c
diff options
context:
space:
mode:
authorrafa_99 <rafa99@protonmail.com>2021-04-13 00:21:31 +0100
committerrafa_99 <rafa99@protonmail.com>2021-04-13 00:21:31 +0100
commitd40c4b28a53d8aea7ae0414ffe5954c89d446a6b (patch)
treec448851aeb58d35f1b894a491d057810de4b6039 /dwm.c
parenta4554f1d8328aed183be5a27116f24db044cf29d (diff)
Fibonacci Layout Patch
Diffstat (limited to 'dwm.c')
-rw-r--r--dwm.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/dwm.c b/dwm.c
index 5a0ffd9..0fba3dc 100644
--- a/dwm.c
+++ b/dwm.c
@@ -236,6 +236,8 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
static void centeredmaster(Monitor *m);
static void centeredfloatingmaster(Monitor *m);
+static void dwindle(Monitor *mon);
+static void spiral(Monitor *mon);
/* variables */
static const char broken[] = "broken";
@@ -2255,3 +2257,68 @@ centeredfloatingmaster(Monitor *m)
tx += WIDTH(c);
}
}
+
+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);
+}