[gimp] app: prepare the color profile dialog for doing RGB <-> GRAY conversion



commit 1cf04cc4b98af3f5df87ffd5bffcbb2f3a7843ec
Author: Michael Natterer <mitch gimp org>
Date:   Fri Apr 29 12:53:43 2016 +0200

    app: prepare the color profile dialog for doing RGB <-> GRAY conversion
    
    Get rid of individual constructors for assign and convert, instead
    have one constructor that takes a dialog type enum. No new features
    yet in this commit.

 app/actions/image-commands.c       |   18 ++--
 app/dialogs/color-profile-dialog.c |  217 +++++++++++++++++-------------------
 app/dialogs/color-profile-dialog.h |   21 ++--
 3 files changed, 127 insertions(+), 129 deletions(-)
---
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index 6a25535..94141ff 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -330,10 +330,11 @@ image_color_profile_assign_cmd_callback (GtkAction *action,
 
   if (! dialog)
     {
-      dialog = color_profile_assign_dialog_new (image,
-                                                action_data_get_context (data),
-                                                widget,
-                                                GIMP_PROGRESS (display));
+      dialog = color_profile_dialog_new (COLOR_PROFILE_DIALOG_ASSIGN_PROFILE,
+                                         image,
+                                         action_data_get_context (data),
+                                         widget,
+                                         GIMP_PROGRESS (display));
 
       g_object_set_data (G_OBJECT (image),
                          IMAGE_PROFILE_ASSIGN_DIALOG_KEY, dialog);
@@ -369,10 +370,11 @@ image_color_profile_convert_cmd_callback (GtkAction *action,
 
   if (! dialog)
     {
-      dialog = color_profile_convert_dialog_new (image,
-                                                 action_data_get_context (data),
-                                                 widget,
-                                                 GIMP_PROGRESS (display));
+      dialog = color_profile_dialog_new (COLOR_PROFILE_DIALOG_CONVERT_TO_PROFILE,
+                                         image,
+                                         action_data_get_context (data),
+                                         widget,
+                                         GIMP_PROGRESS (display));
 
       g_object_set_data (G_OBJECT (image),
                          IMAGE_PROFILE_CONVERT_DIALOG_KEY, dialog);
diff --git a/app/dialogs/color-profile-dialog.c b/app/dialogs/color-profile-dialog.c
index aa32c6c..f19cbcc 100644
--- a/app/dialogs/color-profile-dialog.c
+++ b/app/dialogs/color-profile-dialog.c
@@ -58,28 +58,23 @@ typedef struct
   GtkWidget                *combo;
   GtkWidget                *dest_view;
 
+  ColorProfileDialogType    dialog_type;
   GimpImage                *image;
   GimpProgress             *progress;
   GimpColorConfig          *config;
-  gboolean                  convert;
 
   GimpColorRenderingIntent  intent;
   gboolean                  bpc;
 } ProfileDialog;
 
 
-static ProfileDialog * color_profile_dialog_new      (GimpImage     *image,
-                                                      GimpContext   *context,
-                                                      GtkWidget     *parent,
-                                                      GimpProgress  *progress,
-                                                      gboolean       convert);
-static GtkWidget     * color_profile_combo_box_new   (ProfileDialog *dialog);
-static void            color_profile_dialog_response (GtkWidget     *widget,
-                                                      gint           response_id,
-                                                      ProfileDialog *dialog);
-static void            color_profile_dest_changed    (GtkWidget     *combo,
-                                                      ProfileDialog *dialog);
-static void            color_profile_dialog_free     (ProfileDialog *dialog);
+static GtkWidget * color_profile_combo_box_new   (ProfileDialog *dialog);
+static void        color_profile_dialog_response (GtkWidget     *widget,
+                                                  gint           response_id,
+                                                  ProfileDialog *dialog);
+static void        color_profile_dest_changed    (GtkWidget     *combo,
+                                                  ProfileDialog *dialog);
+static void        color_profile_dialog_free     (ProfileDialog *dialog);
 
 
 /*  defaults  */
@@ -91,40 +86,11 @@ static gboolean                 saved_bpc    = FALSE;
 /*  public functions  */
 
 GtkWidget *
-color_profile_assign_dialog_new (GimpImage    *image,
-                                 GimpContext  *context,
-                                 GtkWidget    *parent,
-                                 GimpProgress *progress)
-{
-  ProfileDialog *dialog;
-
-  dialog = color_profile_dialog_new (image, context, parent, progress, FALSE);
-
-  return dialog ? dialog->dialog : NULL;
-}
-
-GtkWidget *
-color_profile_convert_dialog_new (GimpImage    *image,
-                                  GimpContext  *context,
-                                  GtkWidget    *parent,
-                                  GimpProgress *progress)
-{
-  ProfileDialog *dialog;
-
-  dialog = color_profile_dialog_new (image, context, parent, progress, TRUE);
-
-  return dialog ? dialog->dialog : NULL;
-}
-
-
-/*  private functions  */
-
-static ProfileDialog *
-color_profile_dialog_new (GimpImage    *image,
-                          GimpContext  *context,
-                          GtkWidget    *parent,
-                          GimpProgress *progress,
-                          gboolean      convert)
+color_profile_dialog_new (ColorProfileDialogType  dialog_type,
+                          GimpImage              *image,
+                          GimpContext            *context,
+                          GtkWidget              *parent,
+                          GimpProgress           *progress)
 {
   ProfileDialog    *dialog;
   GtkWidget        *frame;
@@ -140,10 +106,10 @@ color_profile_dialog_new (GimpImage    *image,
 
   dialog = g_slice_new0 (ProfileDialog);
 
-  dialog->image    = image;
-  dialog->progress = progress;
-  dialog->config   = image->gimp->config->color_management;
-  dialog->convert  = convert;
+  dialog->dialog_type = dialog_type;
+  dialog->image       = image;
+  dialog->progress    = progress;
+  dialog->config      = image->gimp->config->color_management;
 
   if (saved_intent == -1)
     {
@@ -156,39 +122,47 @@ color_profile_dialog_new (GimpImage    *image,
       dialog->bpc    = saved_bpc;
     }
 
-  if (convert)
+  switch (dialog_type)
     {
+    case COLOR_PROFILE_DIALOG_ASSIGN_PROFILE:
       dialog->dialog =
         gimp_viewable_dialog_new (GIMP_VIEWABLE (image), context,
-                                  _("Convert to ICC Color Profile"),
-                                  "gimp-image-color-profile-convert",
+                                  _("Assign ICC Color Profile"),
+                                  "gimp-image-color-profile-assign",
                                   NULL,
-                                  _("Convert the image to a color profile"),
+                                  _("Assign a color profile to the image"),
                                   parent,
                                   gimp_standard_help_func,
-                                  GIMP_HELP_IMAGE_COLOR_PROFILE_CONVERT,
+                                  GIMP_HELP_IMAGE_COLOR_PROFILE_ASSIGN,
 
-                                  GTK_STOCK_CANCEL,  GTK_RESPONSE_CANCEL,
-                                  GTK_STOCK_CONVERT, GTK_RESPONSE_OK,
+                                  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                  _("_Assign"),     GTK_RESPONSE_OK,
 
                                   NULL);
-    }
-  else
-    {
+      break;
+
+    case COLOR_PROFILE_DIALOG_CONVERT_TO_PROFILE:
       dialog->dialog =
         gimp_viewable_dialog_new (GIMP_VIEWABLE (image), context,
-                                  _("Assign ICC Color Profile"),
-                                  "gimp-image-color-profile-assign",
+                                  _("Convert to ICC Color Profile"),
+                                  "gimp-image-color-profile-convert",
                                   NULL,
-                                  _("Assign a color profile to the image"),
+                                  _("Convert the image to a color profile"),
                                   parent,
                                   gimp_standard_help_func,
-                                  GIMP_HELP_IMAGE_COLOR_PROFILE_ASSIGN,
+                                  GIMP_HELP_IMAGE_COLOR_PROFILE_CONVERT,
 
-                                  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                  _("_Assign"),     GTK_RESPONSE_OK,
+                                  GTK_STOCK_CANCEL,  GTK_RESPONSE_CANCEL,
+                                  GTK_STOCK_CONVERT, GTK_RESPONSE_OK,
 
                                   NULL);
+      break;
+
+    case COLOR_PROFILE_DIALOG_CONVERT_TO_RGB:
+      break;
+
+    case COLOR_PROFILE_DIALOG_CONVERT_TO_GRAY:
+      break;
     }
 
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog->dialog),
@@ -221,7 +195,8 @@ color_profile_dialog_new (GimpImage    *image,
   gtk_container_add (GTK_CONTAINER (frame), label);
   gtk_widget_show (label);
 
-  frame = gimp_frame_new (convert ? _("Convert to") : _("Assign"));
+  frame = gimp_frame_new (dialog_type == COLOR_PROFILE_DIALOG_ASSIGN_PROFILE ?
+                          _("Assign") : _("Convert to"));
   gtk_box_pack_start (GTK_BOX (dialog->main_vbox), frame, FALSE, FALSE, 0);
   gtk_widget_show (frame);
 
@@ -247,7 +222,7 @@ color_profile_dialog_new (GimpImage    *image,
 
   color_profile_dest_changed (dialog->combo, dialog);
 
-  if (convert)
+  if (dialog_type != COLOR_PROFILE_DIALOG_ASSIGN_PROFILE)
     {
       GtkWidget *vbox;
       GtkWidget *hbox;
@@ -288,9 +263,12 @@ color_profile_dialog_new (GimpImage    *image,
                         &dialog->bpc);
     }
 
-  return dialog;
+  return dialog->dialog;
 }
 
+
+/*  private functions  */
+
 static GtkWidget *
 color_profile_combo_box_new (ProfileDialog *dialog)
 {
@@ -396,50 +374,63 @@ color_profile_dialog_response (GtkWidget     *widget,
 
       if (success)
         {
-          if (dialog->convert)
-            {
-              GimpProgress *progress;
-              const gchar  *label;
-
-              label = gimp_color_profile_get_label (dest_profile);
-
-              progress = gimp_progress_start (dialog->progress, FALSE,
-                                              _("Converting to '%s'"), label);
-
-              success = gimp_image_convert_color_profile (dialog->image,
-                                                          dest_profile,
-                                                          dialog->intent,
-                                                          dialog->bpc,
-                                                          progress,
-                                                          &error);
-
-              if (progress)
-                gimp_progress_end (progress);
-
-              if (success)
-                {
-                  saved_intent = dialog->intent;
-                  saved_bpc    = dialog->bpc;
-                }
-            }
-          else
+          switch (dialog->dialog_type)
             {
-              gimp_image_undo_group_start (dialog->image,
-                                           GIMP_UNDO_GROUP_PARASITE_ATTACH,
-                                           _("Assign color profile"));
-
-              success = gimp_image_set_color_profile (dialog->image,
-                                                      dest_profile,
-                                                      &error);
-
-              /*  omg...  */
-              if (success)
-                gimp_image_parasite_detach (dialog->image, "icc-profile-name");
-
-              gimp_image_undo_group_end (dialog->image);
-
-              if (! success)
-                gimp_image_undo (dialog->image);
+            case COLOR_PROFILE_DIALOG_ASSIGN_PROFILE:
+              {
+                gimp_image_undo_group_start (dialog->image,
+                                             GIMP_UNDO_GROUP_PARASITE_ATTACH,
+                                             _("Assign color profile"));
+
+                success = gimp_image_set_color_profile (dialog->image,
+                                                        dest_profile,
+                                                        &error);
+
+                /*  omg...  */
+                if (success)
+                  gimp_image_parasite_detach (dialog->image,
+                                              "icc-profile-name");
+
+                gimp_image_undo_group_end (dialog->image);
+
+                if (! success)
+                  gimp_image_undo (dialog->image);
+              }
+              break;
+
+            case COLOR_PROFILE_DIALOG_CONVERT_TO_PROFILE:
+              {
+                GimpProgress *progress;
+                const gchar  *label;
+
+                label = gimp_color_profile_get_label (dest_profile);
+
+                progress = gimp_progress_start (dialog->progress, FALSE,
+                                                _("Converting to '%s'"), label);
+
+                success = gimp_image_convert_color_profile (dialog->image,
+                                                            dest_profile,
+                                                            dialog->intent,
+                                                            dialog->bpc,
+                                                            progress,
+                                                            &error);
+
+                if (progress)
+                  gimp_progress_end (progress);
+
+                if (success)
+                  {
+                    saved_intent = dialog->intent;
+                    saved_bpc    = dialog->bpc;
+                  }
+              }
+              break;
+
+            case COLOR_PROFILE_DIALOG_CONVERT_TO_RGB:
+              break;
+
+            case COLOR_PROFILE_DIALOG_CONVERT_TO_GRAY:
+              break;
             }
 
           if (success)
diff --git a/app/dialogs/color-profile-dialog.h b/app/dialogs/color-profile-dialog.h
index df7b042..6305dc3 100644
--- a/app/dialogs/color-profile-dialog.h
+++ b/app/dialogs/color-profile-dialog.h
@@ -22,15 +22,20 @@
 #define __COLOR_PROFILE_DIALOG_H__
 
 
-GtkWidget * color_profile_assign_dialog_new  (GimpImage    *image,
-                                              GimpContext  *context,
-                                              GtkWidget    *parent,
-                                              GimpProgress *progress);
+typedef enum
+{
+  COLOR_PROFILE_DIALOG_ASSIGN_PROFILE,
+  COLOR_PROFILE_DIALOG_CONVERT_TO_PROFILE,
+  COLOR_PROFILE_DIALOG_CONVERT_TO_RGB,
+  COLOR_PROFILE_DIALOG_CONVERT_TO_GRAY
+} ColorProfileDialogType;
 
-GtkWidget * color_profile_convert_dialog_new (GimpImage    *image,
-                                              GimpContext  *context,
-                                              GtkWidget    *parent,
-                                              GimpProgress *progress);
+
+GtkWidget * color_profile_dialog_new (ColorProfileDialogType  dialog_type,
+                                      GimpImage              *image,
+                                      GimpContext            *context,
+                                      GtkWidget              *parent,
+                                      GimpProgress           *progress);
 
 
 #endif  /*  __COLOR_PROFILE_DIALOG_H__  */


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