Author: post
Date: 2011-02-26 20:49:38 +0100 (Sat, 26 Feb 2011)
New Revision: 3834

Modified:
   trunk/src/rs-preview-widget.c
Log:
Fix zooming when using right click menu, and avoid zooming out of image.

Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c       2011-02-26 17:34:13 UTC (rev 3833)
+++ trunk/src/rs-preview-widget.c       2011-02-26 19:49:38 UTC (rev 3834)
@@ -170,8 +170,8 @@
 #if GTK_CHECK_VERSION(2,12,0)
        GtkWidget *lightsout_window;
 #endif
-       gboolean last_x;
-       gboolean last_y;
+       gint last_x;
+       gint last_y;
        gboolean prev_inside_image; /* For motion and leave function*/
 
        gboolean loupe_enabled;
@@ -520,13 +520,9 @@
        }
        else
        {
-               GdkWindow *window = GTK_WIDGET(preview->canvas)->window;
-               gint x, y;
-               GdkModifierType mask;
                gint real_x, real_y;
-               gdk_window_get_pointer(window, &x, &y, &mask);
                const gint view = get_view_from_coord(preview, preview->last_x, 
preview->last_y);
-               const gboolean inside_image = get_image_coord(preview, view, x, 
y, NULL, NULL, &real_x, &real_y, NULL, NULL);
+               const gboolean inside_image = get_image_coord(preview, view, 
preview->last_x, preview->last_y, NULL, NULL, &real_x, &real_y, NULL, NULL);
 
                /* Unsplit if needed */
                if (preview->views > 1)
@@ -548,17 +544,19 @@
                        val = (gdouble) height;
                        g_object_set(G_OBJECT(preview->vadjustment), "upper", 
val, NULL);
 
-                       if (inside_image)
+                       const gdouble hpage = 
gtk_adjustment_get_page_size(preview->hadjustment);
+                       const gdouble vpage = 
gtk_adjustment_get_page_size(preview->vadjustment);
+                       if (!inside_image)
                        {
-                               const gdouble hpage = 
gtk_adjustment_get_page_size(preview->hadjustment);
-                               const gdouble vpage = 
gtk_adjustment_get_page_size(preview->vadjustment);
-                               const gdouble hvalue = ((gdouble) real_x) - 
hpage/2.0;
-                               const gdouble vvalue = ((gdouble) real_y) - 
vpage/2.0;
-
-                               /* Modify adjusters */
-                               g_object_set(preview->hadjustment, "value", 
hvalue, NULL);
-                               g_object_set(preview->vadjustment, "value", 
vvalue, NULL);
+                               real_x = 0.5 * width;
+                               real_y = 0.5 * height;
                        }
+                       gdouble hvalue = MIN((double)width-hpage+10,((gdouble) 
real_x) - hpage/2.0);
+                       gdouble vvalue = MIN((double)height-vpage+10,((gdouble) 
real_y) - vpage/2.0);
+
+                       /* Modify adjusters */
+                       g_object_set(preview->hadjustment, "value", hvalue, 
NULL);
+                       g_object_set(preview->vadjustment, "value", vvalue, 
NULL);
                }
 
                gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window, 
NULL);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to