mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
Adding gappless grid layout
This commit is contained in:
parent
cccb8fcecb
commit
9081aef748
@ -11,7 +11,7 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
|||||||
|
|
||||||
### Changelog:
|
### Changelog:
|
||||||
|
|
||||||
2019-09-09 - Added deck, fibonacci (dwindle and spiral) layouts
|
2019-09-09 - Added deck, fibonacci (dwindle and spiral) and gapplessgrid layouts
|
||||||
|
|
||||||
2019-09-08 - Added cfacts and vanitygaps patches, added bstack and bstackhoriz layouts
|
2019-09-08 - Added cfacts and vanitygaps patches, added bstack and bstackhoriz layouts
|
||||||
|
|
||||||
@ -120,3 +120,6 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
|||||||
|
|
||||||
- [fibonacci](https://dwm.suckless.org/patches/fibonacci/)
|
- [fibonacci](https://dwm.suckless.org/patches/fibonacci/)
|
||||||
- fibonacci (dwindle and spiral) layouts
|
- fibonacci (dwindle and spiral) layouts
|
||||||
|
|
||||||
|
- [gapplessgrid](https://dwm.suckless.org/patches/gaplessgrid/)
|
||||||
|
- gappless grid layout
|
@ -9,7 +9,8 @@ bstack(Monitor *m)
|
|||||||
float mfacts, sfacts;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts);
|
getgaps(m, &oh, &ov, &ih, &iv, &n);
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
@ -81,19 +82,15 @@ bstack(Monitor *m)
|
|||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
int mx = 0, my = 0, mh = 0, mw = 0;
|
int mx = 0, my = 0, mh = 0, mw = 0;
|
||||||
int sx = 0, sy = 0, sh = 0, sw = 0;
|
int sx = 0, sy = 0, sh = 0, sw = 0;
|
||||||
float mfacts = 1, sfacts = 1;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
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)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
sx = mx = m->wx;
|
sx = mx = m->wx;
|
||||||
sy = my = m->wy;
|
sy = my = m->wy;
|
||||||
sh = mh = m->wh;
|
sh = mh = m->wh;
|
||||||
|
@ -9,7 +9,8 @@ bstackhoriz(Monitor *m)
|
|||||||
float mfacts, sfacts;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts);
|
getgaps(m, &oh, &ov, &ih, &iv, &n);
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
@ -82,19 +83,15 @@ bstackhoriz(Monitor *m)
|
|||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
int mx = 0, my = 0, mh = 0, mw = 0;
|
int mx = 0, my = 0, mh = 0, mw = 0;
|
||||||
int sx = 0, sy = 0, sh = 0, sw = 0;
|
int sx = 0, sy = 0, sh = 0, sw = 0;
|
||||||
float mfacts = 1, sfacts = 1;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
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)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
sx = mx = m->wx;
|
sx = mx = m->wx;
|
||||||
sy = my = m->wy;
|
sy = my = m->wy;
|
||||||
sh = mh = m->wh;
|
sh = mh = m->wh;
|
||||||
|
@ -15,3 +15,19 @@ setcfact(const Arg *arg) {
|
|||||||
c->cfact = f;
|
c->cfact = f;
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
getfacts(Monitor *m, float *mf, float *sf)
|
||||||
|
{
|
||||||
|
float mfacts = 0, sfacts = 0;
|
||||||
|
Client *c;
|
||||||
|
|
||||||
|
for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
|
||||||
|
if (!m->nmaster || n < m->nmaster)
|
||||||
|
mfacts += c->cfact;
|
||||||
|
else
|
||||||
|
sfacts += c->cfact;
|
||||||
|
}
|
||||||
|
*mf = mfacts; // total factor of master area
|
||||||
|
*sf = sfacts; // total factor of slave area
|
||||||
|
}
|
@ -1 +1,2 @@
|
|||||||
|
static void getfacts(Monitor *m, float *mf, float *sf)
|
||||||
static void setcfact(const Arg *arg);
|
static void setcfact(const Arg *arg);
|
16
patch/deck.c
16
patch/deck.c
@ -9,7 +9,8 @@ deck(Monitor *m)
|
|||||||
float mfacts, sfacts;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts);
|
getgaps(m, &oh, &ov, &ih, &iv, &n);
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
@ -82,19 +83,15 @@ deck(Monitor *m)
|
|||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
int mx = 0, my = 0, mh = 0, mw = 0;
|
int mx = 0, my = 0, mh = 0, mw = 0;
|
||||||
int sx = 0, sy = 0, sh = 0, sw = 0;
|
int sx = 0, sy = 0, sh = 0, sw = 0;
|
||||||
float mfacts = 1, sfacts = 1;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
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)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
sx = mx = m->wx;
|
sx = mx = m->wx;
|
||||||
sy = my = m->wy;
|
sy = my = m->wy;
|
||||||
sh = mh = m->wh;
|
sh = mh = m->wh;
|
||||||
@ -127,7 +124,6 @@ deck(Monitor *m)
|
|||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
76
patch/gapplessgrid.c
Normal file
76
patch/gapplessgrid.c
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#if VANITYGAPS_PATCH
|
||||||
|
void
|
||||||
|
gaplessgrid(Monitor *m)
|
||||||
|
{
|
||||||
|
unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch;
|
||||||
|
int oh, ov, ih, iv;
|
||||||
|
Client *c;
|
||||||
|
|
||||||
|
getgaps(m, &oh, &ov, &ih, &iv, &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 - 2*ov - iv*(cols - 1)) / cols : m->ww - 2*ov;
|
||||||
|
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 - 2*oh - ih*(rows - 1)) / rows : m->wh - 2*oh;
|
||||||
|
cx = m->wx + ov + cn*(cw + iv);
|
||||||
|
cy = m->wy + oh + rn*(ch + ih);
|
||||||
|
resize(c, cx, cy, cw - 2*c->bw, ch - 2*c->bw, False);
|
||||||
|
rn++;
|
||||||
|
if (rn >= rows) {
|
||||||
|
rn = 0;
|
||||||
|
cn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
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 / cols : m->ww;
|
||||||
|
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 / rows : m->wh;
|
||||||
|
cx = m->wx + cn*cw;
|
||||||
|
cy = m->wy + rn*ch;
|
||||||
|
resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False);
|
||||||
|
rn++;
|
||||||
|
if(rn >= rows) {
|
||||||
|
rn = 0;
|
||||||
|
cn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
1
patch/gapplessgrid.h
Normal file
1
patch/gapplessgrid.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
static void gaplessgrid(Monitor *m);
|
@ -70,6 +70,10 @@
|
|||||||
#include "fibonacci.c"
|
#include "fibonacci.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if GAPPLESSGRID_LAYOUT
|
||||||
|
#include "gapplessgrid.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MONOCLE_LAYOUT
|
#if MONOCLE_LAYOUT
|
||||||
#include "monocle.c"
|
#include "monocle.c"
|
||||||
#endif
|
#endif
|
||||||
|
@ -66,6 +66,10 @@
|
|||||||
#include "fibonacci.h"
|
#include "fibonacci.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if GAPPLESSGRID_LAYOUT
|
||||||
|
#include "gapplessgrid.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MONOCLE_LAYOUT
|
#if MONOCLE_LAYOUT
|
||||||
#include "monocle.h"
|
#include "monocle.h"
|
||||||
#endif
|
#endif
|
||||||
|
15
patch/tile.c
15
patch/tile.c
@ -9,7 +9,8 @@ tile(Monitor *m)
|
|||||||
float mfacts, sfacts;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts);
|
getgaps(m, &oh, &ov, &ih, &iv, &n);
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
@ -78,19 +79,15 @@ tile(Monitor *m)
|
|||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
int mx = 0, my = 0, mh = 0, mw = 0;
|
int mx = 0, my = 0, mh = 0, mw = 0;
|
||||||
int sx = 0, sy = 0, sh = 0, sw = 0;
|
int sx = 0, sy = 0, sh = 0, sw = 0;
|
||||||
float mfacts = 1, sfacts = 1;
|
float mfacts, sfacts;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
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)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
getfacts(m, &mfacts, &sfacts);
|
||||||
|
|
||||||
sx = mx = m->wx;
|
sx = mx = m->wx;
|
||||||
sy = my = m->wy;
|
sy = my = m->wy;
|
||||||
sh = mh = m->wh;
|
sh = mh = m->wh;
|
||||||
|
@ -107,26 +107,12 @@ incrivgaps(const Arg *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
#if CFACTS_PATCH
|
getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc)
|
||||||
getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc, float *mf, float *sf)
|
|
||||||
#else
|
|
||||||
getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc )
|
|
||||||
#endif // CFACTS_PATCH
|
|
||||||
{
|
{
|
||||||
unsigned int n, oe = enablegaps, ie = enablegaps;
|
unsigned int n, oe = enablegaps, ie = enablegaps;
|
||||||
#if CFACTS_PATCH
|
|
||||||
float mfacts = 0, sfacts = 0;
|
|
||||||
#endif // CFACTS_PATCH
|
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
||||||
#if CFACTS_PATCH
|
|
||||||
if (!m->nmaster || n < m->nmaster)
|
|
||||||
mfacts += c->cfact;
|
|
||||||
else
|
|
||||||
sfacts += c->cfact;
|
|
||||||
#endif // CFACTS_PATCH
|
|
||||||
}
|
|
||||||
if (smartgaps && n == 1) {
|
if (smartgaps && n == 1) {
|
||||||
oe = 0; // outer gaps disabled when only one client
|
oe = 0; // outer gaps disabled when only one client
|
||||||
}
|
}
|
||||||
@ -136,8 +122,4 @@ getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc )
|
|||||||
*ih = m->gappih*ie; // inner horizontal gap
|
*ih = m->gappih*ie; // inner horizontal gap
|
||||||
*iv = m->gappiv*ie; // inner vertical gap
|
*iv = m->gappiv*ie; // inner vertical gap
|
||||||
*nc = n; // number of clients
|
*nc = n; // number of clients
|
||||||
#if CFACTS_PATCH
|
|
||||||
*mf = mfacts; // total factor of master area
|
|
||||||
*sf = sfacts; // total factor of slave area
|
|
||||||
#endif // CFACTS_PATCH
|
|
||||||
}
|
}
|
@ -10,9 +10,5 @@ static void incrivgaps(const Arg *arg);
|
|||||||
static void togglegaps(const Arg *arg);
|
static void togglegaps(const Arg *arg);
|
||||||
|
|
||||||
/* Internals */
|
/* Internals */
|
||||||
#if CFACTS_PATCH
|
|
||||||
static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc, float *mf, float *sf);
|
|
||||||
#else
|
|
||||||
static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc);
|
static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc);
|
||||||
#endif // CFACTS_PATCH
|
|
||||||
static void setgaps(int oh, int ov, int ih, int iv);
|
static void setgaps(int oh, int ov, int ih, int iv);
|
15
patches.h
15
patches.h
@ -190,27 +190,32 @@
|
|||||||
/* Bottomstack layout.
|
/* Bottomstack layout.
|
||||||
* https://dwm.suckless.org/patches/bottomstack/
|
* https://dwm.suckless.org/patches/bottomstack/
|
||||||
*/
|
*/
|
||||||
#define BSTACK_LAYOUT 0
|
#define BSTACK_LAYOUT 1
|
||||||
|
|
||||||
/* Bottomstack horizontal layout.
|
/* Bottomstack horizontal layout.
|
||||||
* https://dwm.suckless.org/patches/bottomstack/
|
* https://dwm.suckless.org/patches/bottomstack/
|
||||||
*/
|
*/
|
||||||
#define BSTACKHORIZ_LAYOUT 0
|
#define BSTACKHORIZ_LAYOUT 1
|
||||||
|
|
||||||
/* Deck layout.
|
/* Deck layout.
|
||||||
* https://dwm.suckless.org/patches/deck/
|
* https://dwm.suckless.org/patches/deck/
|
||||||
*/
|
*/
|
||||||
#define DECK_LAYOUT 0
|
#define DECK_LAYOUT 1
|
||||||
|
|
||||||
/* Fibonacci dwindle layout.
|
/* Fibonacci dwindle layout.
|
||||||
* https://dwm.suckless.org/patches/fibonacci/
|
* https://dwm.suckless.org/patches/fibonacci/
|
||||||
*/
|
*/
|
||||||
#define FIBONACCI_DWINDLE_LAYOUT 0
|
#define FIBONACCI_DWINDLE_LAYOUT 1
|
||||||
|
|
||||||
/* Fibonacci spiral layout.
|
/* Fibonacci spiral layout.
|
||||||
* https://dwm.suckless.org/patches/fibonacci/
|
* https://dwm.suckless.org/patches/fibonacci/
|
||||||
*/
|
*/
|
||||||
#define FIBONACCI_SPIRAL_LAYOUT 0
|
#define FIBONACCI_SPIRAL_LAYOUT 1
|
||||||
|
|
||||||
|
/* Gappless grid layout.
|
||||||
|
* https://dwm.suckless.org/patches/gaplessgrid/
|
||||||
|
*/
|
||||||
|
#define GAPPLESSGRID_LAYOUT 1
|
||||||
|
|
||||||
/* The default tile layout.
|
/* The default tile layout.
|
||||||
* This can be optionally disabled in favour of other layouts.
|
* This can be optionally disabled in favour of other layouts.
|
||||||
|
Loading…
Reference in New Issue
Block a user