opt: optimize snap_floating_window for no border render

This commit is contained in:
DreamMaoMao 2025-05-14 23:01:56 +08:00
parent 1167380ad4
commit c60f4e75c5

View file

@ -1311,9 +1311,9 @@ void applybounds(Client *c, struct wlr_box *bbox) {
c->geom.x = bbox->x + bbox->width - c->geom.width; c->geom.x = bbox->x + bbox->width - c->geom.width;
if (c->geom.y >= bbox->y + bbox->height) if (c->geom.y >= bbox->y + bbox->height)
c->geom.y = bbox->y + bbox->height - c->geom.height; c->geom.y = bbox->y + bbox->height - c->geom.height;
if (c->geom.x <= bbox->x) if (c->geom.x + c->geom.width <= bbox->x)
c->geom.x = bbox->x; c->geom.x = bbox->x;
if (c->geom.y <= bbox->y) if (c->geom.y + c->geom.height <= bbox->y)
c->geom.y = bbox->y; c->geom.y = bbox->y;
} }
@ -2045,6 +2045,14 @@ void apply_window_snap(Client *c) {
snap_right_screen = 0; snap_right_screen = 0;
int snap_up_mon = 0, snap_down_mon = 0, snap_left_mon = 0, snap_right_mon = 0; int snap_up_mon = 0, snap_down_mon = 0, snap_left_mon = 0, snap_right_mon = 0;
unsigned int cbw = !render_border ? c->bw : 0;
unsigned int tcbw;
unsigned int cx,cy,cw,ch,tcx,tcy,tcw,tch;
cx = c->geom.x + cbw;
cy = c->geom.y + cbw;
cw = c->geom.width - 2 * cbw;
ch = c->geom.height - 2 * cbw;
Client *tc; Client *tc;
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling) if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
return; return;
@ -2056,10 +2064,16 @@ void apply_window_snap(Client *c) {
if (tc && tc->isfloating && !tc->iskilling && client_surface(tc)->mapped && if (tc && tc->isfloating && !tc->iskilling && client_surface(tc)->mapped &&
VISIBLEON(tc, c->mon)) { VISIBLEON(tc, c->mon)) {
snap_left_temp = c->geom.x - tc->geom.x - tc->geom.width; tcbw = !render_border ? tc->bw : 0;
snap_right_temp = tc->geom.x - c->geom.x - c->geom.width; tcx = tc->geom.x + tcbw;
snap_up_temp = c->geom.y - tc->geom.y - tc->geom.height; tcy = tc->geom.y + tcbw;
snap_down_temp = tc->geom.y - c->geom.y - c->geom.height; tcw = tc->geom.width - 2 * tcbw;
tch = tc->geom.height - 2 * tcbw;
snap_left_temp = cx - tcx - tcw;
snap_right_temp = tcx- cx - cw;
snap_up_temp = cy - tcy - tch;
snap_down_temp = tcy - cy - ch;
if (snap_left_temp < snap_left && snap_left_temp >= 0) { if (snap_left_temp < snap_left && snap_left_temp >= 0) {
snap_left = snap_left_temp; snap_left = snap_left_temp;
@ -2076,10 +2090,10 @@ void apply_window_snap(Client *c) {
} }
} }
snap_left_mon = c->geom.x - c->mon->m.x; snap_left_mon = cx - c->mon->m.x;
snap_right_mon = c->mon->m.x + c->mon->m.width - c->geom.x - c->geom.width; snap_right_mon = c->mon->m.x + c->mon->m.width - cx - cw;
snap_up_mon = c->geom.y - c->mon->m.y; snap_up_mon = cy - c->mon->m.y;
snap_down_mon = c->mon->m.y + c->mon->m.height - c->geom.y - c->geom.height; snap_down_mon = c->mon->m.y + c->mon->m.height - cy - ch;
if (snap_up_mon > 0 && snap_up_mon < snap_up) if (snap_up_mon > 0 && snap_up_mon < snap_up)
snap_up = snap_up_mon; snap_up = snap_up_mon;
@ -2090,11 +2104,11 @@ void apply_window_snap(Client *c) {
if (snap_right_mon > 0 && snap_right_mon < snap_right) if (snap_right_mon > 0 && snap_right_mon < snap_right)
snap_right = snap_right_mon; snap_right = snap_right_mon;
snap_left_screen = c->geom.x - c->mon->w.x; snap_left_screen = cx - c->mon->w.x;
snap_right_screen = c->mon->w.x + c->mon->w.width - c->geom.x - c->geom.width; snap_right_screen = c->mon->w.x + c->mon->w.width - cx - cw;
snap_up_screen = c->geom.y - c->mon->w.y; snap_up_screen = cy - c->mon->w.y;
snap_down_screen = snap_down_screen =
c->mon->w.y + c->mon->w.height - c->geom.y - c->geom.height; c->mon->w.y + c->mon->w.height - cy - ch;
if (snap_up_screen > 0 && snap_up_screen < snap_up) if (snap_up_screen > 0 && snap_up_screen < snap_up)
snap_up = snap_up_screen; snap_up = snap_up_screen;
@ -2122,7 +2136,7 @@ void apply_window_snap(Client *c) {
} }
c->oldgeom = c->geom; c->oldgeom = c->geom;
resize(c, c->geom, 1); resize(c, c->geom, 0);
} }
Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating, Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,