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
This commit is contained in:
Kristian Høgsberg
2013-06-17 10:10:28 -04:00
parent 091b09652a
commit 5281fb1500
3 changed files with 10 additions and 9 deletions
+6 -3
View File
@@ -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
+1 -2
View File
@@ -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,
+3 -4
View File
@@ -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);