[gimp] Bug 599573 - Remember dialog defaults between Gimp sessions



commit a6b6259b22feca3c637ca25e91a0a27fd9daf1fe
Author: Michael Natterer <mitch gimp org>
Date:   Wed Sep 28 00:31:59 2016 +0200

    Bug 599573 - Remember dialog defaults between Gimp sessions
    
    Remember the 'Indexed Color Conversion' dialog settings in
    GimpDialogConfig.

 app/actions/image-commands.c         |   67 ++++++++++++------------
 app/config/gimpdialogconfig.c        |   95 ++++++++++++++++++++++++++++++++++
 app/config/gimpdialogconfig.h        |    7 +++
 app/config/gimprc-blurbs.h           |   20 +++++++-
 app/dialogs/convert-indexed-dialog.c |    4 +-
 app/dialogs/preferences-dialog.c     |   30 +++++++++++
 6 files changed, 187 insertions(+), 36 deletions(-)
---
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index bd213a8..30ce89e 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -138,17 +138,11 @@ static void   image_merge_layers_callback      (GtkWidget              *dialog,
 
 /*  private variables  */
 
-static GimpUnit              image_resize_unit  = GIMP_UNIT_PIXEL;
-static GimpUnit              image_scale_unit   = GIMP_UNIT_PIXEL;
-static GimpInterpolationType image_scale_interp = -1;
-
-static GimpConvertPaletteType  image_convert_indexed_palette_type       = GIMP_MAKE_PALETTE;
-static gint                    image_convert_indexed_max_colors         = 256;
-static gboolean                image_convert_indexed_remove_duplicates  = TRUE;
-static GimpConvertDitherType   image_convert_indexed_dither_type        = GIMP_NO_DITHER;
-static gboolean                image_convert_indexed_dither_alpha       = FALSE;
-static gboolean                image_convert_indexed_dither_text_layers = FALSE;
-static GimpPalette            *image_convert_indexed_custom_palette     = NULL;
+static GimpUnit               image_resize_unit  = GIMP_UNIT_PIXEL;
+static GimpUnit               image_scale_unit   = GIMP_UNIT_PIXEL;
+static GimpInterpolationType  image_scale_interp = -1;
+static GimpPalette           *image_convert_indexed_custom_palette = NULL;
+
 
 /*  public functions  */
 
@@ -207,6 +201,7 @@ image_convert_base_type_cmd_callback (GtkAction *action,
   GimpImage         *image;
   GimpDisplay       *display;
   GtkWidget         *widget;
+  GimpDialogConfig  *config;
   GtkWidget         *dialog;
   GimpImageBaseType  value;
   GError            *error = NULL;
@@ -229,6 +224,8 @@ image_convert_base_type_cmd_callback (GtkAction *action,
       dialog = NULL;
     }
 
+  config = GIMP_DIALOG_CONFIG (image->gimp->config);
+
   switch (value)
     {
     case GIMP_RGB:
@@ -261,12 +258,12 @@ image_convert_base_type_cmd_callback (GtkAction *action,
       dialog = convert_indexed_dialog_new (image,
                                            action_data_get_context (data),
                                            widget,
-                                           image_convert_indexed_palette_type,
-                                           image_convert_indexed_max_colors,
-                                           image_convert_indexed_remove_duplicates,
-                                           image_convert_indexed_dither_type,
-                                           image_convert_indexed_dither_alpha,
-                                           image_convert_indexed_dither_text_layers,
+                                           config->image_convert_indexed_palette_type,
+                                           config->image_convert_indexed_max_colors,
+                                           config->image_convert_indexed_remove_duplicates,
+                                           config->image_convert_indexed_dither_type,
+                                           config->image_convert_indexed_dither_alpha,
+                                           config->image_convert_indexed_dither_text_layers,
                                            image_convert_indexed_custom_palette,
                                            image_convert_indexed_callback,
                                            display);
@@ -930,21 +927,25 @@ image_convert_indexed_callback (GtkWidget              *dialog,
                                 GimpPalette            *custom_palette,
                                 gpointer                user_data)
 {
-  GimpDisplay  *display = user_data;
-  GimpProgress *progress;
-  GError       *error   = NULL;
+  GimpDialogConfig *config  = GIMP_DIALOG_CONFIG (image->gimp->config);
+  GimpDisplay      *display = user_data;
+  GimpProgress     *progress;
+  GError           *error   = NULL;
+
+  g_object_set (config,
+                "image-convert-indexed-palette-type",       palette_type,
+                "image-convert-indexed-max-colors",         max_colors,
+                "image-convert-indexed-remove-duplicates",  remove_duplicates,
+                "image-convert-indexed-dither-type",        dither_type,
+                "image-convert-indexed-dither-alpha",       dither_alpha,
+                "image-convert-indexed-dither-text-layers", dither_text_layers,
+                NULL);
 
   if (image_convert_indexed_custom_palette)
     g_object_remove_weak_pointer (G_OBJECT (image_convert_indexed_custom_palette),
                                   (gpointer) &image_convert_indexed_custom_palette);
 
-  image_convert_indexed_palette_type       = palette_type;
-  image_convert_indexed_max_colors         = max_colors;
-  image_convert_indexed_remove_duplicates  = remove_duplicates;
-  image_convert_indexed_dither_type        = dither_type;
-  image_convert_indexed_dither_alpha       = dither_alpha;
-  image_convert_indexed_dither_text_layers = dither_text_layers;
-  image_convert_indexed_custom_palette     = custom_palette;
+  image_convert_indexed_custom_palette = custom_palette;
 
   if (image_convert_indexed_custom_palette)
     g_object_add_weak_pointer (G_OBJECT (image_convert_indexed_custom_palette),
@@ -954,12 +955,12 @@ image_convert_indexed_callback (GtkWidget              *dialog,
                                   _("Converting to indexed colors"));
 
   if (! gimp_image_convert_indexed (image,
-                                    image_convert_indexed_palette_type,
-                                    image_convert_indexed_max_colors,
-                                    image_convert_indexed_remove_duplicates,
-                                    image_convert_indexed_dither_type,
-                                    image_convert_indexed_dither_alpha,
-                                    image_convert_indexed_dither_text_layers,
+                                    config->image_convert_indexed_palette_type,
+                                    config->image_convert_indexed_max_colors,
+                                    config->image_convert_indexed_remove_duplicates,
+                                    config->image_convert_indexed_dither_type,
+                                    config->image_convert_indexed_dither_alpha,
+                                    config->image_convert_indexed_dither_text_layers,
                                     image_convert_indexed_custom_palette,
                                     progress,
                                     &error))
diff --git a/app/config/gimpdialogconfig.c b/app/config/gimpdialogconfig.c
index f9aceb8..f8b1763 100644
--- a/app/config/gimpdialogconfig.c
+++ b/app/config/gimpdialogconfig.c
@@ -55,6 +55,13 @@ enum
   PROP_IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD,
   PROP_IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD,
 
+  PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE,
+  PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS,
+  PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES,
+  PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE,
+  PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA,
+  PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS,
+
   PROP_LAYER_NEW_NAME,
   PROP_LAYER_NEW_FILL_TYPE,
 
@@ -199,6 +206,56 @@ gimp_dialog_config_class_init (GimpDialogConfigClass *klass)
                          GEGL_DITHER_NONE,
                          GIMP_PARAM_STATIC_STRINGS);
 
+  GIMP_CONFIG_PROP_ENUM (object_class,
+                         PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE,
+                         "image-convert-indexed-palette-type",
+                         "Default palette type for indexed conversion",
+                         IMAGE_CONVERT_INDEXED_PALETTE_TYPE_BLURB,
+                         GIMP_TYPE_CONVERT_PALETTE_TYPE,
+                         GIMP_MAKE_PALETTE,
+                         GIMP_PARAM_STATIC_STRINGS);
+
+  GIMP_CONFIG_PROP_INT (object_class,
+                        PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS,
+                        "image-convert-indexed-max-colors",
+                        "Default maximum number of colors for indexed conversion",
+                        IMAGE_CONVERT_INDEXED_MAX_COLORS_BLURB,
+                        2, 256, 256,
+                        GIMP_PARAM_STATIC_STRINGS);
+
+  GIMP_CONFIG_PROP_BOOLEAN (object_class,
+                            PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES,
+                            "image-convert-indexed-remove-duplicates",
+                            "Default remove duplicates for indexed conversion",
+                            IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES_BLURB,
+                            TRUE,
+                            GIMP_PARAM_STATIC_STRINGS);
+
+  GIMP_CONFIG_PROP_ENUM (object_class,
+                         PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE,
+                         "image-convert-indexed-dither-type",
+                         "Default dither type for indexed conversion",
+                         IMAGE_CONVERT_INDEXED_DITHER_TYPE_BLURB,
+                         GIMP_TYPE_CONVERT_DITHER_TYPE,
+                         GIMP_NO_DITHER,
+                         GIMP_PARAM_STATIC_STRINGS);
+
+  GIMP_CONFIG_PROP_BOOLEAN (object_class,
+                            PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA,
+                            "image-convert-indexed-dither-alpha",
+                            "Default dither alpha for indexed conversion",
+                            IMAGE_CONVERT_INDEXED_DITHER_ALPHA_BLURB,
+                            FALSE,
+                            GIMP_PARAM_STATIC_STRINGS);
+
+  GIMP_CONFIG_PROP_BOOLEAN (object_class,
+                            PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS,
+                            "image-convert-indexed-dither-text-layers",
+                            "Default dither text layers for indexed conversion",
+                            IMAGE_CONVERT_INDEXED_DITHER_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",
@@ -491,6 +548,25 @@ gimp_dialog_config_set_property (GObject      *object,
         g_value_get_enum (value);
       break;
 
+    case PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE:
+      config->image_convert_indexed_palette_type = g_value_get_enum (value);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS:
+      config->image_convert_indexed_max_colors = g_value_get_int (value);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES:
+      config->image_convert_indexed_remove_duplicates = g_value_get_boolean (value);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE:
+      config->image_convert_indexed_dither_type = g_value_get_enum (value);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA:
+      config->image_convert_indexed_dither_alpha = g_value_get_boolean (value);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS:
+      config->image_convert_indexed_dither_text_layers = g_value_get_boolean (value);
+      break;
+
     case PROP_LAYER_NEW_NAME:
       if (config->layer_new_name)
         g_free (config->layer_new_name);
@@ -634,6 +710,25 @@ gimp_dialog_config_get_property (GObject    *object,
                         config->image_convert_precision_channel_dither_method);
       break;
 
+    case PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE:
+      g_value_set_enum (value, config->image_convert_indexed_palette_type);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS:
+      g_value_set_int (value, config->image_convert_indexed_max_colors);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES:
+      g_value_set_boolean (value, config->image_convert_indexed_remove_duplicates);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE:
+      g_value_set_enum (value, config->image_convert_indexed_dither_type);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA:
+      g_value_set_boolean (value, config->image_convert_indexed_dither_alpha);
+      break;
+    case PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS:
+      g_value_set_boolean (value, config->image_convert_indexed_dither_text_layers);
+      break;
+
     case PROP_LAYER_NEW_NAME:
       g_value_set_string (value, config->layer_new_name);
       break;
diff --git a/app/config/gimpdialogconfig.h b/app/config/gimpdialogconfig.h
index 02eae0b..304fc2d 100644
--- a/app/config/gimpdialogconfig.h
+++ b/app/config/gimpdialogconfig.h
@@ -53,6 +53,13 @@ struct _GimpDialogConfig
   GeglDitherMethod          image_convert_precision_text_layer_dither_method;
   GeglDitherMethod          image_convert_precision_channel_dither_method;
 
+  GimpConvertPaletteType    image_convert_indexed_palette_type;
+  gint                      image_convert_indexed_max_colors;
+  gboolean                  image_convert_indexed_remove_duplicates;
+  GimpConvertDitherType     image_convert_indexed_dither_type;
+  gboolean                  image_convert_indexed_dither_alpha;
+  gboolean                  image_convert_indexed_dither_text_layers;
+
   gchar                    *layer_new_name;
   GimpFillType              layer_new_fill_type;
 
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index aa68025..fcd9699 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -436,7 +436,25 @@ _("Sets the default text layer dithering method for the 'Convert Precision' dial
 #define IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD_BLURB \
 _("Sets the default channel dithering method for the 'Convert Precision' dialog.")
 
-#define LAYER_NEW_NAME_BLURB \
+#define IMAGE_CONVERT_INDEXED_PALETTE_TYPE_BLURB \
+_("Sets the default palette type for the 'Convert to Indexed' dialog.")
+
+#define IMAGE_CONVERT_INDEXED_MAX_COLORS_BLURB \
+_("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                         \
+_("Sets the default dithering type for the 'Convert to Indexed' dialog.")
+
+#define IMAGE_CONVERT_INDEXED_DITHER_ALPHA_BLURB \
+_("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                                    \
 _("Sets the default layer name for the 'New Layer' dialog.")
 
 #define LAYER_NEW_FILL_TYPE_BLURB \
diff --git a/app/dialogs/convert-indexed-dialog.c b/app/dialogs/convert-indexed-dialog.c
index f39c403..661b5dc 100644
--- a/app/dialogs/convert-indexed-dialog.c
+++ b/app/dialogs/convert-indexed-dialog.c
@@ -219,8 +219,8 @@ convert_indexed_dialog_new (GimpImage                  *image,
 
   vbox = gtk_bin_get_child (GTK_BIN (frame));
 
-  toggle = gtk_check_button_new_with_mnemonic (_("_Remove unused colors "
-                                                 "from colormap"));
+  toggle = gtk_check_button_new_with_mnemonic (_("_Remove unused and duplicate "
+                                                 "colors from colormap"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
                                 private->remove_duplicates);
   gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 3);
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index 3b88e66..99b5eae 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -1859,6 +1859,36 @@ prefs_dialog_new (Gimp       *gimp,
                             _("Dither channels/masks:"),
                             GTK_TABLE (table), 2, size_group);
 
+  /*  Convert Indexed Dialog  */
+  vbox2 = prefs_frame_new (_("Indexed Conversion Dialog"),
+                           GTK_CONTAINER (vbox), FALSE);
+  table = prefs_table_new (2, GTK_CONTAINER (vbox2));
+
+  prefs_enum_combo_box_add (object, "image-convert-indexed-palette-type", 0, 0,
+                            _("Colormap:"),
+                            GTK_TABLE (table), 0, size_group);
+  prefs_spin_button_add (object, "image-convert-indexed-max-colors", 1.0, 8.0, 0,
+                         _("Maximum number of colors:"),
+                         GTK_TABLE (table), 1, size_group);
+
+  prefs_check_button_add (object, "image-convert-indexed-remove-duplicates",
+                          _("Remove unused and duplicate colors "
+                            "from colormap"),
+                          GTK_BOX (vbox2));
+
+  table = prefs_table_new (1, GTK_CONTAINER (vbox2));
+  prefs_enum_combo_box_add (object, "image-convert-indexed-dither-type", 0, 0,
+                            _("Color dithering:"),
+                            GTK_TABLE (table), 0, size_group);
+
+  prefs_check_button_add (object, "image-convert-indexed-dither-alpha",
+                          _("Enable dithering of transparency"),
+                          GTK_BOX (vbox2));
+  prefs_check_button_add (object, "image-convert-indexed-dither-text-layers",
+                          _("Enable dithering of text layers"),
+                          GTK_BOX (vbox2));
+
+
   /*  New Layer Dialog  */
   vbox2 = prefs_frame_new (_("New Layer Dialog"),
                            GTK_CONTAINER (vbox), FALSE);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]