[gimp] app: add Image -> Color Management -> Save Color Profile to File...
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add Image -> Color Management -> Save Color Profile to File...
- Date: Sat, 7 May 2016 01:02:43 +0000 (UTC)
commit c3c4387d35dc2a44b2b712fac2e48124eb86fa40
Author: Michael Natterer <mitch gimp org>
Date: Sat May 7 03:01:18 2016 +0200
app: add Image -> Color Management -> Save Color Profile to File...
using the stuff added in the last few commits.
app/actions/image-actions.c | 7 +++
app/actions/image-commands.c | 91 ++++++++++++++++++++++++++++++++++++++++++
app/actions/image-commands.h | 2 +
app/widgets/gimphelp-ids.h | 1 +
menus/image-menu.xml.in | 2 +
5 files changed, 103 insertions(+), 0 deletions(-)
---
diff --git a/app/actions/image-actions.c b/app/actions/image-actions.c
index 7dac021..27d7bba 100644
--- a/app/actions/image-actions.c
+++ b/app/actions/image-actions.c
@@ -94,6 +94,12 @@ static const GimpActionEntry image_actions[] =
G_CALLBACK (image_color_profile_discard_cmd_callback),
GIMP_HELP_IMAGE_COLOR_PROFILE_DISCARD },
+ { "image-color-profile-save", NULL,
+ NC_("image-action", "_Save Color Profile to File..."), NULL,
+ NC_("image-action", "Save the image's color profile to an ICC file"),
+ G_CALLBACK (image_color_profile_save_cmd_callback),
+ GIMP_HELP_IMAGE_COLOR_PROFILE_SAVE },
+
{ "image-resize", GIMP_STOCK_RESIZE,
NC_("image-action", "Can_vas Size..."), NULL,
NC_("image-action", "Adjust the image dimensions"),
@@ -427,6 +433,7 @@ image_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("image-color-profile-assign", image);
SET_SENSITIVE ("image-color-profile-convert", image);
SET_SENSITIVE ("image-color-profile-discard", image && profile);
+ SET_SENSITIVE ("image-color-profile-save", image);
SET_SENSITIVE ("image-flip-horizontal", image);
SET_SENSITIVE ("image-flip-vertical", image);
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index 529832d..a8cc837 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -20,6 +20,7 @@
#include <gegl.h>
#include <gtk/gtk.h>
+#include "libgimpcolor/gimpcolor.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "actions-types.h"
@@ -77,6 +78,7 @@
#define IMAGE_CONVERT_TYPE_DIALOG_KEY "image-convert-type-dialog"
#define IMAGE_PROFILE_CONVERT_DIALOG_KEY "image-profile-convert-dialog"
#define IMAGE_PROFILE_ASSIGN_DIALOG_KEY "image-profile-assign-dialog"
+#define IMAGE_PROFILE_SAVE_DIALOG_KEY "image-profile-save-dialog"
typedef struct
@@ -415,6 +417,95 @@ image_color_profile_discard_cmd_callback (GtkAction *action,
gimp_image_flush (image);
}
+static void
+image_profile_save_dialog_unset (GimpImage *image)
+{
+ g_object_set_data (G_OBJECT (image), IMAGE_PROFILE_SAVE_DIALOG_KEY, NULL);
+}
+
+static void
+image_profile_save_dialog_response (GtkWidget *dialog,
+ gint response_id,
+ GimpImage *image)
+{
+ if (response_id == GTK_RESPONSE_ACCEPT)
+ {
+ GimpColorProfile *profile;
+ GFile *file;
+ GError *error = NULL;
+
+ profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+
+ if (! file)
+ return;
+
+ if (! gimp_color_profile_save_to_file (profile, file, &error))
+ {
+ gimp_message (image->gimp, NULL,
+ GIMP_MESSAGE_WARNING,
+ _("Saving color profile failed: %s"),
+ error->message);
+ g_clear_error (&error);
+ g_object_unref (file);
+ return;
+ }
+
+ g_object_unref (file);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+void
+image_color_profile_save_cmd_callback (GtkAction *action,
+ gpointer data)
+{
+ GimpImage *image;
+ GimpDisplay *display;
+ GtkWidget *widget;
+ GtkWidget *dialog;
+ return_if_no_image (image, data);
+ return_if_no_display (display, data);
+ return_if_no_widget (widget, data);
+
+ dialog = g_object_get_data (G_OBJECT (image),
+ IMAGE_PROFILE_SAVE_DIALOG_KEY);
+
+ if (! dialog)
+ {
+ GtkWindow *toplevel;
+ GimpColorProfile *profile;
+ gchar *basename;
+
+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (widget));
+ profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
+
+ dialog =
+ gimp_color_profile_chooser_dialog_new (_("Save Color Profile"),
+ toplevel,
+ GTK_FILE_CHOOSER_ACTION_SAVE);
+
+ basename = g_strconcat (gimp_color_profile_get_label (profile),
+ ".icc", NULL);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename);
+ g_free (basename);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (image_profile_save_dialog_response),
+ image);
+
+ g_object_set_data (G_OBJECT (image),
+ IMAGE_PROFILE_SAVE_DIALOG_KEY, dialog);
+
+ g_signal_connect_object (dialog, "destroy",
+ G_CALLBACK (image_profile_save_dialog_unset),
+ image, G_CONNECT_SWAPPED);
+ }
+
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
void
image_resize_cmd_callback (GtkAction *action,
gpointer data)
diff --git a/app/actions/image-commands.h b/app/actions/image-commands.h
index 6d66aef..5754e49 100644
--- a/app/actions/image-commands.h
+++ b/app/actions/image-commands.h
@@ -38,6 +38,8 @@ void image_color_profile_convert_cmd_callback (GtkAction *action,
gpointer data);
void image_color_profile_discard_cmd_callback (GtkAction *action,
gpointer data);
+void image_color_profile_save_cmd_callback (GtkAction *action,
+ gpointer data);
void image_resize_cmd_callback (GtkAction *action,
gpointer data);
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index bae40f2..86687e9 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -155,6 +155,7 @@
#define GIMP_HELP_IMAGE_COLOR_PROFILE_ASSIGN "gimp-image-color-profile-assign"
#define GIMP_HELP_IMAGE_COLOR_PROFILE_CONVERT "gimp-image-color-profile-convert"
#define GIMP_HELP_IMAGE_COLOR_PROFILE_DISCARD "gimp-image-color-profile-discard"
+#define GIMP_HELP_IMAGE_COLOR_PROFILE_SAVE "gimp-image-color-profile-save"
#define GIMP_HELP_IMAGE_COLOR_PROFILE_IMPORT "gimp-image-color-profile-import"
#define GIMP_HELP_IMAGE_GRID "gimp-image-grid"
#define GIMP_HELP_IMAGE_PROPERTIES "gimp-image-properties"
diff --git a/menus/image-menu.xml.in b/menus/image-menu.xml.in
index 651afe0..cdc76a1 100644
--- a/menus/image-menu.xml.in
+++ b/menus/image-menu.xml.in
@@ -355,6 +355,8 @@
<menuitem action="image-color-profile-assign" />
<menuitem action="image-color-profile-convert" />
<menuitem action="image-color-profile-discard" />
+ <separator />
+ <menuitem action="image-color-profile-save" />
</menu>
<separator />
<menu action="image-transform-menu" name="Transform">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]