From 5281fb1500b1ac430bde54426f85319e316c82e3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Mon, 17 Jun 2013 10:10:28 -0400 Subject: [PATCH] spring: Tweak the window fade-in spring to not overshoot The fade animation overshoots and rings for a bit dipping back into slightly transparent. Bug 61675 was right. https://bugs.freedesktop.org/show_bug.cgi?id=61675 --- src/animation.c | 9 ++++++--- src/compositor.h | 3 +-- src/shell.c | 7 +++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/animation.c b/src/animation.c index b8de574..782df24 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 faa2f20..4c746ca 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 a3b1b1f..b033529 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); -- 2.7.4