mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-11-08 13:29:56 -05:00
opt: optimize layer init position judge
This commit is contained in:
parent
bde0be68e3
commit
a42d794b5e
1 changed files with 20 additions and 10 deletions
|
|
@ -101,35 +101,45 @@ void set_layer_dir_animaiton(LayerSurface *l, struct wlr_box *geo) {
|
||||||
if (!l)
|
if (!l)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const struct wlr_layer_surface_v1_state *state = &l->layer_surface->current;
|
||||||
|
struct wlr_box usable_area;
|
||||||
|
|
||||||
|
if (state->exclusive_zone > 0 || state->exclusive_zone == -1)
|
||||||
|
usable_area = l->mon->m;
|
||||||
|
else
|
||||||
|
usable_area = l->mon->w;
|
||||||
|
|
||||||
geo->width = l->geom.width;
|
geo->width = l->geom.width;
|
||||||
geo->height = l->geom.height;
|
geo->height = l->geom.height;
|
||||||
|
|
||||||
center_x = l->geom.x + l->geom.width / 2;
|
center_x = l->geom.x + l->geom.width / 2;
|
||||||
center_y = l->geom.y + l->geom.height / 2;
|
center_y = l->geom.y + l->geom.height / 2;
|
||||||
horizontal = center_x > l->mon->m.x + l->mon->m.width / 2 ? RIGHT : LEFT;
|
horizontal =
|
||||||
|
center_x > usable_area.x + usable_area.width / 2 ? RIGHT : LEFT;
|
||||||
horizontal_value = horizontal == LEFT
|
horizontal_value = horizontal == LEFT
|
||||||
? center_x - l->mon->m.x
|
? center_x - usable_area.x
|
||||||
: l->mon->m.x + l->mon->m.width - center_x;
|
: usable_area.x + usable_area.width - center_x;
|
||||||
vertical = center_y > l->mon->m.y + l->mon->m.height / 2 ? DOWN : UP;
|
vertical = center_y > usable_area.y + usable_area.height / 2 ? DOWN : UP;
|
||||||
vertical_value = vertical == UP ? center_y - l->mon->w.y
|
vertical_value = vertical == UP
|
||||||
: l->mon->m.y + l->mon->m.height - center_y;
|
? center_y - l->mon->w.y
|
||||||
|
: usable_area.y + usable_area.height - center_y;
|
||||||
slide_direction = horizontal_value < vertical_value ? horizontal : vertical;
|
slide_direction = horizontal_value < vertical_value ? horizontal : vertical;
|
||||||
|
|
||||||
switch (slide_direction) {
|
switch (slide_direction) {
|
||||||
case UP:
|
case UP:
|
||||||
geo->x = l->geom.x;
|
geo->x = l->geom.x;
|
||||||
geo->y = l->mon->m.y - l->geom.height;
|
geo->y = usable_area.y - l->geom.height;
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
geo->x = l->geom.x;
|
geo->x = l->geom.x;
|
||||||
geo->y = l->mon->m.y + l->mon->m.height;
|
geo->y = usable_area.y + usable_area.height;
|
||||||
break;
|
break;
|
||||||
case LEFT:
|
case LEFT:
|
||||||
geo->x = l->mon->m.x - l->geom.width;
|
geo->x = usable_area.x - l->geom.width;
|
||||||
geo->y = l->geom.y;
|
geo->y = l->geom.y;
|
||||||
break;
|
break;
|
||||||
case RIGHT:
|
case RIGHT:
|
||||||
geo->x = l->mon->m.x + l->mon->m.width;
|
geo->x = usable_area.x + usable_area.width;
|
||||||
geo->y = l->geom.y;
|
geo->y = l->geom.y;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue