[evince/gnome-2-26] [libview] Fix page transitions in presentation mode



commit c493eb6c33fd49abd66f1e5f4dfc208776302594
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Mon Jun 8 16:24:32 2009 +0200

    [libview] Fix page transitions in presentation mode
    
    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 |    6 ++++++
 libview/ev-view.c                 |    8 ++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/libview/ev-transition-animation.c b/libview/ev-transition-animation.c
index efcb509..7e33023 100644
--- a/libview/ev-transition-animation.c
+++ b/libview/ev-transition-animation.c
@@ -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)
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 7626f86..80f8005 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -4161,10 +4161,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",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]