[PATCH weston] animation: Use fixed spring in weston_view_animation_run

Daiki Ueno ueno at unixuser.org
Mon Apr 7 23:54:43 PDT 2014


From: Daiki Ueno <ueno at gnu.org>

Since commit 3a869019, weston_view_animation_run initializes the
spring with an arbitrary value range.  This should be fine if the
range is narrow enough, but if the range is wide, the spring functions
converge too slowly, since the step is hard-coded.

This patch partially reverts the change and adjusts the fade-in/out
behavior in fade_frame instead.
---

With the current git master, I noticed a significant delay between
clicking on a text entry and getting weston-keyboard appearing.
Sometimes I get: "unexpectedly large timestamp jump" message.

After some debugging, it seems to be stalled at looping over a
considerably wide range [180.0, 0.0], with 0.01 step.

 src/animation.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/animation.c b/src/animation.c
index 521e4f1..85276e1 100644
--- a/src/animation.c
+++ b/src/animation.c
@@ -206,7 +206,7 @@ weston_view_animation_run(struct weston_view *view,
 	weston_matrix_init(&animation->transform.matrix);
 	wl_list_insert(&view->geometry.transformation_list,
 		       &animation->transform.link);
-	weston_spring_init(&animation->spring, 200.0, start, stop);
+	weston_spring_init(&animation->spring, 200.0, 0.0, 1.0);
 	animation->spring.friction = 700;
 	animation->animation.frame_counter = 0;
 	animation->animation.frame = weston_view_animation_frame;
@@ -275,12 +275,17 @@ weston_zoom_run(struct weston_view *view, float start, float stop,
 static void
 fade_frame(struct weston_view_animation *animation)
 {
-	if (animation->spring.current > 0.999)
+	float alpha;
+
+	alpha = animation->start +
+		(animation->stop - animation->start) *
+		animation->spring.current;
+	if (alpha > 0.999)
 		animation->view->alpha = 1;
-	else if (animation->spring.current < 0.001 )
+	else if (alpha < 0.001)
 		animation->view->alpha = 0;
 	else
-		animation->view->alpha = animation->spring.current;
+		animation->view->alpha = alpha;
 }
 
 WL_EXPORT struct weston_view_animation *
-- 
1.9.0



More information about the wayland-devel mailing list