diff options
| author | bakkeby <[email protected]> | 2019-09-09 18:00:02 +0200 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2019-09-09 18:00:02 +0200 |
| commit | 7da1b171699090a771246f62074cdef09dcc2c95 (patch) | |
| tree | 8d0bdfad957162a84dee1a34ba3f00c5fa99d31f | |
| parent | e490af0eb2d24e94af67c934e6ae05246ee7c885 (diff) | |
| download | dwm-flexipatch-7da1b171699090a771246f62074cdef09dcc2c95.tar.gz dwm-flexipatch-7da1b171699090a771246f62074cdef09dcc2c95.zip | |
Adding deck layout
| -rw-r--r-- | README.md | 5 | ||||
| -rw-r--r-- | config.def.h | 3 | ||||
| -rw-r--r-- | patch/deck.c | 156 | ||||
| -rw-r--r-- | patch/deck.h | 1 | ||||
| -rw-r--r-- | patch/include.c | 4 | ||||
| -rw-r--r-- | patch/include.h | 4 | ||||
| -rw-r--r-- | patches.h | 7 |
7 files changed, 178 insertions, 2 deletions
@@ -111,4 +111,7 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t - bottomstack layout - [bstackhoriz](https://dwm.suckless.org/patches/bottomstack/) - - bottomstack horizontal layout
\ No newline at end of file + - bottomstack horizontal layout + + - [deck](https://dwm.suckless.org/patches/deck/) + - deck layout
\ No newline at end of file diff --git a/config.def.h b/config.def.h index 83875cd..6e9f373 100644 --- a/config.def.h +++ b/config.def.h @@ -108,6 +108,9 @@ static const Layout layouts[] = { #if BSTACKHORIZ_LAYOUT { "===", bstackhoriz }, #endif // BSTACKHORIZ_LAYOUT + #if DECK_LAYOUT + { "[D]", deck }, + #endif // DECK_LAYOUT #if CYCLELAYOUTS_PATCH { NULL, NULL }, #endif // CYCLELAYOUTS_PATCH diff --git a/patch/deck.c b/patch/deck.c new file mode 100644 index 0000000..5da36a8 --- /dev/null +++ b/patch/deck.c @@ -0,0 +1,156 @@ +#if VANITYGAPS_PATCH && CFACTS_PATCH +static void +deck(Monitor *m) +{ + unsigned int i, n; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + int oh, ov, ih, iv; + float mfacts, sfacts; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts); + + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); + sw = mw = m->ww - 2*ov; + + if (m->nmaster && n > m->nmaster) { + sw = (mw - iv) * (1 - m->mfact); + mw = (mw - iv) * m->mfact; + sx = mx + mw + iv; + sh = m->wh - 2*oh; + } + + if (n - m->nmaster > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0); + my += HEIGHT(c) + ih; + } else { + resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); + } +} +#elif VANITYGAPS_PATCH +static void +deck(Monitor *m) +{ + unsigned int i, n; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + int oh, ov, ih, iv; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); + sw = mw = m->ww - 2*ov; + + if (m->nmaster && n > m->nmaster) { + sw = (mw - iv) * (1 - m->mfact); + mw = (mw - iv) * m->mfact; + sx = mx + mw + iv; + sh = m->wh - 2*oh; + } + + if (n - m->nmaster > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), mh / MIN(n, m->nmaster) - (2*c->bw), 0); + my += HEIGHT(c) + ih; + } else { + resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); + } +} +#elif CFACTS_PATCH +static void +deck(Monitor *m) +{ + unsigned int i, n; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + float mfacts = 1, sfacts = 1; + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { + if (n < m->nmaster) + mfacts += c->cfact; + else + sfacts += c->cfact; + } + + if (n == 0) + return; + + sx = mx = m->wx; + sy = my = m->wy; + sh = mh = m->wh; + sw = mw = m->ww; + + if (m->nmaster && n > m->nmaster) { + sw = mw * (1 - m->mfact); + mw = mw * m->mfact; + sx = mx + mw; + } + + if (n - m->nmaster > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0); + my += HEIGHT(c); + } else { + resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); + } +} +#else +static void +deck(Monitor *m) +{ + unsigned int i, n; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + + if (n == 0) + return; + + sx = mx = m->wx; + sy = my = m->wy; + sh = mh = m->wh; + sw = mw = m->ww; + + if (m->nmaster && n > m->nmaster) { + sw = mw * (1 - m->mfact); + mw = mw * m->mfact; + sx = mx + mw; + } + + if (n - m->nmaster > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), mh / MIN(n, m->nmaster) - (2*c->bw), 0); + my += HEIGHT(c); + } else { + resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); + } +} +#endif
\ No newline at end of file diff --git a/patch/deck.h b/patch/deck.h new file mode 100644 index 0000000..abedeb2 --- /dev/null +++ b/patch/deck.h @@ -0,0 +1 @@ +static void deck(Monitor *m);
\ No newline at end of file diff --git a/patch/include.c b/patch/include.c index b333fbc..3eedd7a 100644 --- a/patch/include.c +++ b/patch/include.c @@ -62,6 +62,10 @@ #include "bstackhoriz.c" #endif +#if DECK_LAYOUT +#include "deck.c" +#endif + #if MONOCLE_LAYOUT #include "monocle.c" #endif diff --git a/patch/include.h b/patch/include.h index bd68e54..3618492 100644 --- a/patch/include.h +++ b/patch/include.h @@ -58,6 +58,10 @@ #include "bstackhoriz.h" #endif +#if DECK_LAYOUT +#include "deck.h" +#endif + #if MONOCLE_LAYOUT #include "monocle.h" #endif @@ -197,12 +197,17 @@ */ #define BSTACKHORIZ_LAYOUT 0 +/* Deck layout. + * https://dwm.suckless.org/patches/deck/ + */ +#define DECK_LAYOUT 1 + /* The default tile layout. * This can be optionally disabled in favour of other layouts. */ #define TILE_LAYOUT 1 -/* Monocle (default) +/* Monocle layout (default). * This can be optionally disabled in favour of other layouts. */ #define MONOCLE_LAYOUT 1
\ No newline at end of file |
