Bug 599573 - Remember dialog defaults between Gimp sessions

Add resize and fill options for the "Layer Boundary Size" and
"Canvas Size" dialogs to GimpDialogConfig.
This commit is contained in:
Michael Natterer 2016-10-20 00:30:10 +02:00
parent 6dd12d680d
commit 34eff7322e
8 changed files with 188 additions and 24 deletions

View File

@ -133,12 +133,12 @@ static void image_profile_convert_callback (GtkWidget *dialog
static void image_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
gint offset_x,
gint offset_y,
GimpFillType fill_type,
GimpItemSet layer_set,
gboolean resize_text_layers,
gpointer user_data);
@ -629,15 +629,22 @@ image_resize_cmd_callback (GtkAction *action,
if (! dialog)
{
GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
if (image_resize_unit != GIMP_UNIT_PERCENT)
image_resize_unit = gimp_display_get_shell (display)->unit;
dialog = resize_dialog_new (GIMP_VIEWABLE (image),
action_data_get_context (data),
_("Set Image Canvas Size"), "gimp-image-resize",
_("Set Image Canvas Size"),
"gimp-image-resize",
widget,
gimp_standard_help_func, GIMP_HELP_IMAGE_RESIZE,
gimp_standard_help_func,
GIMP_HELP_IMAGE_RESIZE,
image_resize_unit,
config->image_resize_fill_type,
config->image_resize_layer_set,
config->image_resize_resize_text_layers,
image_resize_callback,
display);
@ -1277,12 +1284,12 @@ static void
image_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
gint offset_x,
gint offset_y,
GimpFillType fill_type,
GimpItemSet layer_set,
gboolean resize_text_layers,
gpointer user_data)
@ -1293,8 +1300,15 @@ image_resize_callback (GtkWidget *dialog,
if (width > 0 && height > 0)
{
GimpImage *image = GIMP_IMAGE (viewable);
GimpProgress *progress;
GimpImage *image = GIMP_IMAGE (viewable);
GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
GimpProgress *progress;
g_object_set (config,
"image-resize-fill-type", fill_type,
"image-resize-layer-set", layer_set,
"image-resize-resize-text-layers", resize_text_layers,
NULL);
gtk_widget_destroy (dialog);

View File

@ -151,12 +151,12 @@ static void layers_scale_callback (GtkWidget *dialog,
static void layers_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
gint offset_x,
gint offset_y,
GimpFillType fill_type,
GimpItemSet unused,
gboolean unused2,
gpointer data);
@ -645,7 +645,8 @@ layers_resize_cmd_callback (GtkAction *action,
if (! dialog)
{
GimpDisplay *display = NULL;
GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
GimpDisplay *display = NULL;
if (GIMP_IS_IMAGE_WINDOW (data))
display = action_data_get_display (data);
@ -661,6 +662,9 @@ layers_resize_cmd_callback (GtkAction *action,
gimp_standard_help_func,
GIMP_HELP_LAYER_RESIZE,
layer_resize_unit,
config->layer_resize_fill_type,
GIMP_ITEM_SET_NONE,
FALSE,
layers_resize_callback,
NULL);
@ -1305,21 +1309,28 @@ static void
layers_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
gint offset_x,
gint offset_y,
GimpFillType fill_type,
GimpItemSet unused,
gboolean unused2,
gpointer user_data)
{
layer_resize_unit = unit;
if (width > 0 && height > 0)
{
GimpItem *item = GIMP_ITEM (viewable);
GimpItem *item = GIMP_ITEM (viewable);
GimpImage *image = gimp_item_get_image (item);
GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
g_object_set (config,
"layer-resize-fill-type", fill_type,
NULL);
gtk_widget_destroy (dialog);

View File

@ -62,9 +62,15 @@ enum
PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA,
PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS,
PROP_IMAGE_RESIZE_FILL_TYPE,
PROP_IMAGE_RESIZE_LAYER_SET,
PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS,
PROP_LAYER_NEW_NAME,
PROP_LAYER_NEW_FILL_TYPE,
PROP_LAYER_RESIZE_FILL_TYPE,
PROP_LAYER_ADD_MASK_TYPE,
PROP_LAYER_ADD_MASK_INVERT,
@ -256,6 +262,29 @@ gimp_dialog_config_class_init (GimpDialogConfigClass *klass)
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_RESIZE_FILL_TYPE,
"image-resize-fill-type",
"Default image resize fill type",
IMAGE_RESIZE_FILL_TYPE_BLURB,
GIMP_TYPE_FILL_TYPE,
GIMP_FILL_TRANSPARENT,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_RESIZE_LAYER_SET,
"image-resize-layer-set",
"Default image resize layer set",
IMAGE_RESIZE_LAYER_SET_BLURB,
GIMP_TYPE_ITEM_SET,
GIMP_ITEM_SET_NONE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS,
"image-resize-resize-text-layers",
"Default image resize text layers",
IMAGE_RESIZE_RESIZE_TEXT_LAYERS_BLURB,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_STRING (object_class, PROP_LAYER_NEW_NAME,
"layer-new-name",
"Default new layer name",
@ -271,6 +300,14 @@ gimp_dialog_config_class_init (GimpDialogConfigClass *klass)
GIMP_FILL_TRANSPARENT,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_RESIZE_FILL_TYPE,
"layer-resize-fill-type",
"Default layer resize fill type",
LAYER_RESIZE_FILL_TYPE_BLURB,
GIMP_TYPE_FILL_TYPE,
GIMP_FILL_TRANSPARENT,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_ADD_MASK_TYPE,
"layer-add-mask-type",
"Default layer mask type",
@ -567,6 +604,16 @@ gimp_dialog_config_set_property (GObject *object,
config->image_convert_indexed_dither_text_layers = g_value_get_boolean (value);
break;
case PROP_IMAGE_RESIZE_FILL_TYPE:
config->image_resize_fill_type = g_value_get_enum (value);
break;
case PROP_IMAGE_RESIZE_LAYER_SET:
config->image_resize_layer_set = g_value_get_enum (value);
break;
case PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS:
config->image_resize_resize_text_layers = g_value_get_boolean (value);
break;
case PROP_LAYER_NEW_NAME:
if (config->layer_new_name)
g_free (config->layer_new_name);
@ -576,6 +623,10 @@ gimp_dialog_config_set_property (GObject *object,
config->layer_new_fill_type = g_value_get_enum (value);
break;
case PROP_LAYER_RESIZE_FILL_TYPE:
config->layer_resize_fill_type = g_value_get_enum (value);
break;
case PROP_LAYER_ADD_MASK_TYPE:
config->layer_add_mask_type = g_value_get_enum (value);
break;
@ -729,6 +780,16 @@ gimp_dialog_config_get_property (GObject *object,
g_value_set_boolean (value, config->image_convert_indexed_dither_text_layers);
break;
case PROP_IMAGE_RESIZE_FILL_TYPE:
g_value_set_enum (value, config->image_resize_fill_type);
break;
case PROP_IMAGE_RESIZE_LAYER_SET:
g_value_set_enum (value, config->image_resize_layer_set);
break;
case PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS:
g_value_set_boolean (value, config->image_resize_resize_text_layers);
break;
case PROP_LAYER_NEW_NAME:
g_value_set_string (value, config->layer_new_name);
break;
@ -736,6 +797,10 @@ gimp_dialog_config_get_property (GObject *object,
g_value_set_enum (value, config->layer_new_fill_type);
break;
case PROP_LAYER_RESIZE_FILL_TYPE:
g_value_set_enum (value, config->layer_resize_fill_type);
break;
case PROP_LAYER_ADD_MASK_TYPE:
g_value_set_enum (value, config->layer_add_mask_type);
break;

View File

@ -60,9 +60,15 @@ struct _GimpDialogConfig
gboolean image_convert_indexed_dither_alpha;
gboolean image_convert_indexed_dither_text_layers;
GimpFillType image_resize_fill_type;
GimpItemSet image_resize_layer_set;
gboolean image_resize_resize_text_layers;
gchar *layer_new_name;
GimpFillType layer_new_fill_type;
GimpFillType layer_resize_fill_type;
GimpAddMaskType layer_add_mask_type;
gboolean layer_add_mask_invert;

View File

@ -450,7 +450,7 @@ _("Sets the default maximum number of colors for the 'Convert to Indexed' dialog
#define IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES_BLURB \
_("Sets the default 'Remove duplicate colors' state for the 'Convert to Indexed' dialog.")
#define IMAGE_CONVERT_INDEXED_DITHER_TYPE_BLURB \
#define IMAGE_CONVERT_INDEXED_DITHER_TYPE_BLURB \
_("Sets the default dithering type for the 'Convert to Indexed' dialog.")
#define IMAGE_CONVERT_INDEXED_DITHER_ALPHA_BLURB \
@ -459,12 +459,24 @@ _("Sets the default 'Dither alpha' state for the 'Convert to Indexed' dialog.")
#define IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS_BLURB \
_("Sets the default 'Dither text layers' state for the 'Convert to Indexed' dialog.")
#define LAYER_NEW_NAME_BLURB \
#define IMAGE_RESIZE_FILL_TYPE_BLURB \
_("Sets the default fill type for the 'Canvas Size' dialog.")
#define IMAGE_RESIZE_LAYER_SET_BLURB \
_("Sets the default set of layers to resize for the 'Canvas Size' dialog.")
#define IMAGE_RESIZE_RESIZE_TEXT_LAYERS_BLURB \
_("Sets the default 'Resize text layers' state for the 'Canvas Size' dialog.")
#define LAYER_NEW_NAME_BLURB \
_("Sets the default layer name for the 'New Layer' dialog.")
#define LAYER_NEW_FILL_TYPE_BLURB \
_("Sets the default fill type for the 'New Layer' dialog.")
#define LAYER_RESIZE_FILL_TYPE_BLURB \
_("Sets the default fill type for the 'Layer Boundary Size' dialog.")
#define LAYER_ADD_MASK_TYPE_BLURB \
_("Sets the default mask for the 'Add Layer Mask' dialog.")
@ -607,4 +619,5 @@ _("When enabled, uses OpenCL for some operations.")
#define ACTION_HISTORY_SIZE_BLURB \
"The maximum number of actions saved in history."
#endif /* __GIMP_RC_BLURBS_H__ */

View File

@ -1888,6 +1888,21 @@ prefs_dialog_new (Gimp *gimp,
_("Enable dithering of text layers"),
GTK_BOX (vbox2));
/* Canvas Size Dialog */
vbox2 = prefs_frame_new (_("Canvas Size Dialog"),
GTK_CONTAINER (vbox), FALSE);
table = prefs_table_new (2, GTK_CONTAINER (vbox2));
prefs_enum_combo_box_add (object, "image-resize-fill-type", 0, 0,
_("Fill with:"),
GTK_TABLE (table), 0, size_group);
prefs_enum_combo_box_add (object, "image-resize-layer-set", 0, 0,
_("Resize layers:"),
GTK_TABLE (table), 1, size_group);
prefs_check_button_add (object, "image-resize-resize-text-layers",
_("Resize text layers"),
GTK_BOX (vbox2));
/* New Layer Dialog */
vbox2 = prefs_frame_new (_("New Layer Dialog"),
@ -1902,6 +1917,15 @@ prefs_dialog_new (Gimp *gimp,
_("Fill type:"),
GTK_TABLE (table), 1, size_group);
/* Layer Boundary Size Dialog */
vbox2 = prefs_frame_new (_("Layer Boundary Size Dialog"),
GTK_CONTAINER (vbox), FALSE);
table = prefs_table_new (1, GTK_CONTAINER (vbox2));
prefs_enum_combo_box_add (object, "layer-resize-fill-type", 0, 0,
_("Fill with:"),
GTK_TABLE (table), 0, size_group);
/* Add Layer Mask Dialog */
vbox2 = prefs_frame_new (_("Add Layer Mask Dialog"),
GTK_CONTAINER (vbox), FALSE);

View File

@ -48,7 +48,6 @@ typedef struct
GimpViewable *viewable;
GimpContext *context;
GimpFillType fill_type;
GimpUnit old_unit;
GimpItemSet layer_set;
gboolean resize_text_layers;
GimpResizeCallback callback;
@ -56,9 +55,17 @@ typedef struct
gint old_width;
gint old_height;
GimpUnit old_unit;
GimpFillType old_fill_type;
GimpItemSet old_layer_set;
gboolean old_resize_text_layers;
GtkWidget *box;
GtkWidget *offset;
GtkWidget *area;
GtkWidget *layer_set_combo;
GtkWidget *fill_type_combo;
GtkWidget *text_layers_button;
} ResizeDialog;
@ -90,6 +97,9 @@ resize_dialog_new (GimpViewable *viewable,
GimpHelpFunc help_func,
const gchar *help_id,
GimpUnit unit,
GimpFillType fill_type,
GimpItemSet layer_set,
gboolean resize_text_layers,
GimpResizeCallback callback,
gpointer user_data)
{
@ -148,14 +158,18 @@ resize_dialog_new (GimpViewable *viewable,
private->viewable = viewable;
private->context = context;
private->fill_type = GIMP_FILL_TRANSPARENT;
private->old_unit = unit;
private->layer_set = GIMP_ITEM_SET_NONE;
private->resize_text_layers = FALSE;
private->fill_type = fill_type;
private->layer_set = layer_set;
private->resize_text_layers = resize_text_layers;
private->callback = callback;
private->user_data = user_data;
private->old_width = width;
private->old_height = height;
private->old_width = width;
private->old_height = height;
private->old_unit = unit;
private->old_fill_type = private->fill_type;
private->old_layer_set = private->layer_set;
private->old_resize_text_layers = private->resize_text_layers;
dialog = gimp_viewable_dialog_new (viewable, context,
title, role, GIMP_STOCK_RESIZE, title,
@ -315,7 +329,8 @@ resize_dialog_new (GimpViewable *viewable,
gtk_size_group_add_widget (size_group, label);
combo = gimp_enum_combo_box_new (GIMP_TYPE_ITEM_SET);
private->layer_set_combo = combo =
gimp_enum_combo_box_new (GIMP_TYPE_ITEM_SET);
gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
gtk_widget_show (combo);
@ -331,7 +346,8 @@ resize_dialog_new (GimpViewable *viewable,
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
combo = gimp_enum_combo_box_new (GIMP_TYPE_FILL_TYPE);
private->fill_type_combo = combo =
gimp_enum_combo_box_new (GIMP_TYPE_FILL_TYPE);
gtk_box_pack_end (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
gtk_widget_show (combo);
@ -353,7 +369,8 @@ resize_dialog_new (GimpViewable *viewable,
gtk_size_group_add_widget (size_group, label);
button = gtk_check_button_new_with_mnemonic (_("Resize _text layers"));
private->text_layers_button = button =
gtk_check_button_new_with_mnemonic (_("Resize _text layers"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
private->resize_text_layers);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
@ -399,12 +416,12 @@ resize_dialog_response (GtkWidget *dialog,
private->callback (dialog,
private->viewable,
private->context,
private->fill_type,
width,
height,
unit,
gimp_size_entry_get_refval (entry, 0),
gimp_size_entry_get_refval (entry, 1),
private->fill_type,
private->layer_set,
private->resize_text_layers,
private->user_data);
@ -428,6 +445,17 @@ resize_dialog_reset (ResizeDialog *private)
"height", private->old_height,
"unit", private->old_unit,
NULL);
if (private->layer_set_combo)
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (private->layer_set_combo),
private->old_layer_set);
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (private->fill_type_combo),
private->old_fill_type);
if (private->text_layers_button)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->text_layers_button),
private->old_resize_text_layers);
}
static void

View File

@ -22,12 +22,12 @@
typedef void (* GimpResizeCallback) (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
gint offset_x,
gint offset_y,
GimpFillType fill_type,
GimpItemSet layer_set,
gboolean resize_text_layers,
gpointer user_data);
@ -41,6 +41,9 @@ GtkWidget * resize_dialog_new (GimpViewable *viewable,
GimpHelpFunc help_func,
const gchar *help_id,
GimpUnit unit,
GimpFillType fill_type,
GimpItemSet layer_set,
gboolean resize_text_layers,
GimpResizeCallback callback,
gpointer user_data);