If the image is within the viewport and we are zooming out, make the focus
2008-08-14 Martin Nordholts <martinn@svn.gnome.org> * app/display/gimpdisplayshell-scale.c (gimp_display_shell_scale_get_zoom_focus): If the image is within the viewport and we are zooming out, make the focus point be the center of the image. svn path=/trunk/; revision=26560
This commit is contained in:

committed by
Martin Nordholts

parent
57ec836f3e
commit
de82d2f7ec
@ -1,3 +1,10 @@
|
||||
2008-08-14 Martin Nordholts <martinn@svn.gnome.org>
|
||||
|
||||
* app/display/gimpdisplayshell-scale.c
|
||||
(gimp_display_shell_scale_get_zoom_focus): If the image is within
|
||||
the viewport and we are zooming out, make the focus point be the
|
||||
center of the image.
|
||||
|
||||
2008-08-14 Martin Nordholts <martinn@svn.gnome.org>
|
||||
|
||||
* app/display/gimpdisplayshell-scale.c
|
||||
|
@ -74,6 +74,7 @@ static void gimp_display_shell_scale_to (GimpDisplayShell *shell,
|
||||
gdouble x,
|
||||
gdouble y);
|
||||
static void gimp_display_shell_scale_get_zoom_focus (GimpDisplayShell *shell,
|
||||
gdouble new_scale,
|
||||
gint *x,
|
||||
gint *y);
|
||||
|
||||
@ -363,7 +364,7 @@ gimp_display_shell_scale (GimpDisplayShell *shell,
|
||||
|
||||
if (! SCALE_EQUALS (real_new_scale, current_scale))
|
||||
{
|
||||
gimp_display_shell_scale_get_zoom_focus (shell, &x, &y);
|
||||
gimp_display_shell_scale_get_zoom_focus (shell, real_new_scale, &x, &y);
|
||||
|
||||
gimp_display_shell_scale_to (shell, real_new_scale, x, y);
|
||||
}
|
||||
@ -888,6 +889,7 @@ gimp_display_shell_scale_to (GimpDisplayShell *shell,
|
||||
/**
|
||||
* gimp_display_shell_scale_get_zoom_focus:
|
||||
* @shell:
|
||||
* @new_scale:
|
||||
* @x:
|
||||
* @y:
|
||||
*
|
||||
@ -895,11 +897,29 @@ gimp_display_shell_scale_to (GimpDisplayShell *shell,
|
||||
**/
|
||||
static void
|
||||
gimp_display_shell_scale_get_zoom_focus (GimpDisplayShell *shell,
|
||||
gdouble new_scale,
|
||||
gint *x,
|
||||
gint *y)
|
||||
{
|
||||
GdkEvent *event;
|
||||
gdouble current_scale = gimp_zoom_model_get_factor (shell->zoom);
|
||||
|
||||
if (new_scale < current_scale &&
|
||||
gimp_display_shell_scale_image_is_within_viewport (shell))
|
||||
{
|
||||
/* If the image is within the viewport and we are zooming out, put
|
||||
* the zoom focus in the center of the image
|
||||
*/
|
||||
gint sw, sh;
|
||||
|
||||
gimp_display_shell_draw_get_scaled_image_size (shell,
|
||||
&sw,
|
||||
&sh);
|
||||
*x = -shell->offset_x + sw / 2;
|
||||
*y = -shell->offset_y + sh / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*x = shell->disp_width / 2;
|
||||
*y = shell->disp_height / 2;
|
||||
|
||||
@ -939,6 +959,7 @@ gimp_display_shell_scale_get_zoom_focus (GimpDisplayShell *shell,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_zoom_values (GtkAdjustment *adj,
|
||||
|
Reference in New Issue
Block a user