compositor: Make spring model always use the same time step

This commit is contained in:
Kristian Høgsberg
2011-10-29 13:41:18 -04:00
parent ff298d9834
commit 3ff589df78
2 changed files with 23 additions and 22 deletions
+7 -5
View File
@@ -163,16 +163,16 @@ wlsc_spring_update(struct wlsc_spring *spring, uint32_t msec)
{ {
double force, v, current, step; double force, v, current, step;
step = (msec - spring->timestamp) / 300.0; step = 0.01;
spring->timestamp = msec; while (4 < msec - spring->timestamp) {
current = spring->current; current = spring->current;
v = current - spring->previous; v = current - spring->previous;
force = spring->k * (spring->target - current) / 10.0 + force = spring->k * (spring->target - current) / 10.0 +
(spring->previous - current) - v * spring->friction; (spring->previous - current) - v * spring->friction;
spring->current = spring->current =
current + (current - spring->previous) + force * step * step; current + (current - spring->previous) +
force * step * step;
spring->previous = current; spring->previous = current;
#if 0 #if 0
@@ -191,6 +191,8 @@ wlsc_spring_update(struct wlsc_spring *spring, uint32_t msec)
spring->previous = 0.0; spring->previous = 0.0;
} }
#endif #endif
spring->timestamp += 4;
}
} }
WL_EXPORT int WL_EXPORT int
@@ -2070,7 +2072,7 @@ wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display)
wl_list_init(&ec->output_list); wl_list_init(&ec->output_list);
wl_list_init(&ec->binding_list); wl_list_init(&ec->binding_list);
wl_list_init(&ec->animation_list); wl_list_init(&ec->animation_list);
wlsc_spring_init(&ec->fade.spring, 0.8, 0.0, 0.0); wlsc_spring_init(&ec->fade.spring, 40.0, 1.0, 1.0);
ec->fade.animation.frame = fade_frame; ec->fade.animation.frame = fade_frame;
wl_list_init(&ec->fade.animation.link); wl_list_init(&ec->fade.animation.link);
-1
View File
@@ -684,6 +684,5 @@ shell_init(struct wlsc_compositor *compositor)
meego_tablet_shell_set_selection_focus; meego_tablet_shell_set_selection_focus;
launch_ux_daemon(shell); launch_ux_daemon(shell);
wlsc_spring_init(&compositor->fade.spring, 40.0, 1.0, 1.0);
meego_tablet_shell_set_state(shell, STATE_STARTING); meego_tablet_shell_set_state(shell, STATE_STARTING);
} }