From a039af0a87317d45ae5c15ae45469026385799ae Mon Sep 17 00:00:00 2001 From: BitHeaven Date: Fri, 31 May 2024 11:05:30 +0500 Subject: [PATCH] Move layouts to layouts.c --- PATCHES | 1 + config.def.h | 2 ++ dwm.c | 43 -------------------------------- layouts.c | 69 ++-------------------------------------------------- 4 files changed, 5 insertions(+), 110 deletions(-) diff --git a/PATCHES b/PATCHES index 1124220..1b1e548 100644 --- a/PATCHES +++ b/PATCHES @@ -4,4 +4,5 @@ fullgaps status2d extrabar +grid gaplessgrid diff --git a/config.def.h b/config.def.h index 1507a8d..5362c8a 100644 --- a/config.def.h +++ b/config.def.h @@ -63,6 +63,8 @@ static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ +#include "layouts.c" + static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ diff --git a/dwm.c b/dwm.c index 6af7a32..41cd5a3 100644 --- a/dwm.c +++ b/dwm.c @@ -1115,21 +1115,6 @@ maprequest(XEvent *e) manage(ev->window, &wa); } -void -monocle(Monitor *m) -{ - unsigned int n = 0; - Client *c; - - for (c = m->clients; c; c = c->next) - if (ISVISIBLE(c)) - n++; - if (n > 0) /* override layout symbol */ - snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); - for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) - resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); -} - void motionnotify(XEvent *e) { @@ -1714,34 +1699,6 @@ tagmon(const Arg *arg) sendmon(selmon->sel, dirtomon(arg->i)); } -void -tile(Monitor *m) -{ - unsigned int i, n, h, mw, my, ty; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - if (n == 0) - return; - - if (n > m->nmaster) - mw = m->nmaster ? m->ww * m->mfact : 0; - else - mw = m->ww - m->gappx; - for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < m->nmaster) { - h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; - resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0); - if (my + HEIGHT(c) + m->gappx < m->wh) - my += HEIGHT(c) + m->gappx; - } else { - h = (m->wh - ty) / (n - i) - m->gappx; - resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappx, h - (2*c->bw), 0); - if (ty + HEIGHT(c) + m->gappx < m->wh) - ty += HEIGHT(c) + m->gappx; - } -} - void togglebar(const Arg *arg) { diff --git a/layouts.c b/layouts.c index c33311b..7865780 100644 --- a/layouts.c +++ b/layouts.c @@ -1,68 +1,3 @@ -// TODO: FIX GAPS IN GRID LAYOUT -void -grid(Monitor *m) { - unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows; - Client *c; - - for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) - n++; - - /* grid dimensions */ - for(rows = 0; rows <= n/2; rows++) - if(rows*rows >= n) - break; - cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; - - /* window geoms (cell height/width) */ - ch = (m->wh - m->gappx) / (rows ? rows : 1); - cw = (m->ww - m->gappx) / (cols ? cols : 1); - for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { - cx = m->wx + (i / rows) * cw; - cy = m->wy + (i % rows) * ch; - /* adjust height/width of last row/column's windows */ - ah = ((i + 1) % rows == 0) ? m->wh - m->gappx * (rows + 1) - ch * rows : 0; - aw = (i >= rows * (cols - 1)) ? m->ww - m->gappx * (cols + 1) - cw * cols : 0; - resize(c, cx + m->gappx * (i / rows + 1), cy + m->gappx * (i % rows + 1), cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False); - i++; - } -} - -void -gaplessgrid(Monitor *m) { - unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch; - Client *c; - - for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ; - if(n == 0) - return; - - /* grid dimensions */ - for(cols = 0; cols <= n/2; cols++) - if(cols*cols >= n) - break; - if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ - cols = 2; - rows = n/cols; - - /* window geometries */ - cw = cols ? (m->ww - m->gappx) / cols : m->ww - m->gappx; - cn = 0; /* current column number */ - rn = 0; /* current row number */ - for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { - if(i/rows + 1 > cols - n%cols) - rows = n/cols + 1; - ch = rows ? (m->wh - m->gappx) / rows : m->wh - m->gappx; - cx = m->wx + cn*cw; - cy = m->wy + rn*ch; - resize(c, cx + m->gappx, cy + m->gappx, cw - 2 * c->bw - m->gappx, ch - 2 * c->bw - m->gappx, False); - rn++; - if(rn >= rows) { - rn = 0; - cn++; - } - } -} - void tile(Monitor *m) { @@ -78,12 +13,12 @@ tile(Monitor *m) else mw = m->ww - m->gappx; for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < m->nmaster) { + if (i < m->nmaster) { h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0); if (my + HEIGHT(c) + m->gappx < m->wh) my += HEIGHT(c) + m->gappx; - } else { + } else { h = (m->wh - ty) / (n - i) - m->gappx; resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappx, h - (2*c->bw), 0); if (ty + HEIGHT(c) + m->gappx < m->wh)