mirror of
https://codeberg.org/dwl/dwl.git
synced 2025-10-27 10:14:14 +00:00
Support gapps with varcol
This commit is contained in:
parent
7c4d521f99
commit
f5d7ee03c3
4
config.h
4
config.h
@ -4,8 +4,8 @@ static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will
|
|||||||
static const int smartgaps = 1; /* 1 means no outer gap when there is only one window */
|
static const int smartgaps = 1; /* 1 means no outer gap when there is only one window */
|
||||||
static const int monoclegaps = 0; /* 1 means outer gaps in monocle layout */
|
static const int monoclegaps = 0; /* 1 means outer gaps in monocle layout */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
static const unsigned int gappih = 10; /* horiz inner gap between windows */
|
static const unsigned int gappih = 20; /* horiz inner gap between windows */
|
||||||
static const unsigned int gappiv = 10; /* vert inner gap between windows */
|
static const unsigned int gappiv = 20; /* vert inner gap between windows */
|
||||||
static const unsigned int gappoh = 0; /* horiz outer gap between windows and screen edge */
|
static const unsigned int gappoh = 0; /* horiz outer gap between windows and screen edge */
|
||||||
static const unsigned int gappov = 0; /* vert outer gap between windows and screen edge */
|
static const unsigned int gappov = 0; /* vert outer gap between windows and screen edge */
|
||||||
static const float bordercolor[] = {0.5, 0.5, 0.5, 1.0};
|
static const float bordercolor[] = {0.5, 0.5, 0.5, 1.0};
|
||||||
|
|||||||
58
mng-varcol.c
58
mng-varcol.c
@ -27,16 +27,24 @@ static const float colfact[3] = { 0.1, 0.6, 0.3 };
|
|||||||
offset The offset of this client within the column
|
offset The offset of this client within the column
|
||||||
count The number of clients in the column
|
count The number of clients in the column
|
||||||
*/
|
*/
|
||||||
static void placeClientInColumn(Monitor *m, Client *c, int w, int x, int offset, int count)
|
static void placeClientInColumn(Monitor *m, Client *c, int w, int x, int offset, int count, int totaln)
|
||||||
{
|
{
|
||||||
struct wlr_box geom = {0};
|
struct wlr_box geom = {0};
|
||||||
|
int monheight = m->w.height;
|
||||||
|
|
||||||
|
if (totaln > 1) {
|
||||||
|
monheight -= (2 * m->gappov);
|
||||||
|
}
|
||||||
|
|
||||||
geom.width = w;
|
geom.width = w;
|
||||||
geom.height = floor(m->w.height / count);
|
geom.height = floor(monheight / count);
|
||||||
|
|
||||||
geom.x = x;
|
geom.x = x;
|
||||||
geom.y = m->w.y + (offset * geom.height);
|
geom.y = m->w.y + (offset * geom.height);
|
||||||
|
|
||||||
|
/* Adjust the height to account for gapps AFTER adjusting the y position */
|
||||||
|
geom.height -= m->gappiv;
|
||||||
|
|
||||||
resize(c, geom, False);
|
resize(c, geom, False);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,8 +58,8 @@ static void placeClientInColumn(Monitor *m, Client *c, int w, int x, int offset,
|
|||||||
*/
|
*/
|
||||||
void varcol(Monitor *m)
|
void varcol(Monitor *m)
|
||||||
{
|
{
|
||||||
int masterw, leftw, rightw, x;
|
int masterw, leftw, rightw, x, monwidth;
|
||||||
unsigned int i, leftn, rightn, mastern, coln, offset;
|
unsigned int i, leftn, rightn, mastern, totaln, coln, offset;
|
||||||
float colfacts;
|
float colfacts;
|
||||||
Client *c, *tmp;
|
Client *c, *tmp;
|
||||||
int nmastercols = m->nmastercols;
|
int nmastercols = m->nmastercols;
|
||||||
@ -89,7 +97,7 @@ void varcol(Monitor *m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Count the windows for each column type */
|
/* Count the windows for each column type */
|
||||||
leftn = rightn = mastern = 0;
|
totaln = leftn = rightn = mastern = 0;
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen) {
|
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen) {
|
||||||
continue;
|
continue;
|
||||||
@ -102,6 +110,8 @@ void varcol(Monitor *m)
|
|||||||
} else {
|
} else {
|
||||||
rightn++;
|
rightn++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
totaln++;
|
||||||
}
|
}
|
||||||
|
|
||||||
nmastercols = MAX(MIN(mastern, nmastercols), 1);
|
nmastercols = MAX(MIN(mastern, nmastercols), 1);
|
||||||
@ -131,10 +141,27 @@ void varcol(Monitor *m)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Calculate the usable width, with gapps removed */
|
||||||
|
monwidth = m->w.width;
|
||||||
|
|
||||||
|
if (rightn > 0) {
|
||||||
|
/* Gap to the left of reach right column */
|
||||||
|
monwidth -= m->gappih * nrightcols;
|
||||||
|
}
|
||||||
|
if (leftn > 0) {
|
||||||
|
/* Gap on the right of the left column */
|
||||||
|
monwidth -= m->gappih;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totaln > 1) {
|
||||||
|
/* Outer gaps */
|
||||||
|
monwidth -= (2 * m->gappoh);
|
||||||
|
}
|
||||||
|
|
||||||
/* Calculate the width for each column type */
|
/* Calculate the width for each column type */
|
||||||
leftw = (m->w.width / colfacts) * m->colfact[0];
|
leftw = (monwidth / colfacts) * m->colfact[0];
|
||||||
masterw = (m->w.width / colfacts) * m->colfact[1];
|
masterw = (monwidth / colfacts) * m->colfact[1];
|
||||||
rightw = (m->w.width / colfacts) * m->colfact[2];
|
rightw = (monwidth / colfacts) * m->colfact[2];
|
||||||
|
|
||||||
/* Adjust right and left column to fit all clients */
|
/* Adjust right and left column to fit all clients */
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
@ -171,6 +198,10 @@ void varcol(Monitor *m)
|
|||||||
x = m->w.x;
|
x = m->w.x;
|
||||||
if (leftn > 0) {
|
if (leftn > 0) {
|
||||||
x += leftw;
|
x += leftw;
|
||||||
|
x += m->gappih;
|
||||||
|
}
|
||||||
|
if (totaln > 1) {
|
||||||
|
x += m->gappoh;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -193,11 +224,12 @@ void varcol(Monitor *m)
|
|||||||
/* Max number of items in each master column */
|
/* Max number of items in each master column */
|
||||||
coln = ceil((float) mastern / nmastercols);
|
coln = ceil((float) mastern / nmastercols);
|
||||||
|
|
||||||
placeClientInColumn(m, c, masterw, x, offset % coln, coln);
|
placeClientInColumn(m, c, masterw, x, offset % coln, coln, totaln);
|
||||||
|
|
||||||
/* Only increment x if this is the last client in this column */
|
/* Only increment x if this is the last client in this column */
|
||||||
if ((++offset % coln) == 0) {
|
if ((++offset % coln) == 0) {
|
||||||
x += masterw;
|
x += masterw;
|
||||||
|
x += m->gappih;
|
||||||
}
|
}
|
||||||
} else if (!isleft(c)) {
|
} else if (!isleft(c)) {
|
||||||
/* Right columns */
|
/* Right columns */
|
||||||
@ -208,15 +240,19 @@ void varcol(Monitor *m)
|
|||||||
/* Max number of items in each right column */
|
/* Max number of items in each right column */
|
||||||
coln = ceil((float) rightn / nrightcols);
|
coln = ceil((float) rightn / nrightcols);
|
||||||
|
|
||||||
placeClientInColumn(m, c, rightw, x, offset % coln, coln);
|
placeClientInColumn(m, c, rightw, x, offset % coln, coln, totaln);
|
||||||
|
|
||||||
/* Only increment x if this is the last client in this column */
|
/* Only increment x if this is the last client in this column */
|
||||||
if ((++offset % coln) == 0) {
|
if ((++offset % coln) == 0) {
|
||||||
x += rightw;
|
x += rightw;
|
||||||
|
x += m->gappih;
|
||||||
}
|
}
|
||||||
} else if (leftn > 0) {
|
} else if (leftn > 0) {
|
||||||
/* left column */
|
/* left column */
|
||||||
x = m->w.x;
|
x = m->w.x;
|
||||||
|
if (totaln > 1) {
|
||||||
|
x += m->gappoh;
|
||||||
|
}
|
||||||
|
|
||||||
/* Offset within the section */
|
/* Offset within the section */
|
||||||
offset = i - (mastern + rightn);
|
offset = i - (mastern + rightn);
|
||||||
@ -224,7 +260,7 @@ void varcol(Monitor *m)
|
|||||||
/* There is only one left column */
|
/* There is only one left column */
|
||||||
coln = leftn;
|
coln = leftn;
|
||||||
|
|
||||||
placeClientInColumn(m, c, leftw, x, offset, leftn);
|
placeClientInColumn(m, c, leftw, x, offset, leftn, totaln);
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user