diff --git a/app/actions/view-actions.c b/app/actions/view-actions.c index 6047ca3cd0..bbcec89ec3 100644 --- a/app/actions/view-actions.c +++ b/app/actions/view-actions.c @@ -627,6 +627,17 @@ static const GimpEnumActionEntry view_padding_color_actions[] = GIMP_HELP_VIEW_PADDING_COLOR } }; +static const GimpToggleActionEntry view_padding_color_toggle_actions[] = +{ + { "view-padding-color-in-show-all", NULL, + NC_("view-padding-color", "Keep Padding in \"Show _All\" Mode"), NULL, + NC_("view-padding-color", + "Keep canvas padding when \"View -> Show All\" is enabled"), + view_padding_color_in_show_all_cmd_callback, + FALSE, + GIMP_HELP_VIEW_PADDING_COLOR } +}; + static const GimpEnumActionEntry view_scroll_horizontal_actions[] = { { "view-scroll-horizontal", NULL, @@ -762,6 +773,10 @@ view_actions_setup (GimpActionGroup *group) G_N_ELEMENTS (view_padding_color_actions), view_padding_color_cmd_callback); + gimp_action_group_add_toggle_actions (group, "view-padding-color", + view_padding_color_toggle_actions, + G_N_ELEMENTS (view_padding_color_toggle_actions)); + gimp_action_group_add_enum_actions (group, "view-action", view_scroll_horizontal_actions, G_N_ELEMENTS (view_scroll_horizontal_actions), @@ -1044,6 +1059,9 @@ view_actions_update (GimpActionGroup *group, SET_SENSITIVE ("view-padding-color-custom", image); SET_SENSITIVE ("view-padding-color-prefs", image); + SET_SENSITIVE ("view-padding-color-in-show-all", image); + SET_ACTIVE ("view-padding-color-in-show-all", display && options->padding_in_show_all); + SET_SENSITIVE ("view-show-menubar", image); SET_ACTIVE ("view-show-menubar", display && options->show_menubar); SET_SENSITIVE ("view-show-rulers", image); diff --git a/app/actions/view-commands.c b/app/actions/view-commands.c index 695eb515fe..e1f05b3195 100644 --- a/app/actions/view-commands.c +++ b/app/actions/view-commands.c @@ -1162,11 +1162,30 @@ view_padding_color_cmd_callback (GimpAction *action, gimp_display_shell_set_padding (shell, default_options->padding_mode, &default_options->padding_color); + gimp_display_shell_set_padding_in_show_all (shell, + default_options->padding_in_show_all); } break; } } +void +view_padding_color_in_show_all_cmd_callback (GimpAction *action, + GVariant *value, + gpointer data) +{ + GimpDisplayShell *shell; + gboolean active; + return_if_no_shell (shell, data); + + active = g_variant_get_boolean (value); + + if (active != gimp_display_shell_get_padding_in_show_all (shell)) + { + gimp_display_shell_set_padding_in_show_all (shell, active); + } +} + void view_shrink_wrap_cmd_callback (GimpAction *action, GVariant *value, diff --git a/app/actions/view-commands.h b/app/actions/view-commands.h index 8afbba7527..17b15b2ece 100644 --- a/app/actions/view-commands.h +++ b/app/actions/view-commands.h @@ -166,6 +166,9 @@ void view_snap_to_vectors_cmd_callback (GimpAction *action, void view_padding_color_cmd_callback (GimpAction *action, GVariant *value, gpointer data); +void view_padding_color_in_show_all_cmd_callback (GimpAction *action, + GVariant *value, + gpointer data); void view_shrink_wrap_cmd_callback (GimpAction *action, GVariant *value, diff --git a/app/config/gimpdisplayoptions.c b/app/config/gimpdisplayoptions.c index 201ff0bf0c..b51a653cbc 100644 --- a/app/config/gimpdisplayoptions.c +++ b/app/config/gimpdisplayoptions.c @@ -56,7 +56,8 @@ enum PROP_SNAP_TO_CANVAS, PROP_SNAP_TO_PATH, PROP_PADDING_MODE, - PROP_PADDING_COLOR + PROP_PADDING_COLOR, + PROP_PADDING_IN_SHOW_ALL }; @@ -219,6 +220,13 @@ gimp_display_options_class_init (GimpDisplayOptionsClass *klass) CANVAS_PADDING_COLOR_BLURB, FALSE, &white, GIMP_PARAM_STATIC_STRINGS); + + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_PADDING_IN_SHOW_ALL, + "padding-in-show-all", + "Keep padding in \"Show All\" mode", + CANVAS_PADDING_IN_SHOW_ALL_BLURB, + FALSE, + GIMP_PARAM_STATIC_STRINGS); } static void @@ -344,6 +352,13 @@ gimp_display_options_fullscreen_class_init (GimpDisplayOptionsFullscreenClass *k CANVAS_PADDING_COLOR_BLURB, FALSE, &black, GIMP_PARAM_STATIC_STRINGS); + + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_PADDING_IN_SHOW_ALL, + "padding-in-show-all", + "Keep padding in \"Show All\" mode", + CANVAS_PADDING_IN_SHOW_ALL_BLURB, + FALSE, + GIMP_PARAM_STATIC_STRINGS); } static void @@ -503,6 +518,9 @@ gimp_display_options_set_property (GObject *object, case PROP_PADDING_COLOR: options->padding_color = *(GimpRGB *) g_value_get_boxed (value); break; + case PROP_PADDING_IN_SHOW_ALL: + options->padding_in_show_all = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -568,6 +586,9 @@ gimp_display_options_get_property (GObject *object, case PROP_PADDING_COLOR: g_value_set_boxed (value, &options->padding_color); break; + case PROP_PADDING_IN_SHOW_ALL: + g_value_set_boolean (value, options->padding_in_show_all); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); diff --git a/app/config/gimpdisplayoptions.h b/app/config/gimpdisplayoptions.h index 5d666f7891..8da5e7a810 100644 --- a/app/config/gimpdisplayoptions.h +++ b/app/config/gimpdisplayoptions.h @@ -61,6 +61,7 @@ struct _GimpDisplayOptions GimpCanvasPaddingMode padding_mode; GimpRGB padding_color; gboolean padding_mode_set; + gboolean padding_in_show_all; }; struct _GimpDisplayOptionsClass diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h index a68e6acc24..9cc9a7f3dd 100644 --- a/app/config/gimprc-blurbs.h +++ b/app/config/gimprc-blurbs.h @@ -33,6 +33,10 @@ _("Sets the dynamics search path.") _("Sets the canvas padding color used if the padding mode is set to " \ "custom color.") +#define CANVAS_PADDING_IN_SHOW_ALL_BLURB \ +_("Specifies whether to keep the canvas padding when \"View -> Show All\" " \ + "is enabled.") + #define CANVAS_PADDING_MODE_BLURB \ _("Specifies how the area around the image should be drawn.") diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c index 7d59c62335..1af823d561 100644 --- a/app/dialogs/preferences-dialog.c +++ b/app/dialogs/preferences-dialog.c @@ -1010,6 +1010,10 @@ prefs_display_options_frame_add (Gimp *gimp, g_signal_connect (button, "color-changed", G_CALLBACK (prefs_canvas_padding_color_changed), combo); + + prefs_check_button_add (object, "padding-in-show-all", + _("_Keep canvas padding in \"Show All\" mode"), + GTK_BOX (vbox)); } static void diff --git a/app/display/gimpdisplayshell-appearance.c b/app/display/gimpdisplayshell-appearance.c index e2a606378a..80aedc9b8b 100644 --- a/app/display/gimpdisplayshell-appearance.c +++ b/app/display/gimpdisplayshell-appearance.c @@ -36,6 +36,7 @@ #include "gimpdisplayshell.h" #include "gimpdisplayshell-actions.h" #include "gimpdisplayshell-appearance.h" +#include "gimpdisplayshell-expose.h" #include "gimpdisplayshell-selection.h" #include "gimpimagewindow.h" #include "gimpstatusbar.h" @@ -67,30 +68,32 @@ gimp_display_shell_appearance_update (GimpDisplayShell *shell) fullscreen); } - gimp_display_shell_set_show_menubar (shell, - options->show_menubar); - gimp_display_shell_set_show_statusbar (shell, - options->show_statusbar); + gimp_display_shell_set_show_menubar (shell, + options->show_menubar); + gimp_display_shell_set_show_statusbar (shell, + options->show_statusbar); - gimp_display_shell_set_show_rulers (shell, - options->show_rulers); - gimp_display_shell_set_show_scrollbars (shell, - options->show_scrollbars); - gimp_display_shell_set_show_selection (shell, - options->show_selection); - gimp_display_shell_set_show_layer (shell, - options->show_layer_boundary); - gimp_display_shell_set_show_canvas (shell, - options->show_canvas_boundary); - gimp_display_shell_set_show_guides (shell, - options->show_guides); - gimp_display_shell_set_show_grid (shell, - options->show_grid); - gimp_display_shell_set_show_sample_points (shell, - options->show_sample_points); - gimp_display_shell_set_padding (shell, - options->padding_mode, - &options->padding_color); + gimp_display_shell_set_show_rulers (shell, + options->show_rulers); + gimp_display_shell_set_show_scrollbars (shell, + options->show_scrollbars); + gimp_display_shell_set_show_selection (shell, + options->show_selection); + gimp_display_shell_set_show_layer (shell, + options->show_layer_boundary); + gimp_display_shell_set_show_canvas (shell, + options->show_canvas_boundary); + gimp_display_shell_set_show_guides (shell, + options->show_guides); + gimp_display_shell_set_show_grid (shell, + options->show_grid); + gimp_display_shell_set_show_sample_points (shell, + options->show_sample_points); + gimp_display_shell_set_padding (shell, + options->padding_mode, + &options->padding_color); + gimp_display_shell_set_padding_in_show_all (shell, + options->padding_in_show_all); } void @@ -523,6 +526,37 @@ gimp_display_shell_get_padding (GimpDisplayShell *shell, *padding_color = options->padding_color; } +void +gimp_display_shell_set_padding_in_show_all (GimpDisplayShell *shell, + gboolean keep) +{ + GimpDisplayOptions *options; + + g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); + + options = appearance_get_options (shell); + + if (options->padding_in_show_all != keep) + { + g_object_set (options, "padding-in-show-all", keep, NULL); + + if (shell->display) + gimp_display_shell_expose_full (shell); + + gimp_display_shell_set_action_active (shell, + "view-padding-color-in-show-all", + keep); + } +} + +gboolean +gimp_display_shell_get_padding_in_show_all (GimpDisplayShell *shell) +{ + g_return_val_if_fail (GIMP_IS_DISPLAY_SHELL (shell), FALSE); + + return appearance_get_options (shell)->padding_in_show_all; +} + /* private functions */ diff --git a/app/display/gimpdisplayshell-appearance.h b/app/display/gimpdisplayshell-appearance.h index 80ceb2c945..0c67649b49 100644 --- a/app/display/gimpdisplayshell-appearance.h +++ b/app/display/gimpdisplayshell-appearance.h @@ -19,71 +19,74 @@ #define __GIMP_DISPLAY_SHELL_APPEARANCE_H__ -void gimp_display_shell_appearance_update (GimpDisplayShell *shell); +void gimp_display_shell_appearance_update (GimpDisplayShell *shell); -void gimp_display_shell_set_show_menubar (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_menubar (GimpDisplayShell *shell); +void gimp_display_shell_set_show_menubar (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_menubar (GimpDisplayShell *shell); -void gimp_display_shell_set_show_statusbar (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_statusbar (GimpDisplayShell *shell); +void gimp_display_shell_set_show_statusbar (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_statusbar (GimpDisplayShell *shell); -void gimp_display_shell_set_show_rulers (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_rulers (GimpDisplayShell *shell); +void gimp_display_shell_set_show_rulers (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_rulers (GimpDisplayShell *shell); -void gimp_display_shell_set_show_scrollbars (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_scrollbars (GimpDisplayShell *shell); +void gimp_display_shell_set_show_scrollbars (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_scrollbars (GimpDisplayShell *shell); -void gimp_display_shell_set_show_selection (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_selection (GimpDisplayShell *shell); +void gimp_display_shell_set_show_selection (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_selection (GimpDisplayShell *shell); -void gimp_display_shell_set_show_layer (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_layer (GimpDisplayShell *shell); +void gimp_display_shell_set_show_layer (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_layer (GimpDisplayShell *shell); -void gimp_display_shell_set_show_canvas (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_canvas (GimpDisplayShell *shell); -void gimp_display_shell_update_show_canvas (GimpDisplayShell *shell); +void gimp_display_shell_set_show_canvas (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_canvas (GimpDisplayShell *shell); +void gimp_display_shell_update_show_canvas (GimpDisplayShell *shell); -void gimp_display_shell_set_show_grid (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_grid (GimpDisplayShell *shell); +void gimp_display_shell_set_show_grid (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_grid (GimpDisplayShell *shell); -void gimp_display_shell_set_show_guides (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_guides (GimpDisplayShell *shell); +void gimp_display_shell_set_show_guides (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_guides (GimpDisplayShell *shell); -void gimp_display_shell_set_snap_to_grid (GimpDisplayShell *shell, - gboolean snap); -gboolean gimp_display_shell_get_snap_to_grid (GimpDisplayShell *shell); +void gimp_display_shell_set_snap_to_grid (GimpDisplayShell *shell, + gboolean snap); +gboolean gimp_display_shell_get_snap_to_grid (GimpDisplayShell *shell); -void gimp_display_shell_set_show_sample_points (GimpDisplayShell *shell, - gboolean show); -gboolean gimp_display_shell_get_show_sample_points (GimpDisplayShell *shell); +void gimp_display_shell_set_show_sample_points (GimpDisplayShell *shell, + gboolean show); +gboolean gimp_display_shell_get_show_sample_points (GimpDisplayShell *shell); -void gimp_display_shell_set_snap_to_guides (GimpDisplayShell *shell, - gboolean snap); -gboolean gimp_display_shell_get_snap_to_guides (GimpDisplayShell *shell); +void gimp_display_shell_set_snap_to_guides (GimpDisplayShell *shell, + gboolean snap); +gboolean gimp_display_shell_get_snap_to_guides (GimpDisplayShell *shell); -void gimp_display_shell_set_snap_to_canvas (GimpDisplayShell *shell, - gboolean snap); -gboolean gimp_display_shell_get_snap_to_canvas (GimpDisplayShell *shell); +void gimp_display_shell_set_snap_to_canvas (GimpDisplayShell *shell, + gboolean snap); +gboolean gimp_display_shell_get_snap_to_canvas (GimpDisplayShell *shell); -void gimp_display_shell_set_snap_to_vectors (GimpDisplayShell *shell, - gboolean snap); -gboolean gimp_display_shell_get_snap_to_vectors (GimpDisplayShell *shell); +void gimp_display_shell_set_snap_to_vectors (GimpDisplayShell *shell, + gboolean snap); +gboolean gimp_display_shell_get_snap_to_vectors (GimpDisplayShell *shell); -void gimp_display_shell_set_padding (GimpDisplayShell *shell, - GimpCanvasPaddingMode mode, - const GimpRGB *color); -void gimp_display_shell_get_padding (GimpDisplayShell *shell, - GimpCanvasPaddingMode *mode, - GimpRGB *color); +void gimp_display_shell_set_padding (GimpDisplayShell *shell, + GimpCanvasPaddingMode mode, + const GimpRGB *color); +void gimp_display_shell_get_padding (GimpDisplayShell *shell, + GimpCanvasPaddingMode *mode, + GimpRGB *color); +void gimp_display_shell_set_padding_in_show_all (GimpDisplayShell *shell, + gboolean keep); +gboolean gimp_display_shell_get_padding_in_show_all (GimpDisplayShell *shell); #endif /* __GIMP_DISPLAY_SHELL_APPEARANCE_H__ */ diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c index 25358c8854..aed9e92e91 100644 --- a/app/display/gimpdisplayshell-callbacks.c +++ b/app/display/gimpdisplayshell-callbacks.c @@ -485,6 +485,7 @@ gimp_display_shell_canvas_draw_image (GimpDisplayShell *shell, cairo_rectangle_list_t *clip_rectangles; GeglRectangle image_rect; GeglRectangle rotated_image_rect; + GeglRectangle canvas_rect; cairo_matrix_t matrix; gdouble x1, y1; gdouble x2, y2; @@ -496,6 +497,13 @@ gimp_display_shell_canvas_draw_image (GimpDisplayShell *shell, &image_rect.width, &image_rect.height); + gimp_display_shell_scale_get_image_unrotated_bounds ( + shell, + &canvas_rect.x, + &canvas_rect.y, + &canvas_rect.width, + &canvas_rect.height); + /* first, draw the background */ @@ -516,7 +524,19 @@ gimp_display_shell_canvas_draw_image (GimpDisplayShell *shell, if (shell->show_all) { cairo_save (cr); + + if (gimp_display_shell_get_padding_in_show_all (shell)) + { + cairo_rectangle (cr, + canvas_rect.x, + canvas_rect.y, + canvas_rect.width, + canvas_rect.height); + cairo_clip (cr); + } + gimp_display_shell_draw_checkerboard (shell, cr); + cairo_restore (cr); } diff --git a/menus/image-menu.xml.in b/menus/image-menu.xml.in index cd65e65f7a..a623d9e272 100644 --- a/menus/image-menu.xml.in +++ b/menus/image-menu.xml.in @@ -351,6 +351,8 @@ + +