compositor: Make spring model always use the same time step
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user