summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2019-09-09 18:00:02 +0200
committerbakkeby <[email protected]>2019-09-09 18:00:02 +0200
commit7da1b171699090a771246f62074cdef09dcc2c95 (patch)
tree8d0bdfad957162a84dee1a34ba3f00c5fa99d31f
parente490af0eb2d24e94af67c934e6ae05246ee7c885 (diff)
downloaddwm-flexipatch-7da1b171699090a771246f62074cdef09dcc2c95.tar.gz
dwm-flexipatch-7da1b171699090a771246f62074cdef09dcc2c95.zip
Adding deck layout
-rw-r--r--README.md5
-rw-r--r--config.def.h3
-rw-r--r--patch/deck.c156
-rw-r--r--patch/deck.h1
-rw-r--r--patch/include.c4
-rw-r--r--patch/include.h4
-rw-r--r--patches.h7
7 files changed, 178 insertions, 2 deletions
diff --git a/README.md b/README.md
index 15153b3..516d8e8 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/patches.h b/patches.h
index 7cfd50f..50115d3 100644
--- a/patches.h
+++ b/patches.h
@@ -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