gimp r27452 - in trunk: . app/tools



Author: martinn
Date: Tue Oct 28 18:12:20 2008
New Revision: 27452
URL: http://svn.gnome.org/viewvc/gimp?rev=27452&view=rev

Log:
Bug 556603 â Zoom region always zooms in center of image

* app/tools/gimpmagnifytool.c (gimp_magnify_tool_button_release):
When zooming with a click, use gimp_display_shell_scale() instead
of local zoom logic.


Modified:
   trunk/ChangeLog
   trunk/app/tools/gimpmagnifytool.c

Modified: trunk/app/tools/gimpmagnifytool.c
==============================================================================
--- trunk/app/tools/gimpmagnifytool.c	(original)
+++ trunk/app/tools/gimpmagnifytool.c	Tue Oct 28 18:12:20 2008
@@ -190,8 +190,10 @@
       if (release_type == GIMP_BUTTON_RELEASE_CLICK ||
           release_type == GIMP_BUTTON_RELEASE_NO_MOTION)
         {
-          new_scale = gimp_zoom_model_zoom_step (options->zoom_type,
-                                                 current_scale);
+          gimp_display_shell_scale (shell,
+                                    options->zoom_type,
+                                    0.0,
+                                    GIMP_ZOOM_FOCUS_BEST_GUESS);
         }
       else
         {
@@ -219,71 +221,71 @@
             }
 
           new_scale = current_scale * factor;
-        }
-
-      if (new_scale != current_scale)
-        {
-          gdouble xres;
-          gdouble yres;
-          gint    offset_x = 0;
-          gint    offset_y = 0;
-
-          gimp_image_get_resolution (display->image, &xres, &yres);
 
-          switch (options->zoom_type)
+          if (new_scale != current_scale)
             {
-            case GIMP_ZOOM_IN:
-              /*  move the center of the rectangle to the center of the
-               *  viewport:
-               *
-               *  new_offset = center of rectangle in new scale screen coords
-               *               including offset
-               *               -
-               *               center of viewport in screen coords without
-               *               offset
-               */
-              offset_x = RINT (new_scale * ((x1 + x2) / 2.0) *
-                               SCREEN_XRES (shell) / xres -
-                               (shell->disp_width / 2.0));
-
-              offset_y = RINT (new_scale * ((y1 + y2) / 2.0) *
-                               SCREEN_YRES (shell) / yres -
-                               (shell->disp_height / 2.0));
-              break;
-
-            case GIMP_ZOOM_OUT:
-              /*  move the center of the viewport to the center of the
-               *  rectangle:
-               *
-               *  new_offset = center of viewport in new scale screen coords
-               *               including offset
-               *               -
-               *               center of rectangle in screen coords without
-               *               offset
-               */
-              offset_x = RINT (new_scale * UNSCALEX (shell,
-                                                     shell->offset_x +
-                                                     shell->disp_width / 2.0) *
-                               SCREEN_XRES (shell) / xres -
-                               (SCALEX (shell, (x1 + x2) / 2.0) -
-                                shell->offset_x));
-
-              offset_y = RINT (new_scale * UNSCALEY (shell,
-                                                     shell->offset_y +
-                                                     shell->disp_height / 2.0) *
-                               SCREEN_YRES (shell) / yres -
-                               (SCALEY (shell, (y1 + y2) / 2.0) -
-                                shell->offset_y));
-              break;
-
-            default:
-              break;
+              gdouble xres;
+              gdouble yres;
+              gint    offset_x = 0;
+              gint    offset_y = 0;
+
+              gimp_image_get_resolution (display->image, &xres, &yres);
+
+              switch (options->zoom_type)
+                {
+                case GIMP_ZOOM_IN:
+                  /*  move the center of the rectangle to the center of the
+                   *  viewport:
+                   *
+                   *  new_offset = center of rectangle in new scale screen coords
+                   *               including offset
+                   *               -
+                   *               center of viewport in screen coords without
+                   *               offset
+                   */
+                  offset_x = RINT (new_scale * ((x1 + x2) / 2.0) *
+                                   SCREEN_XRES (shell) / xres -
+                                   (shell->disp_width / 2.0));
+
+                  offset_y = RINT (new_scale * ((y1 + y2) / 2.0) *
+                                   SCREEN_YRES (shell) / yres -
+                                   (shell->disp_height / 2.0));
+                  break;
+
+                case GIMP_ZOOM_OUT:
+                  /*  move the center of the viewport to the center of the
+                   *  rectangle:
+                   *
+                   *  new_offset = center of viewport in new scale screen coords
+                   *               including offset
+                   *               -
+                   *               center of rectangle in screen coords without
+                   *               offset
+                   */
+                  offset_x = RINT (new_scale * UNSCALEX (shell,
+                                                         shell->offset_x +
+                                                         shell->disp_width / 2.0) *
+                                   SCREEN_XRES (shell) / xres -
+                                   (SCALEX (shell, (x1 + x2) / 2.0) -
+                                    shell->offset_x));
+
+                  offset_y = RINT (new_scale * UNSCALEY (shell,
+                                                         shell->offset_y +
+                                                         shell->disp_height / 2.0) *
+                                   SCREEN_YRES (shell) / yres -
+                                   (SCALEY (shell, (y1 + y2) / 2.0) -
+                                    shell->offset_y));
+                  break;
+
+                default:
+                  break;
+                }
+
+              gimp_display_shell_scale_by_values (shell,
+                                                  new_scale,
+                                                  offset_x, offset_y,
+                                                  options->auto_resize);
             }
-
-          gimp_display_shell_scale_by_values (shell,
-                                              new_scale,
-                                              offset_x, offset_y,
-                                              options->auto_resize);
         }
     }
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]