[Xfce4-commits] <ristretto:master> Fix an error introduced with previous commit when rendering the image with RSTTO_IMAGE_VIEWER_ORIENTATION_NONE.

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


Updating branch refs/heads/master
         to ccf4b3abcdf2abe22a9bf096ef5ffdc20abd1f5e (commit)
       from 0baa638b40c5bdf3bf73c4440625022504680e4c (commit)

commit ccf4b3abcdf2abe22a9bf096ef5ffdc20abd1f5e
Author: Stephan Arts <stephan at xfce.org>
Date:   Sun Aug 7 08:32:31 2011 +0200

    Fix an error introduced with previous commit when rendering
    the image with RSTTO_IMAGE_VIEWER_ORIENTATION_NONE.
    
    Improve the position of the image when using set_scale
    and the image passes the widget-border.

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

diff --git a/src/image_viewer.c b/src/image_viewer.c
index 97efbfb..84dc85c 100644
--- a/src/image_viewer.c
+++ b/src/image_viewer.c
@@ -961,6 +961,10 @@ rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
 {
     gdouble tmp_x, tmp_y;
     GtkAdjustment *vadjustment, *hadjustment;
+    gint pixbuf_width = 0;
+    gint pixbuf_height = 0;
+    gint pixbuf_x_offset = 0;
+    gint pixbuf_y_offset = 0;
 
     switch (viewer->priv->orientation)
     {
@@ -1060,16 +1064,24 @@ rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
         }
 
         viewer->priv->auto_scale = FALSE;
+
+        if (viewer->priv->dst_pixbuf)
+        {
+            pixbuf_width = gdk_pixbuf_get_width(viewer->priv->dst_pixbuf);
+            pixbuf_height = gdk_pixbuf_get_height(viewer->priv->dst_pixbuf);
+            pixbuf_x_offset = ((GTK_WIDGET(viewer)->allocation.width - pixbuf_width)/2);
+            pixbuf_y_offset = ((GTK_WIDGET(viewer)->allocation.height - pixbuf_height)/2);
+        }
         
         /*
          * When zooming in or out, 
          * try keeping the center of the viewport in the center.
          */
-        tmp_y = (gtk_adjustment_get_value(vadjustment) + (gtk_adjustment_get_page_size (vadjustment) / 2)) / viewer->priv->scale;
+        tmp_y = (gtk_adjustment_get_value(vadjustment) + (gtk_adjustment_get_page_size (vadjustment) / 2) - pixbuf_y_offset) / viewer->priv->scale;
         gtk_adjustment_set_value (vadjustment, (tmp_y*scale - (gtk_adjustment_get_page_size(vadjustment)/2)));
 
 
-        tmp_x = (gtk_adjustment_get_value(hadjustment) + (gtk_adjustment_get_page_size (hadjustment) / 2)) / viewer->priv->scale;
+        tmp_x = (gtk_adjustment_get_value(hadjustment) + (gtk_adjustment_get_page_size (hadjustment) / 2) - pixbuf_x_offset) / viewer->priv->scale;
         gtk_adjustment_set_value (hadjustment, (tmp_x*scale - (gtk_adjustment_get_page_size(hadjustment)/2)));
 
     }
@@ -1445,12 +1457,13 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer)
                 }
                 gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale));
                 gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale));
+
                 subpixbuf_x_offset = (gint)(gtk_adjustment_get_value (hadjustment) / relative_scale);
                 subpixbuf_y_offset = (gint)(gtk_adjustment_get_value (vadjustment) / relative_scale);
                 subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)?
                                (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width);
                 subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)?
-                               (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(width);
+                               (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height);
                 break;
             case RSTTO_IMAGE_VIEWER_ORIENT_180:
                 gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale));
@@ -1554,7 +1567,6 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer)
                 viewer->priv->dst_pixbuf = NULL;
             }
 
-
             tmp_pixbuf = gdk_pixbuf_new_subpixbuf (viewer->priv->pixbuf,
                     subpixbuf_x_offset,
                     subpixbuf_y_offset,


More information about the Xfce4-commits mailing list