Increment frame_counter before calling animation->frame().
authorScott Moreau <oreaus@gmail.com>
Thu, 14 Jun 2012 07:01:56 +0000 (01:01 -0600)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 15 Jun 2012 14:21:27 +0000 (10:21 -0400)
Iterate the frame_counter before calling animation->frame() because the animation might be
destroyed in this path. The first frame is now 1 (not 0) in the animation frame handlers.

src/compositor.c
src/util.c

index 51347dc..0d07576 100644 (file)
@@ -956,7 +956,7 @@ fade_frame(struct weston_animation *animation,
                             struct weston_compositor, fade.animation);
        struct weston_surface *surface;
 
-       if (animation->frame_counter == 0)
+       if (animation->frame_counter <= 1)
                compositor->fade.spring.timestamp = msecs;
 
        surface = compositor->fade.surface;
@@ -1073,8 +1073,8 @@ weston_output_repaint(struct weston_output *output, int msecs)
        wl_list_init(&frame_callback_list);
 
        wl_list_for_each_safe(animation, next, &output->animation_list, link) {
-               animation->frame(animation, output, msecs);
                animation->frame_counter++;
+               animation->frame(animation, output, msecs);
        }
 }
 
@@ -2735,7 +2735,7 @@ static void
 weston_zoom_frame_z(struct weston_animation *animation,
                struct weston_output *output, uint32_t msecs)
 {
-       if (animation->frame_counter == 0)
+       if (animation->frame_counter <= 1)
                output->zoom.spring_z.timestamp = msecs;
 
        weston_spring_update(&output->zoom.spring_z, msecs);
index 3418a8a..e2547a9 100644 (file)
@@ -135,7 +135,7 @@ weston_zoom_frame(struct weston_animation *animation,
        struct weston_surface *es = zoom->surface;
        GLfloat scale;
 
-       if (animation->frame_counter == 0)
+       if (animation->frame_counter <= 1)
                zoom->spring.timestamp = msecs;
 
        weston_spring_update(&zoom->spring, msecs);
@@ -472,7 +472,7 @@ weston_fade_frame(struct weston_animation *animation,
        struct weston_surface *es = fade->surface;
        float fade_factor;
 
-       if (animation->frame_counter == 0)
+       if (animation->frame_counter <= 1)
                fade->spring.timestamp = msecs;
 
        weston_spring_update(&fade->spring, msecs);