app: allow to zoom with middle mouse button + control + drag up/down

This commit is contained in:
Michael Natterer 2016-11-16 14:41:30 +01:00
parent 014fdb87e5
commit b1ca8a161c
4 changed files with 44 additions and 1 deletions

View File

@ -628,6 +628,33 @@ gimp_display_shell_scale_by_values (GimpDisplayShell *shell,
gimp_display_shell_resume (shell);
}
void
gimp_display_shell_scale_drag (GimpDisplayShell *shell,
gdouble delta_x,
gdouble delta_y)
{
gdouble scale;
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
scale = gimp_zoom_model_get_factor (shell->zoom);
if (delta_y > 0)
{
gimp_display_shell_scale (shell,
GIMP_ZOOM_TO,
scale * 1.1,
GIMP_ZOOM_FOCUS_RETAIN_CENTERING_ELSE_BEST_GUESS);
}
else if (delta_y < 0)
{
gimp_display_shell_scale (shell,
GIMP_ZOOM_TO,
scale * 0.9,
GIMP_ZOOM_FOCUS_RETAIN_CENTERING_ELSE_BEST_GUESS);
}
}
/**
* gimp_display_shell_scale_shrink_wrap:
* @shell: the #GimpDisplayShell

View File

@ -60,6 +60,10 @@ void gimp_display_shell_scale_by_values (GimpDisplayShell *shell,
gint offset_y,
gboolean resize_window);
void gimp_display_shell_scale_drag (GimpDisplayShell *shell,
gdouble delta_x,
gdouble delta_y);
void gimp_display_shell_scale_shrink_wrap (GimpDisplayShell *shell,
gboolean grow_only);
void gimp_display_shell_scale_resize (GimpDisplayShell *shell,

View File

@ -888,6 +888,12 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
y,
constrain);
}
else if (shell->scaling)
{
gimp_display_shell_scale_drag (shell,
shell->scroll_last_x - x,
shell->scroll_last_y - y);
}
else
{
gimp_display_shell_scroll (shell,
@ -1502,12 +1508,16 @@ gimp_display_shell_start_scrolling (GimpDisplayShell *shell,
shell->scrolling = TRUE;
shell->scroll_last_x = x;
shell->scroll_last_y = y;
shell->rotating = (state & GDK_SHIFT_MASK) ? TRUE : FALSE;
shell->rotating = (state & gimp_get_extend_selection_mask ()) ? TRUE : FALSE;
shell->rotate_drag_angle = shell->rotate_angle;
shell->scaling = (state & gimp_get_toggle_behavior_mask ()) ? TRUE : FALSE;
if (shell->rotating)
gimp_display_shell_set_override_cursor (shell,
(GimpCursorType) GDK_EXCHANGE);
if (shell->scaling)
gimp_display_shell_set_override_cursor (shell,
(GimpCursorType) GIMP_CURSOR_ZOOM);
else
gimp_display_shell_set_override_cursor (shell,
(GimpCursorType) GDK_FLEUR);
@ -1526,6 +1536,7 @@ gimp_display_shell_stop_scrolling (GimpDisplayShell *shell,
shell->scroll_last_y = 0;
shell->rotating = FALSE;
shell->rotate_drag_angle = 0.0;
shell->scaling = FALSE;
gimp_display_shell_pointer_ungrab (shell, event);
}

View File

@ -197,6 +197,7 @@ struct _GimpDisplayShell
gint scroll_last_y;
gboolean rotating;
gdouble rotate_drag_angle;
gboolean scaling;
gpointer scroll_info;
GeglBuffer *mask;