compositor: Make spring model always use the same time step

dev
Kristian Høgsberg 13 years ago
parent ff298d9834
commit 3ff589df78
  1. 46
      compositor/compositor.c
  2. 1
      compositor/meego-tablet-shell.c

@ -163,34 +163,36 @@ 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) +
current + (current - spring->previous) + force * step * step; force * step * step;
spring->previous = current; spring->previous = current;
#if 0 #if 0
if (spring->current >= 1.0) { if (spring->current >= 1.0) {
#ifdef TWEENER_BOUNCE #ifdef TWEENER_BOUNCE
spring->current = 2.0 - spring->current; spring->current = 2.0 - spring->current;
spring->previous = 2.0 - spring->previous; spring->previous = 2.0 - spring->previous;
#else #else
spring->current = 1.0; spring->current = 1.0;
spring->previous = 1.0; spring->previous = 1.0;
#endif #endif
} }
if (spring->current <= 0.0) { if (spring->current <= 0.0) {
spring->current = 0.0; spring->current = 0.0;
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);

@ -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);
} }

Loading…
Cancel
Save