From d1cff55348853868aa927f4cceacb3922b72b0c3 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Sat, 12 Jul 2025 14:54:37 +0800 Subject: [PATCH] feat: add option zoom_end_ratio --- config.conf | 3 ++- src/animation/client.h | 8 ++++---- src/animation/layer.h | 6 ++---- src/config/parse_config.h | 5 +++++ src/config/preset.h | 3 ++- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/config.conf b/config.conf index 22d8f89..aaa699b 100644 --- a/config.conf +++ b/config.conf @@ -34,7 +34,8 @@ animation_type_close=slide animation_fade_in=1 animation_fade_out=1 tag_animation_direction=1 -zoom_initial_ratio=0.5 +zoom_initial_ratio=0.3 +zoom_end_ratio=0.8 fadein_begin_opacity=0.5 fadeout_begin_opacity=0.8 animation_duration_move=500 diff --git a/src/animation/client.h b/src/animation/client.h index 18ece76..46919b5 100644 --- a/src/animation/client.h +++ b/src/animation/client.h @@ -788,16 +788,16 @@ void init_fadeout_client(Client *c) { } else { fadeout_cient->current.y = (fadeout_cient->geom.height - - fadeout_cient->geom.height * zoom_initial_ratio) / + fadeout_cient->geom.height * zoom_end_ratio) / 2; fadeout_cient->current.x = (fadeout_cient->geom.width - - fadeout_cient->geom.width * zoom_initial_ratio) / + fadeout_cient->geom.width * zoom_end_ratio) / 2; fadeout_cient->current.width = - fadeout_cient->geom.width * zoom_initial_ratio; + fadeout_cient->geom.width * zoom_end_ratio; fadeout_cient->current.height = - fadeout_cient->geom.height * zoom_initial_ratio; + fadeout_cient->geom.height * zoom_end_ratio; } fadeout_cient->animation.passed_frames = 0; diff --git a/src/animation/layer.h b/src/animation/layer.h index 12d520f..73b4464 100644 --- a/src/animation/layer.h +++ b/src/animation/layer.h @@ -408,10 +408,8 @@ void init_fadeout_layers(LayerSurface *l) { strcmp(layer_animation_type_close, "zoom") == 0) || (l->animation_type_close && strcmp(l->animation_type_close, "zoom") == 0)) { - fadeout_layer->current.width = - (float)l->geom.width * zoom_initial_ratio; - fadeout_layer->current.height = - (float)l->geom.height * zoom_initial_ratio; + fadeout_layer->current.width = (float)l->geom.width * zoom_end_ratio; + fadeout_layer->current.height = (float)l->geom.height * zoom_end_ratio; fadeout_layer->current.x = usable_area.x + usable_area.width / 2 - fadeout_layer->current.width / 2; fadeout_layer->current.y = usable_area.y + usable_area.height / 2 - diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 5068d70..fb086a6 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -145,6 +145,7 @@ typedef struct { int animation_fade_out; int tag_animation_direction; float zoom_initial_ratio; + float zoom_end_ratio; float fadein_begin_opacity; float fadeout_begin_opacity; uint32_t animation_duration_move; @@ -881,6 +882,8 @@ void parse_config_line(Config *config, const char *line) { config->tag_animation_direction = atoi(value); } else if (strcmp(key, "zoom_initial_ratio") == 0) { config->zoom_initial_ratio = atof(value); + } else if (strcmp(key, "zoom_end_ratio") == 0) { + config->zoom_end_ratio = atof(value); } else if (strcmp(key, "fadein_begin_opacity") == 0) { config->fadein_begin_opacity = atof(value); } else if (strcmp(key, "fadeout_begin_opacity") == 0) { @@ -2139,6 +2142,7 @@ void override_config(void) { animation_fade_in = CLAMP_INT(config.animation_fade_in, 0, 1); animation_fade_out = CLAMP_INT(config.animation_fade_out, 0, 1); zoom_initial_ratio = CLAMP_FLOAT(config.zoom_initial_ratio, 0.1f, 1.0f); + zoom_end_ratio = CLAMP_FLOAT(config.zoom_end_ratio, 0.1f, 1.0f); fadein_begin_opacity = CLAMP_FLOAT(config.fadein_begin_opacity, 0.0f, 1.0f); fadeout_begin_opacity = CLAMP_FLOAT(config.fadeout_begin_opacity, 0.0f, 1.0f); @@ -2294,6 +2298,7 @@ void set_value_default() { config.animation_fade_out = animation_fade_out; // Enable animation fade out config.tag_animation_direction = tag_animation_direction; // 标签动画方向 config.zoom_initial_ratio = zoom_initial_ratio; // 动画起始窗口比例 + config.zoom_end_ratio = zoom_end_ratio; // 动画结束窗口比例 config.fadein_begin_opacity = fadein_begin_opacity; // Begin opac window ratio for animations config.fadeout_begin_opacity = fadeout_begin_opacity; diff --git a/src/config/preset.h b/src/config/preset.h index ff63139..c1db4d9 100644 --- a/src/config/preset.h +++ b/src/config/preset.h @@ -17,7 +17,8 @@ int layer_animations = 0; // 是否启用layer动画 int tag_animation_direction = HORIZONTAL; // 标签动画方向 int animation_fade_in = 1; // Enable animation fade in int animation_fade_out = 1; // Enable animation fade out -float zoom_initial_ratio = 0.5; // 动画起始窗口比例 +float zoom_initial_ratio = 0.3; // 动画起始窗口比例 +float zoom_end_ratio = 0.8; // 动画结束窗口比例 float fadein_begin_opacity = 0.5; // Begin opac window ratio for animations float fadeout_begin_opacity = 0.5; // Begin opac window ratio for animations uint32_t animation_duration_move = 500; // Animation move speed