resistance: consider gaps when resisting or attracting motion

This commit is contained in:
Andrew J. Hesford 2024-01-23 13:44:40 -05:00
parent 8d4afb1c3e
commit 3fc119fdf2

View file

@ -46,16 +46,19 @@ build_view_edges(struct view *view, struct wlr_box new_geom,
/* Use the effective height to properly snap shaded views */ /* Use the effective height to properly snap shaded views */
int eff_height = view_effective_height(view, /* use_pending */ false); int eff_height = view_effective_height(view, /* use_pending */ false);
view_edges->left = view->current.x - border.left + (move ? 1 : 0); view_edges->left = view->current.x - border.left - rc.gap + (move ? 1 : 0);
view_edges->top = view->current.y - border.top + (move ? 1 : 0); view_edges->top = view->current.y - border.top - rc.gap + (move ? 1 : 0);
view_edges->right = view->current.x + view->current.width + border.right; view_edges->right =
view_edges->bottom = view->current.y + eff_height + border.bottom; view->current.x + view->current.width + border.right + rc.gap;
view_edges->bottom =
view->current.y + eff_height + border.bottom + rc.gap;
target_edges->left = new_geom.x - border.left; target_edges->left = new_geom.x - border.left - rc.gap;
target_edges->top = new_geom.y - border.top; target_edges->top = new_geom.y - border.top - rc.gap;
target_edges->right = new_geom.x + new_geom.width + border.right; target_edges->right =
new_geom.x + new_geom.width + border.right + rc.gap;
target_edges->bottom = new_geom.y + border.bottom + target_edges->bottom = new_geom.y + border.bottom +
(view->shaded ? 0 : new_geom.height); (view->shaded ? 0 : new_geom.height) + rc.gap;
} }
static void static void
@ -189,15 +192,15 @@ resistance_move_apply(struct view *view, double *x, double *y)
find_neighbor_edges(view, new_geom, &next_edges, /* move */ true); find_neighbor_edges(view, new_geom, &next_edges, /* move */ true);
if (next_edges.left > INT_MIN) { if (next_edges.left > INT_MIN) {
*x = next_edges.left + border.left; *x = next_edges.left + border.left + rc.gap;
} else if (next_edges.right < INT_MAX) { } else if (next_edges.right < INT_MAX) {
*x = next_edges.right - view->current.width - border.right; *x = next_edges.right - view->current.width - border.right - rc.gap;
} }
if (next_edges.top > INT_MIN) { if (next_edges.top > INT_MIN) {
*y = next_edges.top + border.top; *y = next_edges.top + border.top + rc.gap;
} else if (next_edges.bottom < INT_MAX) { } else if (next_edges.bottom < INT_MAX) {
*y = next_edges.bottom - border.bottom *y = next_edges.bottom - border.bottom - rc.gap
- view_effective_height(view, /* use_pending */ false); - view_effective_height(view, /* use_pending */ false);
} }
} }
@ -222,27 +225,27 @@ resistance_resize_apply(struct view *view, struct wlr_box *new_geom)
if (view->server->resize_edges & WLR_EDGE_LEFT) { if (view->server->resize_edges & WLR_EDGE_LEFT) {
if (next_edges.left > INT_MIN) { if (next_edges.left > INT_MIN) {
new_geom->x = next_edges.left + border.left; new_geom->x = next_edges.left + border.left + rc.gap;
new_geom->width = view->current.width new_geom->width = view->current.width
+ view->current.x - new_geom->x; + view->current.x - new_geom->x;
} }
} else if (view->server->resize_edges & WLR_EDGE_RIGHT) { } else if (view->server->resize_edges & WLR_EDGE_RIGHT) {
if (next_edges.right < INT_MAX) { if (next_edges.right < INT_MAX) {
new_geom->width = next_edges.right new_geom->width = next_edges.right
- view->current.x - border.right; - view->current.x - border.right - rc.gap;
} }
} }
if (view->server->resize_edges & WLR_EDGE_TOP) { if (view->server->resize_edges & WLR_EDGE_TOP) {
if (next_edges.top > INT_MIN) { if (next_edges.top > INT_MIN) {
new_geom->y = next_edges.top + border.top; new_geom->y = next_edges.top + border.top + rc.gap;
new_geom->height = view->current.height new_geom->height = view->current.height
+ view->current.y - new_geom->y; + view->current.y - new_geom->y;
} }
} else if (view->server->resize_edges & WLR_EDGE_BOTTOM) { } else if (view->server->resize_edges & WLR_EDGE_BOTTOM) {
if (next_edges.bottom < INT_MAX) { if (next_edges.bottom < INT_MAX) {
new_geom->height = next_edges.bottom new_geom->height = next_edges.bottom
- view->current.y - border.bottom; - view->current.y - border.bottom - rc.gap;
} }
} }
} }