diff --git a/src/animation.c b/src/animation.c index b8de5748..782df249 100644 --- a/src/animation.c +++ b/src/animation.c @@ -265,16 +265,19 @@ weston_fade_run(struct weston_surface *surface, fade_frame, done, data); weston_spring_init(&fade->spring, k, start, end); + + fade->spring.friction = 1400; + fade->spring.previous = -(end - start) * 0.03; + surface->alpha = start; return fade; } WL_EXPORT void -weston_fade_update(struct weston_surface_animation *fade, - float start, float end, float k) +weston_fade_update(struct weston_surface_animation *fade, float target) { - weston_spring_init(&fade->spring, k, start, end); + fade->spring.target = target; } static void diff --git a/src/compositor.h b/src/compositor.h index faa2f200..4c746ca4 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -1142,8 +1142,7 @@ weston_fade_run(struct weston_surface *surface, float start, float end, float k, weston_surface_animation_done_func_t done, void *data); void -weston_fade_update(struct weston_surface_animation *fade, - float start, float end, float k); +weston_fade_update(struct weston_surface_animation *fade, float target); struct weston_surface_animation * weston_slide_run(struct weston_surface *surface, float start, float stop, diff --git a/src/shell.c b/src/shell.c index a3b1b1f8..b0335293 100644 --- a/src/shell.c +++ b/src/shell.c @@ -3135,12 +3135,11 @@ shell_fade(struct desktop_shell *shell, enum fade_type type) } if (shell->fade.animation) - weston_fade_update(shell->fade.animation, - shell->fade.surface->alpha, tint, 30.0); + weston_fade_update(shell->fade.animation, tint); else shell->fade.animation = weston_fade_run(shell->fade.surface, - 1.0 - tint, tint, 30.0, + 1.0 - tint, tint, 300.0, shell_fade_done, shell); } @@ -3457,7 +3456,7 @@ map(struct desktop_shell *shell, struct weston_surface *surface, { switch (shell->win_animation_type) { case ANIMATION_FADE: - weston_fade_run(surface, 0.0, 1.0, 200.0, NULL, NULL); + weston_fade_run(surface, 0.0, 1.0, 300.0, NULL, NULL); break; case ANIMATION_ZOOM: weston_zoom_run(surface, 0.8, 1.0, NULL, NULL);