]> www.fi.muni.cz Git - evince.git/commitdiff
[libview] Fix page transitions in presentation mode
authorCarlos Garcia Campos <carlosgc@gnome.org>
Mon, 8 Jun 2009 14:24:32 +0000 (16:24 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Mon, 8 Jun 2009 14:24:32 +0000 (16:24 +0200)
Set the destination surface as soon as possible when starting a page
transition animation. Fixes bgo#583652 and bgo#581881.

libview/ev-transition-animation.c
libview/ev-view.c

index efcb509e24108af97fc38de2331171593d057ea5..7e33023e220734c35193a876484c709c889e432d 100644 (file)
@@ -635,6 +635,9 @@ ev_transition_animation_set_origin_surface (EvTransitionAnimation *animation,
 
        priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
 
+       if (priv->origin_surface == origin_surface)
+               return;
+
        surface = cairo_surface_reference (origin_surface);
 
        if (priv->origin_surface)
@@ -658,6 +661,9 @@ ev_transition_animation_set_dest_surface (EvTransitionAnimation *animation,
 
        priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
 
+       if (priv->dest_surface == dest_surface)
+               return;
+
        surface = cairo_surface_reference (dest_surface);
 
        if (priv->dest_surface)
index ee81680a4695ff6813dc8eb32b2a8238463fb720..f69b7b0a634b27a2b147b026ac5cad13c48a4b98 100644 (file)
@@ -4628,10 +4628,14 @@ ev_view_presentation_animation_start (EvView *view,
        if (!effect)
                return;
 
-       surface = ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page);
        view->animation = ev_transition_animation_new (effect);
+
+       surface = ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page);
        ev_transition_animation_set_origin_surface (view->animation, surface);
-               
+       surface = ev_pixbuf_cache_get_surface (view->pixbuf_cache, new_page);
+       if (surface)
+               ev_transition_animation_set_dest_surface (view->animation, surface);
+
        g_signal_connect (view->animation, "frame",
                          G_CALLBACK (ev_view_transition_animation_frame), view);
        g_signal_connect (view->animation, "finished",