]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-transition-animation.c
Updated French translation by Robert-André Mauchin.
[evince.git] / shell / ev-transition-animation.c
index a99a47f1d410146320a1afb6d7a508bd6ff370ce..148b4c7734eccaba3e576e1f1ec5ef060ce722e3 100644 (file)
@@ -469,6 +469,81 @@ ev_transition_animation_push (cairo_t               *cr,
        }
 }
 
        }
 }
 
+static void
+ev_transition_animation_cover (cairo_t               *cr,
+                              EvTransitionAnimation *animation,
+                              EvTransitionEffect    *effect,
+                              gdouble                progress,
+                              GdkRectangle           page_area)
+{
+       EvTransitionAnimationPriv *priv;
+       gint width, height;
+       gint angle;
+
+       priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+       width = page_area.width;
+       height = page_area.height;
+
+       g_object_get (effect,
+                     "angle", &angle,
+                     NULL);
+
+       paint_surface (cr, priv->origin_surface, 0, 0, 0, page_area);
+
+       if (angle == 0) {
+               /* left to right */
+               paint_surface (cr, priv->dest_surface, width * (1 - progress), 0, 0, page_area);
+       } else {
+               /* top to bottom */
+               paint_surface (cr, priv->dest_surface, 0, height * (1 - progress), 0, page_area);
+       }
+}
+
+static void
+ev_transition_animation_uncover (cairo_t               *cr,
+                                EvTransitionAnimation *animation,
+                                EvTransitionEffect    *effect,
+                                gdouble                progress,
+                                GdkRectangle           page_area)
+{
+       EvTransitionAnimationPriv *priv;
+       gint width, height;
+       gint angle;
+
+       priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+       width = page_area.width;
+       height = page_area.height;
+
+       g_object_get (effect,
+                     "angle", &angle,
+                     NULL);
+
+       paint_surface (cr, priv->dest_surface, 0, 0, 0, page_area);
+
+       if (angle == 0) {
+               /* left to right */
+               paint_surface (cr, priv->origin_surface, - (width * progress), 0, 0, page_area);
+       } else {
+               /* top to bottom */
+               paint_surface (cr, priv->origin_surface, 0, - (height * progress), 0, page_area);
+       }
+}
+
+static void
+ev_transition_animation_fade (cairo_t               *cr,
+                             EvTransitionAnimation *animation,
+                             EvTransitionEffect    *effect,
+                             gdouble                progress,
+                             GdkRectangle           page_area)
+{
+       EvTransitionAnimationPriv *priv;
+
+       priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+       paint_surface (cr, priv->origin_surface, 0, 0, 0, page_area);
+       paint_surface (cr, priv->dest_surface, 0, 0, progress, page_area);
+}
+
 void
 ev_transition_animation_paint (EvTransitionAnimation *animation,
                               cairo_t               *cr,
 void
 ev_transition_animation_paint (EvTransitionAnimation *animation,
                               cairo_t               *cr,
@@ -513,6 +588,15 @@ ev_transition_animation_paint (EvTransitionAnimation *animation,
        case EV_TRANSITION_EFFECT_PUSH:
                ev_transition_animation_push (cr, animation, priv->effect, progress, page_area);
                break;
        case EV_TRANSITION_EFFECT_PUSH:
                ev_transition_animation_push (cr, animation, priv->effect, progress, page_area);
                break;
+       case EV_TRANSITION_EFFECT_COVER:
+               ev_transition_animation_cover (cr, animation, priv->effect, progress, page_area);
+               break;
+       case EV_TRANSITION_EFFECT_UNCOVER:
+               ev_transition_animation_uncover (cr, animation, priv->effect, progress, page_area);
+               break;
+       case EV_TRANSITION_EFFECT_FADE:
+               ev_transition_animation_fade (cr, animation, priv->effect, progress, page_area);
+               break;
        default: {
                GEnumValue *enum_value;
 
        default: {
                GEnumValue *enum_value;
 
@@ -584,3 +668,15 @@ ev_transition_animation_set_dest_surface (EvTransitionAnimation *animation,
        if (priv->origin_surface && priv->dest_surface)
                ev_timeline_start (EV_TIMELINE (animation));
 }
        if (priv->origin_surface && priv->dest_surface)
                ev_timeline_start (EV_TIMELINE (animation));
 }
+
+gboolean
+ev_transition_animation_ready (EvTransitionAnimation *animation)
+{
+       EvTransitionAnimationPriv *priv;
+
+       g_return_val_if_fail (EV_IS_TRANSITION_ANIMATION (animation), FALSE);
+
+       priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+       return (priv->origin_surface && priv->dest_surface);
+}