[Xfce4-commits] ristretto:ristretto-0.0 Improved behaviour when zooming inside a previewed image

2011-10-23 Thread Stephan Arts
Updating branch refs/heads/ristretto-0.0
 to 7566a5a251dd6a37bc30889dab19aa8615361b5a (commit)
   from 3c9fbba878bb2518b4e9915f43be88dcb0b501a8 (commit)

commit 7566a5a251dd6a37bc30889dab19aa8615361b5a
Author: Stephan Arts step...@xfce.org
Date:   Wed Mar 11 16:36:13 2009 +0100

Improved behaviour when zooming inside a previewed image

 src/picture_viewer.c |  126 +
 1 files changed, 54 insertions(+), 72 deletions(-)

diff --git a/src/picture_viewer.c b/src/picture_viewer.c
index 427274a..910c6cb 100644
--- a/src/picture_viewer.c
+++ b/src/picture_viewer.c
@@ -934,6 +934,8 @@ cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer 
*viewer)
 gdouble *p_scale = NULL;
 gboolean *p_fit_to_screen= NULL;
 gdouble scale;
+gdouble thumb_scale = 1;
+gdouble thumb_width = 0;
 gboolean fit_to_screen = FALSE;
 gdouble width, height;
 GtkWidget *widget = GTK_WIDGET (viewer);
@@ -945,96 +947,76 @@ cb_rstto_picture_viewer_queued_repaint 
(RsttoPictureViewer *viewer)
 {
 width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
 height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
+if (viewer-priv-state != RSTTO_PICTURE_VIEWER_STATE_NORMAL)
+{
+switch (viewer-priv-state)
+{
+case RSTTO_PICTURE_VIEWER_STATE_PREVIEW:
+p_src_pixbuf = rstto_image_get_thumbnail 
(viewer-priv-image);
+thumb_width = (gdouble)gdk_pixbuf_get_width 
(p_src_pixbuf);
+thumb_scale = (thumb_width / width);
+break;
+default:
+break;
+}
+}
 }
 
 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) || (fit_to_screen == TRUE))
-{
-scale = rstto_picture_viewer_calculate_scale (viewer);
-*p_fit_to_screen = TRUE;
-*p_scale = scale;
+if ((scale = 0) || (fit_to_screen == TRUE))
+{
+scale = rstto_picture_viewer_calculate_scale (viewer);
+*p_fit_to_screen = TRUE;
+*p_scale = scale;
+}
 }
 
+
 rstto_picture_viewer_calculate_adjustments (viewer, scale);
 
 
-switch (viewer-priv-state)
+if (viewer-priv-repaint.refresh)
 {
-case RSTTO_PICTURE_VIEWER_STATE_NORMAL:
-if (viewer-priv-repaint.refresh)
+if (p_src_pixbuf)
+{
+/**
+ *  tmp_scale is the factor between the original image and the 
thumbnail,
+ *  when looking at the actual image, tmp_scale == 1.0
+ */
+gint x = (gint)viewer-hadjustment-value * scale;
+gint y = (gint)viewer-vadjustment-value * scale;
+
+p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
+   (gint)(x * thumb_scale), 
+  (y * thumb_scale),
+((widget-allocation.width 
/ scale)  width?
+  
(widget-allocation.width / scale)*thumb_scale:width*thumb_scale),
+
((widget-allocation.height / scale)  height?
+  
(widget-allocation.height / scale)*thumb_scale:height*thumb_scale));
+
+if(viewer-priv-dst_pixbuf)
 {
-if (p_src_pixbuf)
-{
-p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-   
(gint)(viewer-hadjustment-value / scale), 
-  
viewer-vadjustment-value / scale,
-
((widget-allocation.width/scale))  width?
-  
widget-allocation.width/scale:width,
-
((widget-allocation.height/scale)) height?
-  
widget-allocation.height/scale:height);
-
-if(viewer-priv-dst_pixbuf)
-{
-g_object_unref(viewer-priv-dst_pixbuf);
-viewer-priv-dst_pixbuf = NULL;
-}
-if(p_tmp_pixbuf)
-{
-gint dst_width = gdk_pixbuf_get_width 
(p_tmp_pixbuf)*scale;
-gint dst_height = gdk_pixbuf_get_height 
(p_tmp_pixbuf)*scale;
-   

[Xfce4-commits] ristretto:ristretto-0.0 Improved behaviour when zooming inside a previewed image

2011-10-23 Thread Stephan Arts
Updating branch refs/heads/ristretto-0.0
 to 7566a5a251dd6a37bc30889dab19aa8615361b5a (commit)
   from 3c9fbba878bb2518b4e9915f43be88dcb0b501a8 (commit)

commit 7566a5a251dd6a37bc30889dab19aa8615361b5a
Author: Stephan Arts step...@xfce.org
Date:   Wed Mar 11 16:36:13 2009 +0100

Improved behaviour when zooming inside a previewed image

 src/picture_viewer.c |  126 +
 1 files changed, 54 insertions(+), 72 deletions(-)

diff --git a/src/picture_viewer.c b/src/picture_viewer.c
index 427274a..910c6cb 100644
--- a/src/picture_viewer.c
+++ b/src/picture_viewer.c
@@ -934,6 +934,8 @@ cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer 
*viewer)
 gdouble *p_scale = NULL;
 gboolean *p_fit_to_screen= NULL;
 gdouble scale;
+gdouble thumb_scale = 1;
+gdouble thumb_width = 0;
 gboolean fit_to_screen = FALSE;
 gdouble width, height;
 GtkWidget *widget = GTK_WIDGET (viewer);
@@ -945,96 +947,76 @@ cb_rstto_picture_viewer_queued_repaint 
(RsttoPictureViewer *viewer)
 {
 width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
 height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
+if (viewer-priv-state != RSTTO_PICTURE_VIEWER_STATE_NORMAL)
+{
+switch (viewer-priv-state)
+{
+case RSTTO_PICTURE_VIEWER_STATE_PREVIEW:
+p_src_pixbuf = rstto_image_get_thumbnail 
(viewer-priv-image);
+thumb_width = (gdouble)gdk_pixbuf_get_width 
(p_src_pixbuf);
+thumb_scale = (thumb_width / width);
+break;
+default:
+break;
+}
+}
 }
 
 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) || (fit_to_screen == TRUE))
-{
-scale = rstto_picture_viewer_calculate_scale (viewer);
-*p_fit_to_screen = TRUE;
-*p_scale = scale;
+if ((scale = 0) || (fit_to_screen == TRUE))
+{
+scale = rstto_picture_viewer_calculate_scale (viewer);
+*p_fit_to_screen = TRUE;
+*p_scale = scale;
+}
 }
 
+
 rstto_picture_viewer_calculate_adjustments (viewer, scale);
 
 
-switch (viewer-priv-state)
+if (viewer-priv-repaint.refresh)
 {
-case RSTTO_PICTURE_VIEWER_STATE_NORMAL:
-if (viewer-priv-repaint.refresh)
+if (p_src_pixbuf)
+{
+/**
+ *  tmp_scale is the factor between the original image and the 
thumbnail,
+ *  when looking at the actual image, tmp_scale == 1.0
+ */
+gint x = (gint)viewer-hadjustment-value * scale;
+gint y = (gint)viewer-vadjustment-value * scale;
+
+p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
+   (gint)(x * thumb_scale), 
+  (y * thumb_scale),
+((widget-allocation.width 
/ scale)  width?
+  
(widget-allocation.width / scale)*thumb_scale:width*thumb_scale),
+
((widget-allocation.height / scale)  height?
+  
(widget-allocation.height / scale)*thumb_scale:height*thumb_scale));
+
+if(viewer-priv-dst_pixbuf)
 {
-if (p_src_pixbuf)
-{
-p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-   
(gint)(viewer-hadjustment-value / scale), 
-  
viewer-vadjustment-value / scale,
-
((widget-allocation.width/scale))  width?
-  
widget-allocation.width/scale:width,
-
((widget-allocation.height/scale)) height?
-  
widget-allocation.height/scale:height);
-
-if(viewer-priv-dst_pixbuf)
-{
-g_object_unref(viewer-priv-dst_pixbuf);
-viewer-priv-dst_pixbuf = NULL;
-}
-if(p_tmp_pixbuf)
-{
-gint dst_width = gdk_pixbuf_get_width 
(p_tmp_pixbuf)*scale;
-gint dst_height = gdk_pixbuf_get_height 
(p_tmp_pixbuf)*scale;
-