opt: optimize slide animaiton dir judge

This commit is contained in:
DreamMaoMao 2025-09-09 12:14:36 +08:00
parent b341ed2d00
commit c9843ec05a

View file

@ -8,23 +8,35 @@ void set_rect_size(struct wlr_scene_rect *rect, int width, int height) {
wlr_scene_rect_set_size(rect, GEZERO(width), GEZERO(height)); wlr_scene_rect_set_size(rect, GEZERO(width), GEZERO(height));
} }
int is_special_animaiton_rule(Client *c) { bool is_horizontal_stack_layout(Monitor *m) {
int visible_client_number = 0; if (!m->pertag->curtag &&
Client *count_c; (strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "tile") == 0 ||
wl_list_for_each(count_c, &clients, link) { strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "spiral") == 0 ||
if (count_c && VISIBLEON(count_c, selmon) && !count_c->isminied && strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "dwindle") == 0 ||
!count_c->iskilling && !count_c->isfloating) { strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "deck") == 0))
visible_client_number++; return true;
}
if (m->pertag->curtag &&
(strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "tile") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "spiral") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "dwindle") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "deck") == 0))
return true;
return false;
} }
if (is_scroller_layout(selmon) && !c->isfloating) { int is_special_animaiton_rule(Client *c) {
if (is_scroller_layout(c->mon) && !c->isfloating) {
return DOWN; return DOWN;
} else if (visible_client_number < 2 && !c->isfloating) { } else if (c->mon->visible_tiling_clients == 1 && !c->isfloating) {
return DOWN; return DOWN;
} else if (visible_client_number == 2 && !c->isfloating && !new_is_master) { } else if (c->mon->visible_tiling_clients == 2 && !c->isfloating &&
!new_is_master && is_horizontal_stack_layout(c->mon)) {
return RIGHT; return RIGHT;
} else if (!c->isfloating && new_is_master) { } else if (!c->isfloating && new_is_master &&
is_horizontal_stack_layout(c->mon)) {
return LEFT; return LEFT;
} else { } else {
return UNDIR; return UNDIR;