[gimp] Bug 599573 - Remember dialog defaults between Gimp sessions
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 599573 - Remember dialog defaults between Gimp sessions
- Date: Fri, 26 Aug 2016 13:44:23 +0000 (UTC)
commit dfa390fd957d1a465aa3d7d1317ea2804cfc037f
Author: Michael Natterer <mitch gimp org>
Date: Fri Aug 26 15:43:25 2016 +0200
Bug 599573 - Remember dialog defaults between Gimp sessions
Remember the "Feather Selection", "Grow Selection", "Shrink Selection"
and "Border Selection" dialog settings in GimpDialogConfig.
app/actions/select-commands.c | 178 ++++++++++++++++++++++----------------
app/config/gimpdialogconfig.c | 113 ++++++++++++++++++++++++-
app/config/gimpdialogconfig.h | 11 +++
app/config/gimprc-blurbs.h | 23 +++++
app/dialogs/preferences-dialog.c | 48 ++++++++++
5 files changed, 296 insertions(+), 77 deletions(-)
---
diff --git a/app/actions/select-commands.c b/app/actions/select-commands.c
index dde3e50..b1146d1 100644
--- a/app/actions/select-commands.c
+++ b/app/actions/select-commands.c
@@ -25,6 +25,8 @@
#include "actions-types.h"
+#include "config/gimpdialogconfig.h"
+
#include "core/gimp.h"
#include "core/gimpchannel.h"
#include "core/gimpimage.h"
@@ -68,17 +70,6 @@ static void select_shrink_callback (GtkWidget *widget,
gpointer data);
-/* private variables */
-
-static gdouble select_feather_radius = 5.0;
-static gint select_grow_pixels = 1;
-static gint select_shrink_pixels = 1;
-static gboolean select_shrink_edge_lock = FALSE;
-static gint select_border_radius = 5;
-static GimpChannelBorderStyle select_border_style = GIMP_CHANNEL_BORDER_STYLE_SMOOTH;
-static gboolean select_border_edge_lock = FALSE;
-
-
/* public functions */
void
@@ -144,14 +135,16 @@ void
select_feather_cmd_callback (GtkAction *action,
gpointer data)
{
- GimpDisplay *display;
- GimpImage *image;
- GtkWidget *dialog;
- gdouble xres;
- gdouble yres;
+ GimpDisplay *display;
+ GimpImage *image;
+ GimpDialogConfig *config;
+ GtkWidget *dialog;
+ gdouble xres;
+ gdouble yres;
return_if_no_display (display, data);
- image = gimp_display_get_image (display);
+ image = gimp_display_get_image (display);
+ config = GIMP_DIALOG_CONFIG (image->gimp->config);
gimp_image_get_resolution (image, &xres, &yres);
@@ -160,7 +153,7 @@ select_feather_cmd_callback (GtkAction *action,
gimp_standard_help_func,
GIMP_HELP_SELECTION_FEATHER,
_("Feather selection by"),
- select_feather_radius, 0, 32767, 3,
+ config->selection_feather_radius, 0, 32767, 3,
gimp_display_get_shell (display)->unit,
MIN (xres, yres),
FALSE,
@@ -184,15 +177,17 @@ void
select_shrink_cmd_callback (GtkAction *action,
gpointer data)
{
- GimpDisplay *display;
- GimpImage *image;
- GtkWidget *dialog;
- GtkWidget *button;
- gdouble xres;
- gdouble yres;
+ GimpDisplay *display;
+ GimpImage *image;
+ GimpDialogConfig *config;
+ GtkWidget *dialog;
+ GtkWidget *button;
+ gdouble xres;
+ gdouble yres;
return_if_no_display (display, data);
- image = gimp_display_get_image (display);
+ image = gimp_display_get_image (display);
+ config = GIMP_DIALOG_CONFIG (image->gimp->config);
gimp_image_get_resolution (image, &xres, &yres);
@@ -201,7 +196,7 @@ select_shrink_cmd_callback (GtkAction *action,
gimp_standard_help_func,
GIMP_HELP_SELECTION_SHRINK,
_("Shrink selection by"),
- select_shrink_pixels, 1, 32767, 0,
+ config->selection_shrink_radius, 1, 32767, 0,
gimp_display_get_shell (display)->unit,
MIN (xres, yres),
FALSE,
@@ -216,7 +211,7 @@ select_shrink_cmd_callback (GtkAction *action,
"continued outside the image."),
NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
- select_shrink_edge_lock);
+ config->selection_shrink_edge_lock);
gtk_box_pack_start (GTK_BOX (GIMP_QUERY_BOX_VBOX (dialog)), button,
FALSE, FALSE, 0);
gtk_widget_show (button);
@@ -228,14 +223,16 @@ void
select_grow_cmd_callback (GtkAction *action,
gpointer data)
{
- GimpDisplay *display;
- GimpImage *image;
- GtkWidget *dialog;
- gdouble xres;
- gdouble yres;
+ GimpDisplay *display;
+ GimpImage *image;
+ GimpDialogConfig *config;
+ GtkWidget *dialog;
+ gdouble xres;
+ gdouble yres;
return_if_no_display (display, data);
- image = gimp_display_get_image (display);
+ image = gimp_display_get_image (display);
+ config = GIMP_DIALOG_CONFIG (image->gimp->config);
gimp_image_get_resolution (image, &xres, &yres);
@@ -244,7 +241,7 @@ select_grow_cmd_callback (GtkAction *action,
gimp_standard_help_func,
GIMP_HELP_SELECTION_GROW,
_("Grow selection by"),
- select_grow_pixels, 1, 32767, 0,
+ config->selection_grow_radius, 1, 32767, 0,
gimp_display_get_shell (display)->unit,
MIN (xres, yres),
FALSE,
@@ -257,16 +254,18 @@ void
select_border_cmd_callback (GtkAction *action,
gpointer data)
{
- GimpDisplay *display;
- GimpImage *image;
- GtkWidget *dialog;
- GtkWidget *combo;
- GtkWidget *button;
- gdouble xres;
- gdouble yres;
+ GimpDisplay *display;
+ GimpImage *image;
+ GimpDialogConfig *config;
+ GtkWidget *dialog;
+ GtkWidget *combo;
+ GtkWidget *button;
+ gdouble xres;
+ gdouble yres;
return_if_no_display (display, data);
- image = gimp_display_get_image (display);
+ image = gimp_display_get_image (display);
+ config = GIMP_DIALOG_CONFIG (image->gimp->config);
gimp_image_get_resolution (image, &xres, &yres);
@@ -275,7 +274,7 @@ select_border_cmd_callback (GtkAction *action,
gimp_standard_help_func,
GIMP_HELP_SELECTION_BORDER,
_("Border selection by"),
- select_border_radius, 1, 32767, 0,
+ config->selection_border_radius, 1, 32767, 0,
gimp_display_get_shell (display)->unit,
MIN (xres, yres),
FALSE,
@@ -291,7 +290,7 @@ select_border_cmd_callback (GtkAction *action,
g_object_set_data (G_OBJECT (dialog), "border-style-combo", combo);
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo),
- select_border_style);
+ config->selection_border_style);
gtk_widget_show (combo);
/* Edge lock button */
@@ -302,7 +301,7 @@ select_border_cmd_callback (GtkAction *action,
"continued outside the image."),
NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
- select_border_edge_lock);
+ config->selection_border_edge_lock);
gtk_box_pack_start (GTK_BOX (GIMP_QUERY_BOX_VBOX (dialog)), button,
FALSE, FALSE, 0);
gtk_widget_show (button);
@@ -504,11 +503,17 @@ select_feather_callback (GtkWidget *widget,
GimpUnit unit,
gpointer data)
{
- GimpImage *image = GIMP_IMAGE (data);
- gdouble radius_x;
- gdouble radius_y;
+ GimpImage *image = GIMP_IMAGE (data);
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
+ gdouble radius_x;
+ gdouble radius_y;
- radius_x = radius_y = select_feather_radius = size;
+ g_object_set (config,
+ "selection-feather-radius", size,
+ NULL);
+
+ radius_x = config->selection_feather_radius;
+ radius_y = config->selection_feather_radius;
if (unit != GIMP_UNIT_PIXEL)
{
@@ -537,23 +542,28 @@ select_border_callback (GtkWidget *widget,
GimpUnit unit,
gpointer data)
{
- GimpImage *image = GIMP_IMAGE (data);
- GtkWidget *style_combo = g_object_get_data (G_OBJECT (widget),
- "border-style-combo");
- GtkWidget *edge_lock_button = g_object_get_data (G_OBJECT (widget),
- "edge-lock-toggle");
- gdouble radius_x;
- gdouble radius_y;
- gint border_style;
+ GimpImage *image = GIMP_IMAGE (data);
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
+ GtkWidget *combo;
+ GtkWidget *button;
+ gdouble radius_x;
+ gdouble radius_y;
+ gint border_style;
+
+ combo = g_object_get_data (G_OBJECT (widget), "border-style-combo");
+ button = g_object_get_data (G_OBJECT (widget), "edge-lock-toggle");
- radius_x = radius_y = select_border_radius = ROUND (size);
+ gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (combo), &border_style);
- if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (style_combo),
- &border_style))
- select_border_style = (GimpChannelBorderStyle) border_style;
+ g_object_set (config,
+ "selection-border-radius", size,
+ "selection-border-style", border_style,
+ "selection-border-edge-lock",
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)),
+ NULL);
- select_border_edge_lock =
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (edge_lock_button));
+ radius_x = ROUND (config->selection_border_radius);
+ radius_y = ROUND (config->selection_border_radius);
if (unit != GIMP_UNIT_PIXEL)
{
@@ -573,7 +583,9 @@ select_border_callback (GtkWidget *widget,
}
gimp_channel_border (gimp_image_get_mask (image), radius_x, radius_y,
- select_border_style, select_border_edge_lock, TRUE);
+ config->selection_border_style,
+ config->selection_border_edge_lock,
+ TRUE);
gimp_image_flush (image);
}
@@ -583,11 +595,17 @@ select_grow_callback (GtkWidget *widget,
GimpUnit unit,
gpointer data)
{
- GimpImage *image = GIMP_IMAGE (data);
- gdouble radius_x;
- gdouble radius_y;
+ GimpImage *image = GIMP_IMAGE (data);
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
+ gdouble radius_x;
+ gdouble radius_y;
- radius_x = radius_y = select_grow_pixels = ROUND (size);
+ g_object_set (config,
+ "selection-grow-radius", size,
+ NULL);
+
+ radius_x = ROUND (config->selection_grow_radius);
+ radius_y = ROUND (config->selection_grow_radius);
if (unit != GIMP_UNIT_PIXEL)
{
@@ -616,15 +634,22 @@ select_shrink_callback (GtkWidget *widget,
GimpUnit unit,
gpointer data)
{
- GimpImage *image = GIMP_IMAGE (data);
- GtkWidget *button = g_object_get_data (G_OBJECT (widget), "edge-lock-toggle");
- gint radius_x;
- gint radius_y;
+ GimpImage *image = GIMP_IMAGE (data);
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
+ GtkWidget *button;
+ gint radius_x;
+ gint radius_y;
+
+ button = g_object_get_data (G_OBJECT (widget), "edge-lock-toggle");
- radius_x = radius_y = select_shrink_pixels = ROUND (size);
+ g_object_set (config,
+ "selection-shrink-radius", size,
+ "selection-shrink-edge-lock",
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)),
+ NULL);
- select_shrink_edge_lock =
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
+ radius_x = ROUND (config->selection_shrink_radius);
+ radius_y = ROUND (config->selection_shrink_radius);
if (unit != GIMP_UNIT_PIXEL)
{
@@ -644,6 +669,7 @@ select_shrink_callback (GtkWidget *widget,
}
gimp_channel_shrink (gimp_image_get_mask (image), radius_x, radius_y,
- select_shrink_edge_lock, TRUE);
+ config->selection_shrink_edge_lock,
+ TRUE);
gimp_image_flush (image);
}
diff --git a/app/config/gimpdialogconfig.c b/app/config/gimpdialogconfig.c
index 1b0d7c9..b65c636 100644
--- a/app/config/gimpdialogconfig.c
+++ b/app/config/gimpdialogconfig.c
@@ -50,7 +50,18 @@ enum
PROP_CHANNEL_NEW_NAME,
PROP_CHANNEL_NEW_COLOR,
- PROP_VECTORS_NEW_NAME
+ PROP_VECTORS_NEW_NAME,
+
+ PROP_SELECTION_FEATHER_RADIUS,
+
+ PROP_SELECTION_GROW_RADIUS,
+
+ PROP_SELECTION_SHRINK_RADIUS,
+ PROP_SELECTION_SHRINK_EDGE_LOCK,
+
+ PROP_SELECTION_BORDER_RADIUS,
+ PROP_SELECTION_BORDER_STYLE,
+ PROP_SELECTION_BORDER_EDGE_LOCK
};
@@ -139,6 +150,56 @@ gimp_dialog_config_class_init (GimpDialogConfigClass *klass)
VECTORS_NEW_NAME_BLURB,
_("Path"),
GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_FEATHER_RADIUS,
+ "selection-feather-radius",
+ "Selection feather radius",
+ SELECTION_FEATHER_RADIUS_BLURB,
+ 0.0, 32767.0, 5.0,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_GROW_RADIUS,
+ "selection-grow-radius",
+ "Selection grow radius",
+ SELECTION_GROW_RADIUS_BLURB,
+ 1.0, 32767.0, 1.0,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_SHRINK_RADIUS,
+ "selection-shrink-radius",
+ "Selection shrink radius",
+ SELECTION_SHRINK_RADIUS_BLURB,
+ 1.0, 32767.0, 1.0,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SELECTION_SHRINK_EDGE_LOCK,
+ "selection-shrink-edge-lock",
+ "Selection shrink edge lock",
+ SELECTION_SHRINK_EDGE_LOCK_BLURB,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_BORDER_RADIUS,
+ "selection-border-radius",
+ "Selection border radius",
+ SELECTION_BORDER_RADIUS_BLURB,
+ 1.0, 32767.0, 5.0,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SELECTION_BORDER_EDGE_LOCK,
+ "selection-border-edge-lock",
+ "Selection border edge lock",
+ SELECTION_BORDER_EDGE_LOCK_BLURB,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_ENUM (object_class, PROP_SELECTION_BORDER_STYLE,
+ "selection-border-style",
+ "Selection border style",
+ SELECTION_BORDER_STYLE_BLURB,
+ GIMP_TYPE_CHANNEL_BORDER_STYLE,
+ GIMP_CHANNEL_BORDER_STYLE_SMOOTH,
+ GIMP_PARAM_STATIC_STRINGS);
}
static void
@@ -217,6 +278,31 @@ gimp_dialog_config_set_property (GObject *object,
config->vectors_new_name = g_value_dup_string (value);
break;
+ case PROP_SELECTION_FEATHER_RADIUS:
+ config->selection_feather_radius = g_value_get_double (value);
+ break;
+
+ case PROP_SELECTION_GROW_RADIUS:
+ config->selection_grow_radius = g_value_get_double (value);
+ break;
+
+ case PROP_SELECTION_SHRINK_RADIUS:
+ config->selection_shrink_radius = g_value_get_double (value);
+ break;
+ case PROP_SELECTION_SHRINK_EDGE_LOCK:
+ config->selection_shrink_edge_lock = g_value_get_boolean (value);
+ break;
+
+ case PROP_SELECTION_BORDER_RADIUS:
+ config->selection_border_radius = g_value_get_double (value);
+ break;
+ case PROP_SELECTION_BORDER_EDGE_LOCK:
+ config->selection_border_edge_lock = g_value_get_boolean (value);
+ break;
+ case PROP_SELECTION_BORDER_STYLE:
+ config->selection_border_style = g_value_get_enum (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -262,6 +348,31 @@ gimp_dialog_config_get_property (GObject *object,
g_value_set_string (value, config->vectors_new_name);
break;
+ case PROP_SELECTION_FEATHER_RADIUS:
+ g_value_set_double (value, config->selection_feather_radius);
+ break;
+
+ case PROP_SELECTION_GROW_RADIUS:
+ g_value_set_double (value, config->selection_grow_radius);
+ break;
+
+ case PROP_SELECTION_SHRINK_RADIUS:
+ g_value_set_double (value, config->selection_shrink_radius);
+ break;
+ case PROP_SELECTION_SHRINK_EDGE_LOCK:
+ g_value_set_boolean (value, config->selection_shrink_edge_lock);
+ break;
+
+ case PROP_SELECTION_BORDER_RADIUS:
+ g_value_set_double (value, config->selection_border_radius);
+ break;
+ case PROP_SELECTION_BORDER_EDGE_LOCK:
+ g_value_set_boolean (value, config->selection_border_edge_lock);
+ break;
+ case PROP_SELECTION_BORDER_STYLE:
+ g_value_set_enum (value, config->selection_border_style);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
diff --git a/app/config/gimpdialogconfig.h b/app/config/gimpdialogconfig.h
index 87ddadc..33b43b4 100644
--- a/app/config/gimpdialogconfig.h
+++ b/app/config/gimpdialogconfig.h
@@ -49,6 +49,17 @@ struct _GimpDialogConfig
GimpRGB channel_new_color;
gchar *vectors_new_name;
+
+ gdouble selection_feather_radius;
+
+ gdouble selection_grow_radius;
+
+ gdouble selection_shrink_radius;
+ gboolean selection_shrink_edge_lock;
+
+ gdouble selection_border_radius;
+ gboolean selection_border_edge_lock;
+ GimpChannelBorderStyle selection_border_style;
};
struct _GimpDialogConfigClass
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index 1e505a8..99c9c89 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -441,6 +441,29 @@ _("Sets the default color and opacity for the 'New Channel' dialog.")
#define VECTORS_NEW_NAME_BLURB \
_("Sets the default path name for the 'New Path' dialog.")
+#define SELECTION_FEATHER_RADIUS_BLURB \
+_("Sets the default feather radius for the 'Feather Selection' dialog.")
+
+#define SELECTION_GROW_RADIUS_BLURB \
+_("Sets the default grow radius for the 'Grow Selection' dialog.")
+
+#define SELECTION_SHRINK_RADIUS_BLURB \
+_("Sets the default shrink radius for the 'Shrink Selection' dialog.")
+
+#define SELECTION_SHRINK_EDGE_LOCK_BLURB \
+_("Sets the default 'Selected areas continue outside the image' setting " \
+ "for the 'Shrink Selection' dialog.")
+
+#define SELECTION_BORDER_RADIUS_BLURB \
+_("Sets the default border radius for the 'Border Selection' dialog.")
+
+#define SELECTION_BORDER_EDGE_LOCK_BLURB \
+_("Sets the default 'Selected areas continue outside the image' setting " \
+ "for the 'Border Selection' dialog.")
+
+#define SELECTION_BORDER_STYLE_BLURB \
+_("Sets the default border style for the 'Border Selection' dialog.")
+
#define THUMBNAIL_SIZE_BLURB \
_("Sets the size of the thumbnail shown in the Open dialog.")
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index 5d99bce..3970521 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -2100,6 +2100,54 @@ prefs_dialog_new (Gimp *gimp,
GTK_TABLE (table), 0, FALSE,
size_group);
+ /* Feather Selection Dialog */
+ vbox2 = prefs_frame_new (_("Feather Selection Dialog"),
+ GTK_CONTAINER (vbox), FALSE);
+ table = prefs_table_new (1, GTK_CONTAINER (vbox2));
+
+ prefs_spin_button_add (object, "selection-feather-radius", 1.0, 10.0, 2,
+ _("Feather radius:"),
+ GTK_TABLE (table), 0, size_group);
+
+ /* Grow Selection Dialog */
+ vbox2 = prefs_frame_new (_("Grow Selection Dialog"),
+ GTK_CONTAINER (vbox), FALSE);
+ table = prefs_table_new (1, GTK_CONTAINER (vbox2));
+
+ prefs_spin_button_add (object, "selection-grow-radius", 1.0, 10.0, 0,
+ _("Grow radius:"),
+ GTK_TABLE (table), 0, size_group);
+
+ /* Shrink Selection Dialog */
+ vbox2 = prefs_frame_new (_("Shrink Selection Dialog"),
+ GTK_CONTAINER (vbox), FALSE);
+ table = prefs_table_new (1, GTK_CONTAINER (vbox2));
+
+ prefs_spin_button_add (object, "selection-shrink-radius", 1.0, 10.0, 0,
+ _("Shrink radius:"),
+ GTK_TABLE (table), 0, size_group);
+
+ prefs_check_button_add (object, "selection-shrink-edge-lock",
+ _("Selected areas continue outside the image"),
+ GTK_BOX (vbox2));
+
+ /* Border Selection Dialog */
+ vbox2 = prefs_frame_new (_("Border Selection Dialog"),
+ GTK_CONTAINER (vbox), FALSE);
+ table = prefs_table_new (2, GTK_CONTAINER (vbox2));
+
+ prefs_spin_button_add (object, "selection-border-radius", 1.0, 10.0, 0,
+ _("Border radius:"),
+ GTK_TABLE (table), 0, size_group);
+
+ prefs_enum_combo_box_add (object, "selection-border-style", 0, 0,
+ _("Border style:"),
+ GTK_TABLE (table), 1, size_group);
+
+ prefs_check_button_add (object, "selection-border-edge-lock",
+ _("Selected areas continue outside the image"),
+ GTK_BOX (vbox2));
+
g_object_unref (size_group);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]