From fc081824fbb1f83384e8d7e8d8a3a39c23747aef Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Wed, 26 Mar 2025 22:52:34 +0800 Subject: [PATCH] opt: only scale first frame when open app --- maomao.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/maomao.c b/maomao.c index ee06e27..d78f16b 100644 --- a/maomao.c +++ b/maomao.c @@ -247,6 +247,7 @@ struct Client { // struct wl_event_source *timer_tick; pid_t pid; Client *swallowing, *swallowedby; + bool need_scale_first_frame; }; @@ -3674,6 +3675,7 @@ mapnotify(struct wl_listener *listener, void *data) { c->istiled = 0; c->iskilling = 0; c->scroller_proportion = scroller_default_proportion; + c->need_scale_first_frame = true; // nop if (new_is_master && strcmp(selmon->pertag->ltidxs[selmon->pertag->curtag]->name, @@ -4177,19 +4179,13 @@ void snap_scene_buffer_apply_size(struct wlr_scene_buffer *buffer, int sx, void buffer_set_size(Client *c, animationScale data) { - /* - only scale few previous frames in zoom in. without scale, - the surface may not fill window area at the beginning. - if scale too more frames, it can cause visual shaking - */ - double animation_passed = - (double)c->animation.passed_frames / c->animation.total_frames; - if (c->animation.current.width <= c->geom.width && - c->animation.current.height <= c->geom.height && (c->animation.action != OPEN || animation_passed > 0.1)) { + c->animation.current.height <= c->geom.height && !c->need_scale_first_frame) { return; } + c->need_scale_first_frame = false; + if (c->iskilling || c->animation.tagouting || c->animation.tagining || c->animation.tagouted) { return;