[Xfce4-commits] <ristretto:master> Center while zooming

Stephan Arts noreply at xfce.org
Mon Aug 8 15:04:10 CEST 2011


Updating branch refs/heads/master
         to 13d34a35a289c85c57e0f6354d9812d954497ece (commit)
       from 28e64d4b4847b4f1068e6eeb9f177282693b09f4 (commit)

commit 13d34a35a289c85c57e0f6354d9812d954497ece
Author: Stephan Arts <stephan at xfce.org>
Date:   Tue Jul 26 23:23:28 2011 +0200

    Center while zooming

 src/image_viewer.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/src/image_viewer.c b/src/image_viewer.c
index 155e886..fcb69c8 100644
--- a/src/image_viewer.c
+++ b/src/image_viewer.c
@@ -782,7 +782,8 @@ rstto_image_viewer_transaction_free (RsttoImageViewerTransaction *tr)
 void
 rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
 {
-    viewer->priv->scale = scale;
+    gdouble tmp_x, tmp_y;
+
     if (scale == 0)
     {
         viewer->priv->auto_scale = TRUE;
@@ -790,8 +791,22 @@ rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
     else
     {
         viewer->priv->auto_scale = FALSE;
+        
+        /*
+         * When zooming in or out, 
+         * try keeping the center of the viewport in the center.
+         */
+        tmp_y = (gtk_adjustment_get_value(viewer->vadjustment) + (gtk_adjustment_get_page_size (viewer->vadjustment) / 2)) / viewer->priv->scale;
+        gtk_adjustment_set_value (viewer->vadjustment, (tmp_y*scale - (gtk_adjustment_get_page_size(viewer->vadjustment)/2)));
+
+
+        tmp_x = (gtk_adjustment_get_value(viewer->hadjustment) + (gtk_adjustment_get_page_size (viewer->hadjustment) / 2)) / viewer->priv->scale;
+        gtk_adjustment_set_value (viewer->hadjustment, (tmp_x*scale - (gtk_adjustment_get_page_size(viewer->hadjustment)/2)));
+
     }
 
+    viewer->priv->scale = scale;
+
     rstto_image_viewer_queued_repaint (viewer, TRUE);
 }
 


More information about the Xfce4-commits mailing list