From 064e1d48631cd9b03f32b42d7be79677197ee42f Mon Sep 17 00:00:00 2001 From: Marshall Mason Date: Mon, 9 Nov 2015 12:38:28 -0800 Subject: [PATCH] Added horizgrid function --- config.def.h | 2 ++ horizgrid.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 horizgrid.c diff --git a/config.def.h b/config.def.h index eaae8f3..c2ad519 100644 --- a/config.def.h +++ b/config.def.h @@ -36,11 +36,13 @@ 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 Bool resizehints = True; /* True means respect size hints in tiled resizals */ +#include "horizgrid.c" static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "###", horizgrid }, }; /* key definitions */ diff --git a/horizgrid.c b/horizgrid.c new file mode 100644 index 0000000..51ce0f8 --- /dev/null +++ b/horizgrid.c @@ -0,0 +1,32 @@ +void +horizgrid(Monitor *m) { + Client *c; + unsigned int n, i; + int w = 0; + int ntop, nbottom = 0; + + /* Count windows */ + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + + if(n == 0) + return; + else if(n == 1) { /* Just fill the whole screen */ + c = nexttiled(m->clients); + resize(c, m->wx, m->wy, m->ww - (2*c->bw), m->wh - (2*c->bw), False); + } else if(n == 2) { /* Split vertically */ + w = m->ww / 2; + c = nexttiled(m->clients); + resize(c, m->wx, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); + c = nexttiled(c->next); + resize(c, m->wx + w, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); + } else { + ntop = n / 2; + nbottom = n - ntop; + for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + if(i < ntop) + resize(c, m->wx + i * m->ww / ntop, m->wy, m->ww / ntop - (2*c->bw), m->wh / 2 - (2*c->bw), False); + else + resize(c, m->wx + (i - ntop) * m->ww / nbottom, m->wy + m->wh / 2, m->ww / nbottom - (2*c->bw), m->wh / 2 - (2*c->bw), False); + } + } +} -- 2.1.4