summaryrefslogtreecommitdiffhomepage
path: root/patch
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2019-09-09 19:49:41 +0200
committerbakkeby <[email protected]>2019-09-09 19:49:41 +0200
commit973d64f51be939daa50d85151262d8602e09e978 (patch)
tree957df0a904f3c9eb0fccc9445e025f5b39afb75e /patch
parent342fc03b885413510257cfbfeef5c0e2eb6691fb (diff)
downloaddwm-flexipatch-973d64f51be939daa50d85151262d8602e09e978.tar.gz
dwm-flexipatch-973d64f51be939daa50d85151262d8602e09e978.zip
Adding nrowgrid layout
Diffstat (limited to 'patch')
-rw-r--r--patch/include.c4
-rw-r--r--patch/include.h4
-rw-r--r--patch/nrowgrid.c103
-rw-r--r--patch/nrowgrid.h1
4 files changed, 112 insertions, 0 deletions
diff --git a/patch/include.c b/patch/include.c
index 3eb8ae9..2cd434e 100644
--- a/patch/include.c
+++ b/patch/include.c
@@ -86,6 +86,10 @@
#include "monocle.c"
#endif
+#if NROWGRID_LAYOUT
+#include "nrowgrid.c"
+#endif
+
#if TILE_LAYOUT
#include "tile.c"
#endif \ No newline at end of file
diff --git a/patch/include.h b/patch/include.h
index a5bafa6..280b27a 100644
--- a/patch/include.h
+++ b/patch/include.h
@@ -82,6 +82,10 @@
#include "monocle.h"
#endif
+#if NROWGRID_LAYOUT
+#include "nrowgrid.h"
+#endif
+
#if TILE_LAYOUT
#include "tile.h"
#endif \ No newline at end of file
diff --git a/patch/nrowgrid.c b/patch/nrowgrid.c
new file mode 100644
index 0000000..5709d80
--- /dev/null
+++ b/patch/nrowgrid.c
@@ -0,0 +1,103 @@
+#if VANITYGAPS_PATCH
+void
+nrowgrid(Monitor *m)
+{
+ unsigned int n = 0, i = 0, ri = 0, ci = 0; /* counters */
+ int oh, ov, ih, iv; /* vanitygap settings */
+ unsigned int cx, cy, cw, ch; /* client geometry */
+ unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */
+ unsigned int cols, rows = m->nmaster + 1;
+ Client *c;
+
+ /* count clients */
+ getgaps(m, &oh, &ov, &ih, &iv, &n);
+
+ /* nothing to do here */
+ if (n == 0)
+ return;
+
+ /* force 2 clients to always split vertically */
+ if (FORCE_VSPLIT && n == 2)
+ rows = 1;
+
+ /* never allow empty rows */
+ if (n < rows)
+ rows = n;
+
+ /* define first row */
+ cols = n / rows;
+ uc = cols;
+ cy = m->wy + oh;
+ ch = (m->wh - 2*oh - ih*(rows - 1)) / rows;
+ uh = ch;
+
+ for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
+ if (ci == cols) {
+ uw = 0;
+ ci = 0;
+ ri++;
+
+ /* next row */
+ cols = (n - uc) / (rows - ri);
+ uc += cols;
+ cy = m->wy + oh + uh + ih;
+ uh += ch + ih;
+ }
+
+ cx = m->wx + ov + uw;
+ cw = (m->ww - 2*ov - uw) / (cols - ci);
+ uw += cw + iv;
+
+ resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0);
+ }
+}
+#else
+void
+nrowgrid(Monitor *m)
+{
+ unsigned int n = 0, i = 0, ri = 0, ci = 0; /* counters */
+ unsigned int cx, cy, cw, ch; /* client geometry */
+ unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */
+ unsigned int cols, rows = m->nmaster + 1;
+ Client *c;
+
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
+
+ /* force 2 clients to always split vertically */
+ if (FORCE_VSPLIT && n == 2)
+ rows = 1;
+
+ /* never allow empty rows */
+ if (n < rows)
+ rows = n;
+
+ /* define first row */
+ cols = n / rows;
+ uc = cols;
+ cy = m->wy;
+ ch = m->wh / rows;
+ uh = ch;
+
+ for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
+ if (ci == cols) {
+ uw = 0;
+ ci = 0;
+ ri++;
+
+ /* next row */
+ cols = (n - uc) / (rows - ri);
+ uc += cols;
+ cy = m->wy + uh;
+ uh += ch;
+ }
+
+ cx = m->wx + uw;
+ cw = (m->ww - uw) / (cols - ci);
+ uw += cw;
+
+ resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0);
+ }
+}
+#endif \ No newline at end of file
diff --git a/patch/nrowgrid.h b/patch/nrowgrid.h
new file mode 100644
index 0000000..de71a50
--- /dev/null
+++ b/patch/nrowgrid.h
@@ -0,0 +1 @@
+static void nrowgrid(Monitor *m); \ No newline at end of file