[Goodies-commits] r3967 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Mon Feb 18 00:50:23 CET 2008


Author: stephan
Date: 2008-02-17 23:50:23 +0000 (Sun, 17 Feb 2008)
New Revision: 3967

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
improve box-zoom behaviour (don't zoom at a zero-size box)


Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2008-02-17 23:41:06 UTC (rev 3966)
+++ ristretto/trunk/src/picture_viewer.c	2008-02-17 23:50:23 UTC (rev 3967)
@@ -930,6 +930,8 @@
     {
         viewer->priv->motion.x = event->x;
         viewer->priv->motion.y = event->y;
+        viewer->priv->motion.current_x = event->x;
+        viewer->priv->motion.current_y = event->y;
         viewer->priv->motion.h_val = viewer->hadjustment->value;
         viewer->priv->motion.v_val = viewer->vadjustment->value;
 
@@ -1033,67 +1035,69 @@
                     gdouble h_scale = widget->allocation.width / box_width * scale;
                     gdouble v_scale = widget->allocation.height / box_height * scale;
 
-                    if (h_scale < v_scale)
+                    /** 
+                     * Check if the mouse has been moved (and there exists a box
+                     */
+                    if (box_height > 1 && box_width > 1)
                     {
-                        rstto_navigator_entry_set_scale(entry, h_scale);
-                        gdouble d_box_height = box_height * v_scale / h_scale;
-                        top_left_y -= (d_box_height - box_height) / 2;
-                        box_height = d_box_height;
-                    }
-                    else
-                    {
-                        rstto_navigator_entry_set_scale(entry, v_scale);
-                        gdouble d_box_width = box_width * h_scale / v_scale;
-                        top_left_x -= (d_box_width - box_width) / 2;
-                        box_width = d_box_width;
-                    }
-
-                    rstto_navigator_entry_set_fit_to_screen(entry, FALSE);
-                    scale = rstto_navigator_entry_get_scale(entry);
-
-
-                        
-                    if(viewer->hadjustment)
-                    {
-                        viewer->hadjustment->page_size = box_width / old_scale * scale;
-                        viewer->hadjustment->upper = width * scale;
-                        viewer->hadjustment->lower = 0;
-                        viewer->hadjustment->step_increment = 1;
-                        viewer->hadjustment->page_increment = 100;
-                        viewer->hadjustment->value = top_left_x / old_scale * scale;
-                        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+                        if (h_scale < v_scale)
                         {
-                            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+                            rstto_navigator_entry_set_scale(entry, h_scale);
+                            gdouble d_box_height = box_height * v_scale / h_scale;
+                            top_left_y -= (d_box_height - box_height) / 2;
+                            box_height = d_box_height;
                         }
-                        if(viewer->hadjustment->value < viewer->hadjustment->lower)
+                        else
                         {
-                            viewer->hadjustment->value = viewer->hadjustment->lower;
+                            rstto_navigator_entry_set_scale(entry, v_scale);
+                            gdouble d_box_width = box_width * h_scale / v_scale;
+                            top_left_x -= (d_box_width - box_width) / 2;
+                            box_width = d_box_width;
                         }
-                        gtk_adjustment_changed(viewer->hadjustment);
-                        gtk_adjustment_value_changed(viewer->hadjustment);
-                    }
-                    if(viewer->vadjustment)
-                    {
-                        viewer->vadjustment->page_size = box_height /old_scale* scale;
-                        viewer->vadjustment->upper = height * scale;
-                        viewer->vadjustment->lower = 0;
-                        viewer->vadjustment->step_increment = 1;
-                        viewer->vadjustment->page_increment = 100;
-                        viewer->vadjustment->value = top_left_y / old_scale * scale;
-                        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+
+                        rstto_navigator_entry_set_fit_to_screen(entry, FALSE);
+                        scale = rstto_navigator_entry_get_scale(entry);
+
+                        if(viewer->hadjustment)
                         {
-                            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+                            viewer->hadjustment->page_size = box_width / old_scale * scale;
+                            viewer->hadjustment->upper = width * scale;
+                            viewer->hadjustment->lower = 0;
+                            viewer->hadjustment->step_increment = 1;
+                            viewer->hadjustment->page_increment = 100;
+                            viewer->hadjustment->value = top_left_x / old_scale * scale;
+                            if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+                            {
+                                viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+                            }
+                            if(viewer->hadjustment->value < viewer->hadjustment->lower)
+                            {
+                                viewer->hadjustment->value = viewer->hadjustment->lower;
+                            }
+                            gtk_adjustment_changed(viewer->hadjustment);
+                            gtk_adjustment_value_changed(viewer->hadjustment);
                         }
-                        if(viewer->vadjustment->value < viewer->vadjustment->lower)
+                        if(viewer->vadjustment)
                         {
-                            viewer->vadjustment->value = viewer->vadjustment->lower;
+                            viewer->vadjustment->page_size = box_height /old_scale* scale;
+                            viewer->vadjustment->upper = height * scale;
+                            viewer->vadjustment->lower = 0;
+                            viewer->vadjustment->step_increment = 1;
+                            viewer->vadjustment->page_increment = 100;
+                            viewer->vadjustment->value = top_left_y / old_scale * scale;
+                            if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+                            {
+                                viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+                            }
+                            if(viewer->vadjustment->value < viewer->vadjustment->lower)
+                            {
+                                viewer->vadjustment->value = viewer->vadjustment->lower;
+                            }
+                            gtk_adjustment_changed(viewer->vadjustment);
+                            gtk_adjustment_value_changed(viewer->vadjustment);
                         }
-                        gtk_adjustment_changed(viewer->vadjustment);
-                        gtk_adjustment_value_changed(viewer->vadjustment);
                     }
                 }
-                viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_NONE;
-
                 if (viewer->priv->refresh.idle_id > 0)
                 {
                     g_source_remove(viewer->priv->refresh.idle_id);
@@ -1104,6 +1108,8 @@
 
     }
 
+    viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_NONE;
+
 }
 
 static void




More information about the Goodies-commits mailing list