From 4117fa4474e7313a99f8311fce465ee6aa4dd692 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Thu, 7 Oct 2004 00:35:04 +0000 Subject: [PATCH] changed zoom actions to be GimpEnumActions using the GimpActionSelectType 2004-10-07 Michael Natterer * app/actions/view-actions.c: changed zoom actions to be GimpEnumActions using the GimpActionSelectType enum. Enables keyboard shortcuts for useless stuff like "zoom out a lot", and makes them better accessible for external controllers. * app/actions/view-commands.[ch]: renamed view_zoom_cmd_callback() to view_zoom_explicit_cmd_callback(), removed the zoom_in and zoom_out callbacks and added a new view_zoom_cmd_callback() for the new GimpActionSelectType-based actions. The implementation of the new zoom types is questionable but now there is a place where nomis can fill in nice formulas... --- ChangeLog | 14 ++++++ app/actions/view-actions.c | 63 ++++++++++++++++++------- app/actions/view-commands.c | 91 +++++++++++++++++++++++++++---------- app/actions/view-commands.h | 7 ++- 4 files changed, 131 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8355132e2d..419145b31d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2004-10-07 Michael Natterer + + * app/actions/view-actions.c: changed zoom actions to be + GimpEnumActions using the GimpActionSelectType enum. Enables + keyboard shortcuts for useless stuff like "zoom out a lot", and + makes them better accessible for external controllers. + + * app/actions/view-commands.[ch]: renamed view_zoom_cmd_callback() + to view_zoom_explicit_cmd_callback(), removed the zoom_in and + zoom_out callbacks and added a new view_zoom_cmd_callback() for + the new GimpActionSelectType-based actions. The implementation of + the new zoom types is questionable but now there is a place where + nomis can fill in nice formulas... + 2004-10-06 Michael Natterer * app/tools/gimpeditselectiontool.[ch]: added new parameter diff --git a/app/actions/view-actions.c b/app/actions/view-actions.c index c94c6ecd30..b88f0a59d1 100644 --- a/app/actions/view-actions.c +++ b/app/actions/view-actions.c @@ -74,18 +74,6 @@ static GimpActionEntry view_actions[] = G_CALLBACK (view_close_view_cmd_callback), GIMP_HELP_FILE_CLOSE }, - { "view-zoom-out", GTK_STOCK_ZOOM_OUT, - N_("Zoom _Out"), "minus", - N_("Zoom out"), - G_CALLBACK (view_zoom_out_cmd_callback), - GIMP_HELP_VIEW_ZOOM_OUT }, - - { "view-zoom-in", GTK_STOCK_ZOOM_IN, - N_("Zoom _In"), "plus", - N_("Zoom in"), - G_CALLBACK (view_zoom_in_cmd_callback), - GIMP_HELP_VIEW_ZOOM_IN }, - { "view-zoom-fit-in", GTK_STOCK_ZOOM_FIT, N_("_Fit Image in Window"), "E", N_("Fit image in window"), @@ -200,7 +188,45 @@ static GimpToggleActionEntry view_toggle_actions[] = GIMP_HELP_VIEW_FULLSCREEN } }; -static GimpRadioActionEntry view_zoom_actions[] = +static GimpEnumActionEntry view_zoom_actions[] = +{ + { "view-zoom", NULL, + "Set zoom factor", NULL, NULL, + GIMP_ACTION_SELECT_SET, + NULL }, + { "view-zoom-minimum", NULL, + "Zoom out as far as possible", NULL, NULL, + GIMP_ACTION_SELECT_FIRST, + NULL }, + { "view-zoom-maximum", NULL, + "Zoom in as far as possible", NULL, NULL, + GIMP_ACTION_SELECT_LAST, + NULL }, + { "view-zoom-out", GTK_STOCK_ZOOM_OUT, + N_("Zoom _Out"), "minus", + N_("Zoom out"), + GIMP_ACTION_SELECT_PREVIOUS, + GIMP_HELP_VIEW_ZOOM_OUT }, + { "view-zoom-in", GTK_STOCK_ZOOM_IN, + N_("Zoom _In"), "plus", + N_("Zoom in"), + GIMP_ACTION_SELECT_NEXT, + GIMP_HELP_VIEW_ZOOM_IN }, + { "view-zoom-in", NULL, + "Zoom out", NULL, NULL, + GIMP_ACTION_SELECT_NEXT, + NULL }, + { "view-zoom-out-skip", NULL, + "Zoom in a lot", NULL, NULL, + GIMP_ACTION_SELECT_SKIP_PREVIOUS, + NULL }, + { "view-zoom-in-skip", NULL, + "Zoom out a lot", NULL, NULL, + GIMP_ACTION_SELECT_SKIP_NEXT, + NULL } +}; + +static GimpRadioActionEntry view_zoom_explicit_actions[] = { { "view-zoom-16-1", NULL, N_("16:1 (1600%)"), NULL, NULL, @@ -360,11 +386,16 @@ view_actions_setup (GimpActionGroup *group) view_toggle_actions, G_N_ELEMENTS (view_toggle_actions)); + gimp_action_group_add_enum_actions (group, + view_zoom_actions, + G_N_ELEMENTS (view_zoom_actions), + G_CALLBACK (view_zoom_cmd_callback)); + gimp_action_group_add_radio_actions (group, - view_zoom_actions, - G_N_ELEMENTS (view_zoom_actions), + view_zoom_explicit_actions, + G_N_ELEMENTS (view_zoom_explicit_actions), 10000, - G_CALLBACK (view_zoom_cmd_callback)); + G_CALLBACK (view_zoom_explicit_cmd_callback)); gimp_action_group_add_enum_actions (group, view_padding_color_actions, diff --git a/app/actions/view-commands.c b/app/actions/view-commands.c index bdd5322ba4..339c401bc1 100644 --- a/app/actions/view-commands.c +++ b/app/actions/view-commands.c @@ -105,28 +105,6 @@ view_close_view_cmd_callback (GtkAction *action, gimp_display_shell_close (GIMP_DISPLAY_SHELL (gdisp->shell), FALSE); } -void -view_zoom_out_cmd_callback (GtkAction *action, - gpointer data) -{ - GimpDisplay *gdisp; - return_if_no_display (gdisp, data); - - gimp_display_shell_scale (GIMP_DISPLAY_SHELL (gdisp->shell), - GIMP_ZOOM_OUT, 0.0); -} - -void -view_zoom_in_cmd_callback (GtkAction *action, - gpointer data) -{ - GimpDisplay *gdisp; - return_if_no_display (gdisp, data); - - gimp_display_shell_scale (GIMP_DISPLAY_SHELL (gdisp->shell), - GIMP_ZOOM_IN, 0.0); -} - void view_zoom_fit_in_cmd_callback (GtkAction *action, gpointer data) @@ -149,8 +127,73 @@ view_zoom_fit_to_cmd_callback (GtkAction *action, void view_zoom_cmd_callback (GtkAction *action, - GtkAction *current, - gpointer data) + gint value, + gpointer data) +{ + GimpDisplay *gdisp; + GimpDisplayShell *shell; + gdouble scale; + return_if_no_display (gdisp, data); + + shell = GIMP_DISPLAY_SHELL (gdisp->shell); + + scale = shell->scale; + + switch ((GimpActionSelectType) value) + { + case GIMP_ACTION_SELECT_FIRST: + gimp_display_shell_scale (shell, GIMP_ZOOM_TO, 1.0 / 256.0); + break; + + case GIMP_ACTION_SELECT_LAST: + gimp_display_shell_scale (shell, GIMP_ZOOM_TO, 256.0); + break; + + case GIMP_ACTION_SELECT_PREVIOUS: + gimp_display_shell_scale (shell, GIMP_ZOOM_OUT, 0.0); + break; + + case GIMP_ACTION_SELECT_NEXT: + gimp_display_shell_scale (shell, GIMP_ZOOM_IN, 0.0); + break; + + case GIMP_ACTION_SELECT_SKIP_PREVIOUS: + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_OUT, scale); + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_OUT, scale); + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_OUT, scale); + gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale); + break; + + case GIMP_ACTION_SELECT_SKIP_NEXT: + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_IN, scale); + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_IN, scale); + scale = gimp_display_shell_scale_zoom_step (GIMP_ZOOM_IN, scale); + gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale); + break; + + default: + scale = (scale >= 1) ? (scale + 256.0) : (scale * 256.0); + + scale = action_select_value ((GimpActionSelectType) value, + scale, + 1.0, 512.0, + 1.0, 16.0, + FALSE); + + if (scale > 256.0) + scale -= 256.0; + else + scale /= 256.0; + + gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale); + break; + } +} + +void +view_zoom_explicit_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data) { GimpDisplay *gdisp; GimpDisplayShell *shell; diff --git a/app/actions/view-commands.h b/app/actions/view-commands.h index c39cf1da3c..831052d0f8 100644 --- a/app/actions/view-commands.h +++ b/app/actions/view-commands.h @@ -25,15 +25,14 @@ void view_new_view_cmd_callback (GtkAction *action, void view_close_view_cmd_callback (GtkAction *action, gpointer data); -void view_zoom_out_cmd_callback (GtkAction *action, - gpointer data); -void view_zoom_in_cmd_callback (GtkAction *action, - gpointer data); void view_zoom_fit_in_cmd_callback (GtkAction *action, gpointer data); void view_zoom_fit_to_cmd_callback (GtkAction *action, gpointer data); void view_zoom_cmd_callback (GtkAction *action, + gint value, + gpointer data); +void view_zoom_explicit_cmd_callback (GtkAction *action, GtkAction *current, gpointer data); void view_zoom_other_cmd_callback (GtkAction *action,