Add structure for sizes
This commit is contained in:
parent
87872079a7
commit
7bb6abbacd
182
src/dwm.c
182
src/dwm.c
|
@ -46,36 +46,36 @@
|
|||
Mod3Mask | Mod4Mask | Mod5Mask) \
|
||||
)
|
||||
|
||||
#define INTERSECT(x,y,w,h,window_area_geometry) ( \
|
||||
MAX( \
|
||||
0, \
|
||||
MIN( \
|
||||
(x) + (w), \
|
||||
window_area_geometry.position.x \
|
||||
+ \
|
||||
window_area_geometry.w \
|
||||
) \
|
||||
- \
|
||||
MAX( \
|
||||
(x), \
|
||||
window_area_geometry.position.x \
|
||||
) \
|
||||
) \
|
||||
* \
|
||||
MAX( \
|
||||
0, \
|
||||
MIN( \
|
||||
(y) + (h), \
|
||||
window_area_geometry.position.y \
|
||||
+ \
|
||||
window_area_geometry.h \
|
||||
) \
|
||||
- \
|
||||
MAX( \
|
||||
(y), \
|
||||
window_area_geometry.position.y \
|
||||
) \
|
||||
) \
|
||||
#define INTERSECT(x,y,w,h,window_area_geometry) ( \
|
||||
MAX( \
|
||||
0, \
|
||||
MIN( \
|
||||
(x) + (w), \
|
||||
window_area_geometry.position.x \
|
||||
+ \
|
||||
window_area_geometry.sizes.w \
|
||||
) \
|
||||
- \
|
||||
MAX( \
|
||||
(x), \
|
||||
window_area_geometry.position.x \
|
||||
) \
|
||||
) \
|
||||
* \
|
||||
MAX( \
|
||||
0, \
|
||||
MIN( \
|
||||
(y) + (h), \
|
||||
window_area_geometry.position.y \
|
||||
+ \
|
||||
window_area_geometry.sizes.h \
|
||||
) \
|
||||
- \
|
||||
MAX( \
|
||||
(y), \
|
||||
window_area_geometry.position.y \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
/*********
|
||||
|
@ -334,24 +334,24 @@ int applysizehints(
|
|||
if (
|
||||
*x
|
||||
>=
|
||||
m->window_area_geometry.position.x + m->window_area_geometry.w
|
||||
m->window_area_geometry.position.x + m->window_area_geometry.sizes.w
|
||||
) {
|
||||
*x =
|
||||
m->window_area_geometry.position.x
|
||||
+
|
||||
m->window_area_geometry.w
|
||||
m->window_area_geometry.sizes.w
|
||||
-
|
||||
client_geometry_total_width(&c->state.geometry);
|
||||
}
|
||||
if (
|
||||
*y
|
||||
>=
|
||||
m->window_area_geometry.position.y + m->window_area_geometry.h
|
||||
m->window_area_geometry.position.y + m->window_area_geometry.sizes.h
|
||||
) {
|
||||
*y =
|
||||
m->window_area_geometry.position.y
|
||||
+
|
||||
m->window_area_geometry.h
|
||||
m->window_area_geometry.sizes.h
|
||||
-
|
||||
client_geometry_total_height(&c->state.geometry);
|
||||
}
|
||||
|
@ -424,9 +424,9 @@ int applysizehints(
|
|||
||
|
||||
*y != c->state.geometry.basic.position.y
|
||||
||
|
||||
*w != c->state.geometry.basic.w
|
||||
*w != c->state.geometry.basic.sizes.w
|
||||
||
|
||||
*h != c->state.geometry.basic.h
|
||||
*h != c->state.geometry.basic.sizes.h
|
||||
||
|
||||
bw != c->state.geometry.border_width
|
||||
);
|
||||
|
@ -569,8 +569,8 @@ void configure(Client *c)
|
|||
.window = c->win,
|
||||
.x = c->state.geometry.basic.position.x,
|
||||
.y = c->state.geometry.basic.position.y,
|
||||
.width = c->state.geometry.basic.w,
|
||||
.height = c->state.geometry.basic.h,
|
||||
.width = c->state.geometry.basic.sizes.w,
|
||||
.height = c->state.geometry.basic.sizes.h,
|
||||
.border_width = c->state.geometry.border_width,
|
||||
.above = None,
|
||||
.override_redirect = False,
|
||||
|
@ -890,8 +890,8 @@ void manage(Window w, XWindowAttributes *wa)
|
|||
c->win = w;
|
||||
c->state.geometry.basic.position.x = wa->x;
|
||||
c->state.geometry.basic.position.y = wa->y;
|
||||
c->state.geometry.basic.w = wa->width;
|
||||
c->state.geometry.basic.h = wa->height;
|
||||
c->state.geometry.basic.sizes.w = wa->width;
|
||||
c->state.geometry.basic.sizes.h = wa->height;
|
||||
c->state.is_floating = false;
|
||||
|
||||
updatetitle(c);
|
||||
|
@ -914,12 +914,12 @@ void manage(Window w, XWindowAttributes *wa)
|
|||
if (
|
||||
c->state.geometry.basic.position.x + total_width
|
||||
>
|
||||
c->mon->screen_geometry.position.x + c->mon->screen_geometry.w
|
||||
c->mon->screen_geometry.position.x + c->mon->screen_geometry.sizes.w
|
||||
) {
|
||||
c->state.geometry.basic.position.x =
|
||||
c->mon->screen_geometry.position.x
|
||||
+
|
||||
c->mon->screen_geometry.w
|
||||
c->mon->screen_geometry.sizes.w
|
||||
-
|
||||
total_width;
|
||||
}
|
||||
|
@ -930,12 +930,12 @@ void manage(Window w, XWindowAttributes *wa)
|
|||
if (
|
||||
c->state.geometry.basic.position.y + total_height
|
||||
>
|
||||
c->mon->screen_geometry.position.y + c->mon->screen_geometry.h
|
||||
c->mon->screen_geometry.position.y + c->mon->screen_geometry.sizes.h
|
||||
) {
|
||||
c->state.geometry.basic.position.y =
|
||||
c->mon->screen_geometry.position.y
|
||||
+
|
||||
c->mon->screen_geometry.h
|
||||
c->mon->screen_geometry.sizes.h
|
||||
-
|
||||
total_height;
|
||||
}
|
||||
|
@ -973,11 +973,11 @@ void manage(Window w, XWindowAttributes *wa)
|
|||
c->state.geometry.basic.position.x =
|
||||
c->mon->screen_geometry.position.x
|
||||
+
|
||||
(c->mon->screen_geometry.w - total_width) / 2;
|
||||
(c->mon->screen_geometry.sizes.w - total_width) / 2;
|
||||
c->state.geometry.basic.position.y =
|
||||
c->mon->screen_geometry.position.y
|
||||
+
|
||||
(c->mon->screen_geometry.h - total_height) / 2;
|
||||
(c->mon->screen_geometry.sizes.h - total_height) / 2;
|
||||
}
|
||||
|
||||
XSelectInput(
|
||||
|
@ -1019,8 +1019,8 @@ void manage(Window w, XWindowAttributes *wa)
|
|||
c->win,
|
||||
c->state.geometry.basic.position.x + 2 * sw,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h
|
||||
);
|
||||
|
||||
setclientstate(c, NormalState);
|
||||
|
@ -1093,7 +1093,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
(
|
||||
selmon->window_area_geometry.position.x
|
||||
+
|
||||
selmon->window_area_geometry.w
|
||||
selmon->window_area_geometry.sizes.w
|
||||
)
|
||||
-
|
||||
(nx + client_geometry_total_width(&c->state.geometry))
|
||||
|
@ -1104,7 +1104,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
nx =
|
||||
selmon->window_area_geometry.position.x
|
||||
+
|
||||
selmon->window_area_geometry.w
|
||||
selmon->window_area_geometry.sizes.w
|
||||
-
|
||||
client_geometry_total_width(&c->state.geometry);
|
||||
}
|
||||
|
@ -1120,7 +1120,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
(
|
||||
selmon->window_area_geometry.position.y
|
||||
+
|
||||
selmon->window_area_geometry.h
|
||||
selmon->window_area_geometry.sizes.h
|
||||
) - (ny + client_geometry_total_height(&c->state.geometry))
|
||||
)
|
||||
<
|
||||
|
@ -1129,7 +1129,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
ny =
|
||||
selmon->window_area_geometry.position.y
|
||||
+
|
||||
selmon->window_area_geometry.h
|
||||
selmon->window_area_geometry.sizes.h
|
||||
-
|
||||
client_geometry_total_height(&c->state.geometry);
|
||||
}
|
||||
|
@ -1150,8 +1150,8 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
c,
|
||||
nx,
|
||||
ny,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h,
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h,
|
||||
c->state.geometry.border_width,
|
||||
1
|
||||
);
|
||||
|
@ -1166,8 +1166,8 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
|||
Monitor *const m = recttomon(
|
||||
c->state.geometry.basic.position.x,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h
|
||||
);
|
||||
|
||||
if (m != selmon) {
|
||||
|
@ -1303,8 +1303,8 @@ void resizeclient(Client *c, int x, int y, int w, int h, int bw)
|
|||
|
||||
c->state.geometry.basic.position.x = wc.x = x;
|
||||
c->state.geometry.basic.position.y = wc.y = y;
|
||||
c->state.geometry.basic.w = wc.width = w;
|
||||
c->state.geometry.basic.h = wc.height = h;
|
||||
c->state.geometry.basic.sizes.w = wc.width = w;
|
||||
c->state.geometry.basic.sizes.h = wc.height = h;
|
||||
c->state.geometry.border_width = wc.border_width = bw;
|
||||
|
||||
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
||||
|
@ -1334,8 +1334,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
c->state.geometry.basic.w + c->state.geometry.border_width - 1,
|
||||
c->state.geometry.basic.h + c->state.geometry.border_width - 1
|
||||
c->state.geometry.basic.sizes.w + c->state.geometry.border_width - 1,
|
||||
c->state.geometry.basic.sizes.h + c->state.geometry.border_width - 1
|
||||
);
|
||||
|
||||
const unsigned int snap_distance = settings_get_snap_distance();
|
||||
|
@ -1386,7 +1386,7 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
|||
(
|
||||
selmon->window_area_geometry.position.x
|
||||
+
|
||||
selmon->window_area_geometry.w
|
||||
selmon->window_area_geometry.sizes.w
|
||||
)
|
||||
)
|
||||
&&
|
||||
|
@ -1402,15 +1402,21 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
|||
(
|
||||
selmon->window_area_geometry.position.y
|
||||
+
|
||||
selmon->window_area_geometry.h
|
||||
selmon->window_area_geometry.sizes.h
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (!c->state.is_floating &&
|
||||
(selmon->lt[selmon->sellt]->arrange == NULL ||
|
||||
abs(nw - c->state.geometry.basic.w) > snap_distance ||
|
||||
abs(nh - c->state.geometry.basic.h) > snap_distance))
|
||||
{
|
||||
if (
|
||||
!c->state.is_floating
|
||||
&&
|
||||
(
|
||||
selmon->lt[selmon->sellt]->arrange == NULL
|
||||
||
|
||||
abs(nw - c->state.geometry.basic.sizes.w) > snap_distance
|
||||
||
|
||||
abs(nh - c->state.geometry.basic.sizes.h) > snap_distance
|
||||
)
|
||||
) {
|
||||
togglefloating(NULL);
|
||||
}
|
||||
}
|
||||
|
@ -1439,8 +1445,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
c->state.geometry.basic.w + c->state.geometry.border_width - 1,
|
||||
c->state.geometry.basic.h + c->state.geometry.border_width - 1
|
||||
c->state.geometry.basic.sizes.w + c->state.geometry.border_width - 1,
|
||||
c->state.geometry.basic.sizes.h + c->state.geometry.border_width - 1
|
||||
);
|
||||
|
||||
XUngrabPointer(dpy, CurrentTime);
|
||||
|
@ -1450,8 +1456,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
|||
Monitor *const m = recttomon(
|
||||
c->state.geometry.basic.position.x,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h
|
||||
);
|
||||
|
||||
if (m != selmon) {
|
||||
|
@ -1765,8 +1771,8 @@ void showhide(Client *c)
|
|||
c,
|
||||
c->state.geometry.basic.position.x,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h,
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h,
|
||||
c->state.geometry.border_width,
|
||||
0
|
||||
);
|
||||
|
@ -1826,9 +1832,9 @@ void togglefloating(__attribute__((unused)) const Arg *arg)
|
|||
selmon->sel,
|
||||
selmon->sel->state.geometry.basic.position.x,
|
||||
selmon->sel->state.geometry.basic.position.y,
|
||||
selmon->sel->state.geometry.basic.w -
|
||||
selmon->sel->state.geometry.basic.sizes.w -
|
||||
2 * (border_width - selmon->sel->state.geometry.border_width),
|
||||
selmon->sel->state.geometry.basic.h -
|
||||
selmon->sel->state.geometry.basic.sizes.h -
|
||||
2 * (border_width - selmon->sel->state.geometry.border_width),
|
||||
border_width,
|
||||
0
|
||||
|
@ -1930,9 +1936,9 @@ int updategeom()
|
|||
||
|
||||
unique[i].y_org != m->screen_geometry.position.y
|
||||
||
|
||||
unique[i].width != m->screen_geometry.w
|
||||
unique[i].width != m->screen_geometry.sizes.w
|
||||
||
|
||||
unique[i].height != m->screen_geometry.h
|
||||
unique[i].height != m->screen_geometry.sizes.h
|
||||
) {
|
||||
dirty = 1;
|
||||
m->num = i;
|
||||
|
@ -1942,11 +1948,11 @@ int updategeom()
|
|||
m->screen_geometry.position.y =
|
||||
m->window_area_geometry.position.y =
|
||||
unique[i].y_org;
|
||||
m->screen_geometry.w =
|
||||
m->window_area_geometry.w =
|
||||
m->screen_geometry.sizes.w =
|
||||
m->window_area_geometry.sizes.w =
|
||||
unique[i].width;
|
||||
m->screen_geometry.h =
|
||||
m->window_area_geometry.h =
|
||||
m->screen_geometry.sizes.h =
|
||||
m->window_area_geometry.sizes.h =
|
||||
unique[i].height;
|
||||
}
|
||||
} else { /* less monitors available nn < n */
|
||||
|
@ -1971,10 +1977,18 @@ int updategeom()
|
|||
{ /* default monitor setup */
|
||||
if (!mons)
|
||||
mons = createmon();
|
||||
if (mons->screen_geometry.w != sw || mons->screen_geometry.h != sh) {
|
||||
if (
|
||||
mons->screen_geometry.sizes.w != sw
|
||||
||
|
||||
mons->screen_geometry.sizes.h != sh
|
||||
) {
|
||||
dirty = 1;
|
||||
mons->screen_geometry.w = mons->window_area_geometry.w = sw;
|
||||
mons->screen_geometry.h = mons->window_area_geometry.h = sh;
|
||||
mons->screen_geometry.sizes.w =
|
||||
mons->window_area_geometry.sizes.w =
|
||||
sw;
|
||||
mons->screen_geometry.sizes.h =
|
||||
mons->window_area_geometry.sizes.h =
|
||||
sh;
|
||||
}
|
||||
}
|
||||
if (dirty) {
|
||||
|
|
|
@ -85,15 +85,19 @@ void on_configure_request(XEvent *e)
|
|||
m->screen_geometry.position.y + ev->y;
|
||||
}
|
||||
if (ev->value_mask & CWWidth) {
|
||||
c->state.geometry.basic.w = ev->width;
|
||||
c->state.geometry.basic.sizes.w = ev->width;
|
||||
}
|
||||
if (ev->value_mask & CWHeight) {
|
||||
c->state.geometry.basic.h = ev->height;
|
||||
c->state.geometry.basic.sizes.h = ev->height;
|
||||
}
|
||||
if (
|
||||
(c->state.geometry.basic.position.x + c->state.geometry.basic.w)
|
||||
(
|
||||
c->state.geometry.basic.position.x
|
||||
+
|
||||
c->state.geometry.basic.sizes.w
|
||||
)
|
||||
>
|
||||
m->screen_geometry.position.x + m->screen_geometry.w
|
||||
m->screen_geometry.position.x + m->screen_geometry.sizes.w
|
||||
&&
|
||||
c->state.is_floating
|
||||
) {
|
||||
|
@ -102,15 +106,19 @@ void on_configure_request(XEvent *e)
|
|||
m->screen_geometry.position.x
|
||||
+
|
||||
(
|
||||
m->screen_geometry.w / 2
|
||||
m->screen_geometry.sizes.w / 2
|
||||
-
|
||||
client_geometry_total_width(&c->state.geometry) / 2
|
||||
);
|
||||
}
|
||||
if (
|
||||
(c->state.geometry.basic.position.y + c->state.geometry.basic.h)
|
||||
(
|
||||
c->state.geometry.basic.position.y
|
||||
+
|
||||
c->state.geometry.basic.sizes.h
|
||||
)
|
||||
>
|
||||
m->screen_geometry.position.y + m->screen_geometry.h
|
||||
m->screen_geometry.position.y + m->screen_geometry.sizes.h
|
||||
&&
|
||||
c->state.is_floating
|
||||
) {
|
||||
|
@ -119,7 +127,7 @@ void on_configure_request(XEvent *e)
|
|||
m->screen_geometry.position.y
|
||||
+
|
||||
(
|
||||
m->screen_geometry.h / 2
|
||||
m->screen_geometry.sizes.h / 2
|
||||
-
|
||||
client_geometry_total_height(&c->state.geometry) / 2
|
||||
);
|
||||
|
@ -133,8 +141,8 @@ void on_configure_request(XEvent *e)
|
|||
c->win,
|
||||
c->state.geometry.basic.position.x,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w,
|
||||
c->state.geometry.basic.h
|
||||
c->state.geometry.basic.sizes.w,
|
||||
c->state.geometry.basic.sizes.h
|
||||
);
|
||||
}
|
||||
} else
|
||||
|
|
|
@ -10,17 +10,19 @@ void centeredmaster(Monitor *m)
|
|||
const float master_area_factor = unit_get_master_area_factor(m->unit);
|
||||
|
||||
unsigned int mx = 0;
|
||||
unsigned int mw = m->window_area_geometry.w;
|
||||
unsigned int mw = m->window_area_geometry.sizes.w;
|
||||
unsigned int tw = mw;
|
||||
if (n > m->nmaster) {
|
||||
/* go mfact box in the center if more than nmaster clients */
|
||||
mw = m->nmaster ? m->window_area_geometry.w * master_area_factor : 0;
|
||||
tw = m->window_area_geometry.w - mw;
|
||||
mw = m->nmaster
|
||||
? m->window_area_geometry.sizes.w * master_area_factor
|
||||
: 0;
|
||||
tw = m->window_area_geometry.sizes.w - mw;
|
||||
|
||||
if (n - m->nmaster > 1) {
|
||||
/* only one client */
|
||||
mx = (m->window_area_geometry.w - mw) / 2;
|
||||
tw = (m->window_area_geometry.w - mw) / 2;
|
||||
mx = (m->window_area_geometry.sizes.w - mw) / 2;
|
||||
tw = (m->window_area_geometry.sizes.w - mw) / 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,7 +42,9 @@ void centeredmaster(Monitor *m)
|
|||
// nmaster clients are stacked vertically,
|
||||
// in the center of the screen
|
||||
const unsigned int h =
|
||||
(m->window_area_geometry.h - my) / (MIN(n, m->nmaster) - i);
|
||||
(m->window_area_geometry.sizes.h - my)
|
||||
/
|
||||
(MIN(n, m->nmaster) - i);
|
||||
|
||||
const int left_gap = (n <= m->nmaster + 1) ? gap_size : top_left_half_gap;
|
||||
const int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||
|
@ -65,7 +69,7 @@ void centeredmaster(Monitor *m)
|
|||
// stack clients are stacked vertically
|
||||
if ((i - m->nmaster) % 2) {
|
||||
const unsigned int h =
|
||||
(m->window_area_geometry.h - ety) / ((1 + n - i) / 2);
|
||||
(m->window_area_geometry.sizes.h - ety) / ((1 + n - i) / 2);
|
||||
|
||||
const int left_gap = gap_size;
|
||||
const int top_gap = (i == m->nmaster + 1) ? gap_size : top_left_half_gap;
|
||||
|
@ -88,7 +92,7 @@ void centeredmaster(Monitor *m)
|
|||
ety += total_height + top_gap + bottom_gap;
|
||||
} else {
|
||||
const unsigned int h =
|
||||
(m->window_area_geometry.h - oty) / ((1 + n - i) / 2);
|
||||
(m->window_area_geometry.sizes.h - oty) / ((1 + n - i) / 2);
|
||||
|
||||
const int left_gap = (m->nmaster == 0 && n == 1) ? gap_size : top_left_half_gap;
|
||||
const int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||
|
@ -124,8 +128,8 @@ void floating(Monitor *m)
|
|||
c,
|
||||
c->state.geometry.basic.position.x,
|
||||
c->state.geometry.basic.position.y,
|
||||
c->state.geometry.basic.w - 2 * border_width,
|
||||
c->state.geometry.basic.h - 2 * border_width,
|
||||
c->state.geometry.basic.sizes.w - 2 * border_width,
|
||||
c->state.geometry.basic.sizes.h - 2 * border_width,
|
||||
border_width,
|
||||
0
|
||||
);
|
||||
|
@ -152,16 +156,18 @@ void horizontile(Monitor *m)
|
|||
const unsigned int mh =
|
||||
n > m->nmaster
|
||||
?
|
||||
(m->nmaster ? m->window_area_geometry.h * master_area_factor : 0)
|
||||
(m->nmaster ? m->window_area_geometry.sizes.h * master_area_factor : 0)
|
||||
:
|
||||
m->window_area_geometry.h;
|
||||
m->window_area_geometry.sizes.h;
|
||||
|
||||
Client *c = nexttiled(m->clients);
|
||||
|
||||
for (unsigned int i = 0, mx = 0, tx = 0; c; c = nexttiled(c->next), ++i) {
|
||||
if (i < m->nmaster) {
|
||||
const unsigned int w =
|
||||
(m->window_area_geometry.w - mx) / (MIN(n, m->nmaster) - i);
|
||||
(m->window_area_geometry.sizes.w - mx)
|
||||
/
|
||||
(MIN(n, m->nmaster) - i);
|
||||
|
||||
const unsigned int left_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||
const unsigned int top_gap = gap_size;
|
||||
|
@ -182,11 +188,11 @@ void horizontile(Monitor *m)
|
|||
client_geometry_total_width(&c->state.geometry);
|
||||
|
||||
// FIXME: maybe need + left_gap + right_gap
|
||||
if (mx + total_width < m->window_area_geometry.w) {
|
||||
if (mx + total_width < m->window_area_geometry.sizes.w) {
|
||||
mx += total_width + left_gap + right_gap;
|
||||
}
|
||||
} else {
|
||||
const unsigned int w = (m->window_area_geometry.w - tx) / (n - i);
|
||||
const unsigned int w = (m->window_area_geometry.sizes.w - tx) / (n - i);
|
||||
|
||||
const unsigned int left_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||
const unsigned int top_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
||||
|
@ -198,7 +204,7 @@ void horizontile(Monitor *m)
|
|||
m->window_area_geometry.position.x + tx + left_gap,
|
||||
m->window_area_geometry.position.y + mh + top_gap,
|
||||
w - 2 * border_width - left_gap - right_gap,
|
||||
m->window_area_geometry.h - mh - 2 * border_width - top_gap - bottom_gap,
|
||||
m->window_area_geometry.sizes.h - mh - 2 * border_width - top_gap - bottom_gap,
|
||||
border_width,
|
||||
0
|
||||
);
|
||||
|
@ -207,7 +213,7 @@ void horizontile(Monitor *m)
|
|||
client_geometry_total_width(&c->state.geometry);
|
||||
|
||||
// FIXME: maybe need + left_gap + right_gap
|
||||
if (tx + total_width < m->window_area_geometry.w) {
|
||||
if (tx + total_width < m->window_area_geometry.sizes.w) {
|
||||
tx += total_width + left_gap + right_gap;
|
||||
}
|
||||
}
|
||||
|
@ -231,8 +237,8 @@ void monocle(Monitor *m)
|
|||
c,
|
||||
m->window_area_geometry.position.x + gap_size,
|
||||
m->window_area_geometry.position.y + gap_size,
|
||||
m->window_area_geometry.w - 2 * border_width - 2 * gap_size,
|
||||
m->window_area_geometry.h - 2 * border_width - 2 * gap_size,
|
||||
m->window_area_geometry.sizes.w - 2 * border_width - 2 * gap_size,
|
||||
m->window_area_geometry.sizes.h - 2 * border_width - 2 * gap_size,
|
||||
border_width,
|
||||
0
|
||||
);
|
||||
|
@ -258,16 +264,16 @@ void tile(Monitor *m)
|
|||
const unsigned int mw =
|
||||
n > m->nmaster
|
||||
?
|
||||
(m->nmaster ? m->window_area_geometry.w * master_area_factor : 0)
|
||||
(m->nmaster ? m->window_area_geometry.sizes.w * master_area_factor : 0)
|
||||
:
|
||||
m->window_area_geometry.w;
|
||||
m->window_area_geometry.sizes.w;
|
||||
|
||||
Client *c = nexttiled(m->clients);
|
||||
|
||||
for (unsigned int i = 0, my = 0, ty = 0; c; c = nexttiled(c->next), ++i) {
|
||||
if (i < m->nmaster) {
|
||||
const unsigned int h =
|
||||
(m->window_area_geometry.h - my) / (MIN(n, m->nmaster) - i);
|
||||
(m->window_area_geometry.sizes.h - my) / (MIN(n, m->nmaster) - i);
|
||||
|
||||
const unsigned int left_gap = gap_size;
|
||||
const unsigned int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||
|
@ -288,11 +294,12 @@ void tile(Monitor *m)
|
|||
client_geometry_total_height(&c->state.geometry);
|
||||
|
||||
// FIXME: maybe need + top_gap + bottom_gap
|
||||
if (my + total_height < m->window_area_geometry.h) {
|
||||
if (my + total_height < m->window_area_geometry.sizes.h) {
|
||||
my += total_height + top_gap + bottom_gap;
|
||||
}
|
||||
} else {
|
||||
const unsigned int h = (m->window_area_geometry.h - ty) / (n - i);
|
||||
const unsigned int h =
|
||||
(m->window_area_geometry.sizes.h - ty) / (n - i);
|
||||
|
||||
const unsigned int left_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
||||
const unsigned int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||
|
@ -303,7 +310,7 @@ void tile(Monitor *m)
|
|||
c,
|
||||
m->window_area_geometry.position.x + mw + left_gap,
|
||||
m->window_area_geometry.position.y + ty + top_gap,
|
||||
m->window_area_geometry.w - mw - 2 * border_width - left_gap - right_gap,
|
||||
m->window_area_geometry.sizes.w - mw - 2 * border_width - left_gap - right_gap,
|
||||
h - 2 * border_width - top_gap - bottom_gap,
|
||||
border_width,
|
||||
0
|
||||
|
@ -313,7 +320,7 @@ void tile(Monitor *m)
|
|||
client_geometry_total_height(&c->state.geometry);
|
||||
|
||||
// FIXME: maybe need + top_gap + bottom_gap
|
||||
if (ty + total_height < m->window_area_geometry.h) {
|
||||
if (ty + total_height < m->window_area_geometry.sizes.h) {
|
||||
ty += total_height + top_gap + bottom_gap;
|
||||
}
|
||||
}
|
||||
|
|
13
src/state.c
13
src/state.c
|
@ -8,11 +8,16 @@ void position_init(const Position position)
|
|||
position->y = 0;
|
||||
}
|
||||
|
||||
void sizes_init(const Sizes sizes)
|
||||
{
|
||||
sizes->w = 0;
|
||||
sizes->h = 0;
|
||||
}
|
||||
|
||||
void basic_geometry_init(const BasicGeometry basic_geometry)
|
||||
{
|
||||
position_init(&basic_geometry->position);
|
||||
basic_geometry->w = 0;
|
||||
basic_geometry->h = 0;
|
||||
sizes_init(&basic_geometry->sizes);
|
||||
}
|
||||
|
||||
void client_geometry_init(const ClientGeometry client_geometry)
|
||||
|
@ -49,13 +54,13 @@ void client_state_init(const ClientState client_state)
|
|||
int client_geometry_total_width(
|
||||
const struct ClientGeometry *const client_geometry
|
||||
) {
|
||||
return client_geometry->basic.w + 2 * client_geometry->border_width;
|
||||
return client_geometry->basic.sizes.w + 2 * client_geometry->border_width;
|
||||
}
|
||||
|
||||
int client_geometry_total_height(
|
||||
const struct ClientGeometry *const client_geometry
|
||||
) {
|
||||
return client_geometry->basic.h + 2 * client_geometry->border_width;
|
||||
return client_geometry->basic.sizes.h + 2 * client_geometry->border_width;
|
||||
}
|
||||
|
||||
void client_size_hints_update(
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*****************/
|
||||
|
||||
typedef struct Position *Position;
|
||||
typedef struct Sizes *Sizes;
|
||||
typedef struct BasicGeometry *BasicGeometry;
|
||||
typedef struct ClientGeometry *ClientGeometry;
|
||||
typedef struct ClientSizeHints *ClientSizeHints;
|
||||
|
@ -22,9 +23,13 @@ struct Position {
|
|||
int x, y;
|
||||
};
|
||||
|
||||
struct Sizes {
|
||||
int w, h;
|
||||
};
|
||||
|
||||
struct BasicGeometry {
|
||||
struct Position position;
|
||||
int w, h;
|
||||
struct Sizes sizes;
|
||||
};
|
||||
|
||||
struct ClientGeometry {
|
||||
|
@ -48,6 +53,7 @@ struct ClientState {
|
|||
*************/
|
||||
|
||||
void position_init(Position position);
|
||||
void sizes_init(Sizes sizes);
|
||||
void basic_geometry_init(BasicGeometry basic_geometry);
|
||||
void client_geometry_init(ClientGeometry client_geometry);
|
||||
void client_size_hints_init(ClientSizeHints client_size_hints);
|
||||
|
|
Loading…
Reference in New Issue