diff options
| author | bakkeby <[email protected]> | 2019-09-09 19:49:41 +0200 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2019-09-09 19:49:41 +0200 |
| commit | 973d64f51be939daa50d85151262d8602e09e978 (patch) | |
| tree | 957df0a904f3c9eb0fccc9445e025f5b39afb75e /patch | |
| parent | 342fc03b885413510257cfbfeef5c0e2eb6691fb (diff) | |
| download | dwm-flexipatch-973d64f51be939daa50d85151262d8602e09e978.tar.gz dwm-flexipatch-973d64f51be939daa50d85151262d8602e09e978.zip | |
Adding nrowgrid layout
Diffstat (limited to 'patch')
| -rw-r--r-- | patch/include.c | 4 | ||||
| -rw-r--r-- | patch/include.h | 4 | ||||
| -rw-r--r-- | patch/nrowgrid.c | 103 | ||||
| -rw-r--r-- | patch/nrowgrid.h | 1 |
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 |
