[Xfce4-commits] <ristretto:ristretto-0.0> Fix 'zoom-fit' when resizing

Stephan Arts noreply at xfce.org
Sun Oct 23 19:12:31 CEST 2011


Updating branch refs/heads/ristretto-0.0
         to 3c9fbba878bb2518b4e9915f43be88dcb0b501a8 (commit)
       from 656f9b4bb9f4b7d51cc012a384e08fa4f0175879 (commit)

commit 3c9fbba878bb2518b4e9915f43be88dcb0b501a8
Author: Stephan Arts <stephan at xfce.org>
Date:   Tue Mar 10 13:02:15 2009 +0100

    Fix 'zoom-fit' when resizing

 src/picture_viewer.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/picture_viewer.c b/src/picture_viewer.c
index e3230d3..427274a 100644
--- a/src/picture_viewer.c
+++ b/src/picture_viewer.c
@@ -932,7 +932,9 @@ cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer)
     GdkPixbuf *p_src_pixbuf = NULL;
     GdkPixbuf *p_tmp_pixbuf = NULL;
     gdouble *p_scale = NULL;
+    gboolean *p_fit_to_screen= NULL;
     gdouble scale;
+    gboolean fit_to_screen = FALSE;
     gdouble width, height;
     GtkWidget *widget = GTK_WIDGET (viewer);
 
@@ -946,12 +948,15 @@ cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer)
         }
 
         p_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
+        p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
         scale = *p_scale;
+        fit_to_screen = *p_fit_to_screen;
     }
 
-    if (scale <= 0)
+    if ((scale <= 0) || (fit_to_screen == TRUE))
     {
         scale = rstto_picture_viewer_calculate_scale (viewer);
+        *p_fit_to_screen = TRUE;
         *p_scale = scale;
     }
 
@@ -1157,18 +1162,37 @@ static void
 rstto_picture_viewer_set_zoom_mode(RsttoPictureViewer *viewer, RsttoZoomMode mode)
 {
     gdouble scale;
+    gboolean *p_fit_to_screen;
     viewer->priv->zoom_mode = mode;
 
     switch (viewer->priv->zoom_mode)
     {
         case RSTTO_ZOOM_MODE_CUSTOM:
+            if (viewer->priv->image)
+            {
+                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
+                *p_fit_to_screen = FALSE;
+                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
+            }
             break;
         case RSTTO_ZOOM_MODE_FIT:
+            if (viewer->priv->image)
+            {
+                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
+                *p_fit_to_screen = TRUE;
+                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
+            }
             scale = rstto_picture_viewer_calculate_scale (viewer);
             if (scale != -1.0)
                 rstto_picture_viewer_set_scale (viewer, scale);
             break;
         case RSTTO_ZOOM_MODE_100:
+            if (viewer->priv->image)
+            {
+                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
+                *p_fit_to_screen = FALSE;
+                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
+            }
             rstto_picture_viewer_set_scale (viewer, 1);
             break;
     }
@@ -1208,7 +1232,7 @@ rstto_picture_viewer_set_image (RsttoPictureViewer *viewer, RsttoImage *image)
         if (scale == NULL)
         {
             scale = g_new0 (gdouble, 1);
-            *scale = 0.0;
+            *scale = -1.0;
             g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-scale", scale);
         }
         if (fit_to_screen == NULL)


More information about the Xfce4-commits mailing list