Added new layout with three columns, wide master in the middle.
[dwm] / tcl.c
diff --git a/tcl.c b/tcl.c
new file mode 100644 (file)
index 0000000..4c94914
--- /dev/null
+++ b/tcl.c
@@ -0,0 +1,74 @@
+void
+tcl(Monitor * m)
+{
+       int x, y, h, w, mw, sw, bdw;
+       unsigned int i, n;
+       Client * c;
+
+       for (n = 0, c = nexttiled(m->clients); c;
+               c = nexttiled(c->next), n++);
+
+       if (n == 0)
+               return;
+
+       c = nexttiled(m->clients);
+
+       mw = m->mfact * m->ww;
+       sw = (m->ww - mw) / 2;
+       bdw = (2 * c->bw);
+       resize(c,
+              n < 3 ? m->wx : m->wx + sw,
+              m->wy,
+              n == 1 ? m->ww - bdw : mw - bdw,
+              m->wh - bdw,
+              False);
+
+       if (--n == 0)
+               return;
+
+       w = (m->ww - mw) / ((n > 1) + 1);
+       c = nexttiled(c->next);
+
+       if (n > 1)
+       {
+               x = m->wx + ((n > 1) ? mw + sw : mw);
+               y = m->wy;
+               h = m->wh / (n / 2);
+
+               if (h < bh)
+                       h = m->wh;
+
+               for (i = 0; c && i < n / 2; c = nexttiled(c->next), i++)
+               {
+                       resize(c,
+                              x,
+                              y,
+                              w - bdw,
+                              (i + 1 == n / 2) ? m->wy + m->wh - y - bdw : h - bdw,
+                              False);
+
+                       if (h != m->wh)
+                               y = c->y + HEIGHT(c);
+               }
+       }
+
+       x = (n + 1 / 2) == 1 ? mw : m->wx;
+       y = m->wy;
+       h = m->wh / ((n + 1) / 2);
+
+       if (h < bh)
+               h = m->wh;
+
+       for (i = 0; c; c = nexttiled(c->next), i++)
+       {
+               resize(c,
+                      x,
+                      y,
+                      (i + 1 == (n + 1) / 2) ? w - bdw : w - bdw,
+                      (i + 1 == (n + 1) / 2) ? m->wy + m->wh - y - bdw : h - bdw,
+                      False);
+
+               if (h != m->wh)
+                       y = c->y + HEIGHT(c);
+       }
+}