mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-04 17:59:37 +00:00
app: implement the "Convert to RGB Working Space" import dialog in the core
Add gimp_image_import_color_profile(), a GUI vtable entry query_profile_policy() and a new dialog which returns the profile policy and the profile to convert to. Get rid of the wrapper that calls the lcms plug-in for that dialog, the plug-in is now completely unused. This commit doesn't add any new features, it's just the former lcms plug-in dialog implemented in app/ (except the little fix that it is now aware of linear vs. gamma images).
This commit is contained in:
parent
dc51a89427
commit
b51ee77ec0
13 changed files with 314 additions and 238 deletions
|
@ -65,6 +65,7 @@ gimp_gui_init (Gimp *gimp)
|
||||||
gimp->gui.recent_list_add_file = NULL;
|
gimp->gui.recent_list_add_file = NULL;
|
||||||
gimp->gui.recent_list_load = NULL;
|
gimp->gui.recent_list_load = NULL;
|
||||||
gimp->gui.get_mount_operation = NULL;
|
gimp->gui.get_mount_operation = NULL;
|
||||||
|
gimp->gui.query_profile_policy = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -506,3 +507,22 @@ gimp_get_mount_operation (Gimp *gimp,
|
||||||
|
|
||||||
return g_mount_operation_new ();
|
return g_mount_operation_new ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GimpColorProfilePolicy
|
||||||
|
gimp_query_profile_policy (Gimp *gimp,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GIMP_IS_GIMP (gimp), GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (GIMP_IS_CONTEXT (context), GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (dest_profile != NULL, GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
|
||||||
|
if (gimp->gui.query_profile_policy)
|
||||||
|
return gimp->gui.query_profile_policy (gimp, image, context,
|
||||||
|
dest_profile, dont_ask);
|
||||||
|
|
||||||
|
return GIMP_COLOR_PROFILE_POLICY_KEEP;
|
||||||
|
}
|
||||||
|
|
|
@ -93,8 +93,16 @@ struct _GimpGui
|
||||||
const gchar *mime_type);
|
const gchar *mime_type);
|
||||||
void (* recent_list_load) (Gimp *gimp);
|
void (* recent_list_load) (Gimp *gimp);
|
||||||
|
|
||||||
GMountOperation * (* get_mount_operation) (Gimp *gimp,
|
GMountOperation
|
||||||
|
* (* get_mount_operation) (Gimp *gimp,
|
||||||
GimpProgress *progress);
|
GimpProgress *progress);
|
||||||
|
|
||||||
|
GimpColorProfilePolicy
|
||||||
|
(* query_profile_policy) (Gimp *gimp,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -173,8 +181,16 @@ gboolean gimp_recent_list_add_file (Gimp *gimp,
|
||||||
const gchar *mime_type);
|
const gchar *mime_type);
|
||||||
void gimp_recent_list_load (Gimp *gimp);
|
void gimp_recent_list_load (Gimp *gimp);
|
||||||
|
|
||||||
GMountOperation * gimp_get_mount_operation (Gimp *gimp,
|
GMountOperation
|
||||||
|
* gimp_get_mount_operation (Gimp *gimp,
|
||||||
GimpProgress *progress);
|
GimpProgress *progress);
|
||||||
|
|
||||||
|
GimpColorProfilePolicy
|
||||||
|
gimp_query_profile_policy (Gimp *gimp,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_GUI_H__ */
|
#endif /* __GIMP_GUI_H__ */
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "gegl/gimp-babl.h"
|
#include "gegl/gimp-babl.h"
|
||||||
|
|
||||||
#include "gimp.h"
|
#include "gimp.h"
|
||||||
|
#include "gimpcontext.h"
|
||||||
#include "gimpdrawable.h"
|
#include "gimpdrawable.h"
|
||||||
#include "gimperror.h"
|
#include "gimperror.h"
|
||||||
#include "gimpimage.h"
|
#include "gimpimage.h"
|
||||||
|
@ -406,6 +407,83 @@ gimp_image_convert_color_profile (GimpImage *image,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gimp_image_import_color_profile (GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpProgress *progress,
|
||||||
|
gboolean interactive)
|
||||||
|
{
|
||||||
|
GimpColorConfig *config = image->gimp->config->color_management;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
|
g_return_if_fail (GIMP_IS_CONTEXT (context));
|
||||||
|
g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress));
|
||||||
|
|
||||||
|
config = image->gimp->config->color_management;
|
||||||
|
|
||||||
|
if (gimp_image_get_base_type (image) == GIMP_GRAY)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (config->mode == GIMP_COLOR_MANAGEMENT_OFF)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gimp_image_get_color_profile (image))
|
||||||
|
{
|
||||||
|
GimpColorProfilePolicy policy;
|
||||||
|
GimpColorProfile *dest_profile = NULL;
|
||||||
|
|
||||||
|
policy = image->gimp->config->color_profile_policy;
|
||||||
|
|
||||||
|
if (policy == GIMP_COLOR_PROFILE_POLICY_ASK)
|
||||||
|
{
|
||||||
|
if (interactive)
|
||||||
|
{
|
||||||
|
gboolean dont_ask = FALSE;
|
||||||
|
|
||||||
|
policy = gimp_query_profile_policy (image->gimp, image, context,
|
||||||
|
&dest_profile, &dont_ask);
|
||||||
|
|
||||||
|
if (dont_ask)
|
||||||
|
{
|
||||||
|
g_object_set (G_OBJECT (image->gimp->config),
|
||||||
|
"color-profile-policy", policy,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
policy = GIMP_COLOR_PROFILE_POLICY_KEEP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (policy == GIMP_COLOR_PROFILE_POLICY_CONVERT)
|
||||||
|
{
|
||||||
|
GimpColorRenderingIntent intent;
|
||||||
|
gboolean bpc;
|
||||||
|
|
||||||
|
if (! dest_profile)
|
||||||
|
{
|
||||||
|
dest_profile = gimp_image_get_builtin_color_profile (image);
|
||||||
|
g_object_ref (dest_profile);
|
||||||
|
}
|
||||||
|
|
||||||
|
intent = config->display_intent;
|
||||||
|
bpc = (intent == GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC);
|
||||||
|
|
||||||
|
gimp_image_undo_disable (image);
|
||||||
|
|
||||||
|
gimp_image_convert_color_profile (image, dest_profile,
|
||||||
|
intent, bpc,
|
||||||
|
progress, NULL);
|
||||||
|
|
||||||
|
gimp_image_clean_all (image);
|
||||||
|
gimp_image_undo_enable (image);
|
||||||
|
|
||||||
|
g_object_unref (dest_profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* private functions */
|
/* private functions */
|
||||||
|
|
||||||
|
|
|
@ -64,5 +64,10 @@ gboolean gimp_image_convert_color_profile (GimpImage
|
||||||
GimpProgress *progress,
|
GimpProgress *progress,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
void gimp_image_import_color_profile (GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpProgress *progress,
|
||||||
|
gboolean interactive);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_IMAGE_COLOR_PROFILE_H__ */
|
#endif /* __GIMP_IMAGE_COLOR_PROFILE_H__ */
|
||||||
|
|
|
@ -28,6 +28,8 @@ libappdialogs_a_sources = \
|
||||||
channel-options-dialog.h \
|
channel-options-dialog.h \
|
||||||
color-profile-dialog.c \
|
color-profile-dialog.c \
|
||||||
color-profile-dialog.h \
|
color-profile-dialog.h \
|
||||||
|
color-profile-import-dialog.c \
|
||||||
|
color-profile-import-dialog.h \
|
||||||
convert-precision-dialog.c \
|
convert-precision-dialog.c \
|
||||||
convert-precision-dialog.h \
|
convert-precision-dialog.h \
|
||||||
convert-type-dialog.c \
|
convert-type-dialog.c \
|
||||||
|
|
151
app/dialogs/color-profile-import-dialog.c
Normal file
151
app/dialogs/color-profile-import-dialog.c
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
/* GIMP - The GNU Image Manipulation Program
|
||||||
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||||
|
*
|
||||||
|
* color-profile-import-dialog.h
|
||||||
|
* Copyright (C) 2015 Michael Natterer <mitch@gimp.org>
|
||||||
|
*
|
||||||
|
* Partly based on the lcms plug-in
|
||||||
|
* Copyright (C) 2006, 2007 Sven Neumann <sven@gimp.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <gegl.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "libgimpbase/gimpbase.h"
|
||||||
|
#include "libgimpcolor/gimpcolor.h"
|
||||||
|
#include "libgimpwidgets/gimpwidgets.h"
|
||||||
|
|
||||||
|
#include "dialogs-types.h"
|
||||||
|
|
||||||
|
#include "core/gimp.h"
|
||||||
|
#include "core/gimpcontext.h"
|
||||||
|
#include "core/gimpimage.h"
|
||||||
|
#include "core/gimpimage-color-profile.h"
|
||||||
|
|
||||||
|
#include "widgets/gimphelp-ids.h"
|
||||||
|
#include "widgets/gimpviewabledialog.h"
|
||||||
|
#include "widgets/gimpwidgets-constructors.h"
|
||||||
|
|
||||||
|
#include "color-profile-import-dialog.h"
|
||||||
|
|
||||||
|
#include "gimp-intl.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* public functions */
|
||||||
|
|
||||||
|
GimpColorProfilePolicy
|
||||||
|
color_profile_import_dialog_run (GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GtkWidget *parent,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
|
GtkWidget *main_vbox;
|
||||||
|
GtkWidget *frame;
|
||||||
|
GtkWidget *label;
|
||||||
|
GtkWidget *toggle;
|
||||||
|
GimpColorProfile *src_profile;
|
||||||
|
GimpColorProfilePolicy policy;
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (GIMP_IS_CONTEXT (context), GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (parent == NULL || GTK_IS_WIDGET (parent),
|
||||||
|
GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
g_return_val_if_fail (dest_profile != NULL, GIMP_COLOR_PROFILE_POLICY_KEEP);
|
||||||
|
|
||||||
|
src_profile = gimp_image_get_color_profile (image);
|
||||||
|
*dest_profile = gimp_image_get_builtin_color_profile (image);
|
||||||
|
|
||||||
|
dialog =
|
||||||
|
gimp_viewable_dialog_new (GIMP_VIEWABLE (image), context,
|
||||||
|
_("Convert to RGB Working Space?"),
|
||||||
|
"gimp-image-color-profile-import",
|
||||||
|
NULL,
|
||||||
|
_("Import the image from a color profile"),
|
||||||
|
parent,
|
||||||
|
gimp_standard_help_func,
|
||||||
|
GIMP_HELP_IMAGE_COLOR_PROFILE_IMPORT,
|
||||||
|
|
||||||
|
_("Keep"), GTK_RESPONSE_CANCEL,
|
||||||
|
_("Convert"), GTK_RESPONSE_OK,
|
||||||
|
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||||
|
GTK_RESPONSE_OK,
|
||||||
|
GTK_RESPONSE_CANCEL,
|
||||||
|
-1);
|
||||||
|
|
||||||
|
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
||||||
|
|
||||||
|
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
|
||||||
|
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
||||||
|
main_vbox, TRUE, TRUE, 0);
|
||||||
|
gtk_widget_show (main_vbox);
|
||||||
|
|
||||||
|
text = g_strdup_printf (_("The image '%s' has an embedded color profile"),
|
||||||
|
gimp_image_get_display_name (image));
|
||||||
|
frame = gimp_frame_new (text);
|
||||||
|
g_free (text);
|
||||||
|
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||||
|
gtk_widget_show (frame);
|
||||||
|
|
||||||
|
label = gimp_color_profile_label_new (src_profile);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame), label);
|
||||||
|
gtk_widget_show (label);
|
||||||
|
|
||||||
|
frame = gimp_frame_new (_("Convert the image to the RGB working space?"));
|
||||||
|
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||||
|
gtk_widget_show (frame);
|
||||||
|
|
||||||
|
label = gimp_color_profile_label_new (*dest_profile);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame), label);
|
||||||
|
gtk_widget_show (label);
|
||||||
|
|
||||||
|
if (dont_ask)
|
||||||
|
{
|
||||||
|
toggle = gtk_check_button_new_with_mnemonic (_("_Don't ask me again"));
|
||||||
|
gtk_box_pack_end (GTK_BOX (main_vbox), toggle, FALSE, FALSE, 0);
|
||||||
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), FALSE);
|
||||||
|
gtk_widget_show (toggle);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (gtk_dialog_run (GTK_DIALOG (dialog)))
|
||||||
|
{
|
||||||
|
case GTK_RESPONSE_OK:
|
||||||
|
policy = GIMP_COLOR_PROFILE_POLICY_CONVERT;
|
||||||
|
g_object_ref (*dest_profile);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
policy = GIMP_COLOR_PROFILE_POLICY_KEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dont_ask)
|
||||||
|
{
|
||||||
|
*dont_ask = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_widget_destroy (dialog);
|
||||||
|
|
||||||
|
return policy;
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
/* GIMP - The GNU Image Manipulation Program
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||||
*
|
*
|
||||||
* plug-in-icc-profile.h
|
* color-profile-import-dialog.h
|
||||||
* Copyright (C) 2006 Sven Neumann <sven@gimp.org>
|
* Copyright (C) 2015 Michael Natterer <mitch@gimp.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,15 +18,16 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PLUG_IN_ICC_PROFILE_H__
|
#ifndef __COLOR_PROFILE_IMPORT_DIALOG_H__
|
||||||
#define __PLUG_IN_ICC_PROFILE_H__
|
#define __COLOR_PROFILE_IMPORT_DIALOG_H__
|
||||||
|
|
||||||
|
|
||||||
gboolean plug_in_icc_profile_apply_rgb (GimpImage *image,
|
GimpColorProfilePolicy
|
||||||
GimpContext *context,
|
color_profile_import_dialog_run (GimpImage *image,
|
||||||
GimpProgress *progress,
|
GimpContext *context,
|
||||||
GimpRunMode run_mode,
|
GtkWidget *parent,
|
||||||
GError **error);
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __PLUG_IN_ICC_PROFILE_H__ */
|
#endif /* __COLOR_PROFILE_IMPORT_DIALOG_H__ */
|
|
@ -48,8 +48,6 @@
|
||||||
|
|
||||||
#include "plug-in/gimppluginmanager.h"
|
#include "plug-in/gimppluginmanager.h"
|
||||||
#include "plug-in/gimppluginprocedure.h"
|
#include "plug-in/gimppluginprocedure.h"
|
||||||
#include "plug-in/gimppluginerror.h"
|
|
||||||
#include "plug-in/plug-in-icc-profile.h"
|
|
||||||
|
|
||||||
#include "file-open.h"
|
#include "file-open.h"
|
||||||
#include "file-procedure.h"
|
#include "file-procedure.h"
|
||||||
|
@ -65,10 +63,6 @@ static void file_open_sanitize_image (GimpImage *image
|
||||||
static void file_open_convert_items (GimpImage *dest_image,
|
static void file_open_convert_items (GimpImage *dest_image,
|
||||||
const gchar *basename,
|
const gchar *basename,
|
||||||
GList *items);
|
GList *items);
|
||||||
static void file_open_handle_color_profile (GimpImage *image,
|
|
||||||
GimpContext *context,
|
|
||||||
GimpProgress *progress,
|
|
||||||
GimpRunMode run_mode);
|
|
||||||
static GList * file_open_get_layers (const GimpImage *image,
|
static GList * file_open_get_layers (const GimpImage *image,
|
||||||
gboolean merge_visible,
|
gboolean merge_visible,
|
||||||
gint *n_visible);
|
gint *n_visible);
|
||||||
|
@ -255,7 +249,9 @@ file_open_image (Gimp *gimp,
|
||||||
|
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
file_open_handle_color_profile (image, context, progress, run_mode);
|
gimp_image_import_color_profile (image, context, progress,
|
||||||
|
run_mode == GIMP_RUN_INTERACTIVE ?
|
||||||
|
TRUE : FALSE);
|
||||||
|
|
||||||
if (file_open_file_proc_is_import (file_proc))
|
if (file_open_file_proc_is_import (file_proc))
|
||||||
{
|
{
|
||||||
|
@ -775,81 +771,6 @@ file_open_convert_items (GimpImage *dest_image,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
file_open_profile_apply_rgb (GimpImage *image,
|
|
||||||
GimpContext *context,
|
|
||||||
GimpProgress *progress,
|
|
||||||
GimpRunMode run_mode)
|
|
||||||
{
|
|
||||||
GimpColorConfig *config = image->gimp->config->color_management;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
if (gimp_image_get_base_type (image) == GIMP_GRAY)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (config->mode == GIMP_COLOR_MANAGEMENT_OFF)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (! plug_in_icc_profile_apply_rgb (image, context, progress, run_mode,
|
|
||||||
&error))
|
|
||||||
{
|
|
||||||
if (error->domain == GIMP_PLUG_IN_ERROR &&
|
|
||||||
error->code == GIMP_PLUG_IN_NOT_FOUND)
|
|
||||||
{
|
|
||||||
gchar *msg = g_strdup_printf ("%s\n\n%s",
|
|
||||||
error->message,
|
|
||||||
_("Color management has been disabled. "
|
|
||||||
"It can be enabled again in the "
|
|
||||||
"Preferences dialog."));
|
|
||||||
|
|
||||||
g_object_set (config, "mode", GIMP_COLOR_MANAGEMENT_OFF, NULL);
|
|
||||||
|
|
||||||
gimp_message_literal (image->gimp, G_OBJECT (progress),
|
|
||||||
GIMP_MESSAGE_WARNING, msg);
|
|
||||||
g_free (msg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gimp_message_literal (image->gimp, G_OBJECT (progress),
|
|
||||||
GIMP_MESSAGE_ERROR, error->message);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
file_open_handle_color_profile (GimpImage *image,
|
|
||||||
GimpContext *context,
|
|
||||||
GimpProgress *progress,
|
|
||||||
GimpRunMode run_mode)
|
|
||||||
{
|
|
||||||
if (gimp_image_get_color_profile (image))
|
|
||||||
{
|
|
||||||
gimp_image_undo_disable (image);
|
|
||||||
|
|
||||||
switch (image->gimp->config->color_profile_policy)
|
|
||||||
{
|
|
||||||
case GIMP_COLOR_PROFILE_POLICY_ASK:
|
|
||||||
if (run_mode == GIMP_RUN_INTERACTIVE)
|
|
||||||
file_open_profile_apply_rgb (image, context, progress,
|
|
||||||
GIMP_RUN_INTERACTIVE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GIMP_COLOR_PROFILE_POLICY_KEEP:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GIMP_COLOR_PROFILE_POLICY_CONVERT:
|
|
||||||
file_open_profile_apply_rgb (image, context, progress,
|
|
||||||
GIMP_RUN_NONINTERACTIVE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
gimp_image_clean_all (image);
|
|
||||||
gimp_image_undo_enable (image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GList *
|
static GList *
|
||||||
file_open_get_layers (const GimpImage *image,
|
file_open_get_layers (const GimpImage *image,
|
||||||
gboolean merge_visible,
|
gboolean merge_visible,
|
||||||
|
|
|
@ -76,6 +76,8 @@
|
||||||
|
|
||||||
#include "menus/menus.h"
|
#include "menus/menus.h"
|
||||||
|
|
||||||
|
#include "dialogs/color-profile-import-dialog.h"
|
||||||
|
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "gui-message.h"
|
#include "gui-message.h"
|
||||||
#include "gui-vtable.h"
|
#include "gui-vtable.h"
|
||||||
|
@ -144,9 +146,17 @@ static gboolean gui_recent_list_add_file (Gimp *gimp,
|
||||||
const gchar *mime_type);
|
const gchar *mime_type);
|
||||||
static void gui_recent_list_load (Gimp *gimp);
|
static void gui_recent_list_load (Gimp *gimp);
|
||||||
|
|
||||||
static GMountOperation * gui_get_mount_operation (Gimp *gimp,
|
static GMountOperation
|
||||||
|
* gui_get_mount_operation (Gimp *gimp,
|
||||||
GimpProgress *progress);
|
GimpProgress *progress);
|
||||||
|
|
||||||
|
static GimpColorProfilePolicy
|
||||||
|
gui_query_profile_policy (Gimp *gimp,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask);
|
||||||
|
|
||||||
|
|
||||||
/* public functions */
|
/* public functions */
|
||||||
|
|
||||||
|
@ -182,6 +192,7 @@ gui_vtable_init (Gimp *gimp)
|
||||||
gimp->gui.recent_list_add_file = gui_recent_list_add_file;
|
gimp->gui.recent_list_add_file = gui_recent_list_add_file;
|
||||||
gimp->gui.recent_list_load = gui_recent_list_load;
|
gimp->gui.recent_list_load = gui_recent_list_load;
|
||||||
gimp->gui.get_mount_operation = gui_get_mount_operation;
|
gimp->gui.get_mount_operation = gui_get_mount_operation;
|
||||||
|
gimp->gui.query_profile_policy = gui_query_profile_policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -750,3 +761,14 @@ gui_get_mount_operation (Gimp *gimp,
|
||||||
|
|
||||||
return gtk_mount_operation_new (GTK_WINDOW (toplevel));
|
return gtk_mount_operation_new (GTK_WINDOW (toplevel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GimpColorProfilePolicy
|
||||||
|
gui_query_profile_policy (Gimp *gimp,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpContext *context,
|
||||||
|
GimpColorProfile **dest_profile,
|
||||||
|
gboolean *dont_ask)
|
||||||
|
{
|
||||||
|
return color_profile_import_dialog_run (image, context, NULL,
|
||||||
|
dest_profile, dont_ask);
|
||||||
|
}
|
||||||
|
|
|
@ -72,10 +72,7 @@ libappplug_in_a_SOURCES = \
|
||||||
plug-in-params.c \
|
plug-in-params.c \
|
||||||
plug-in-params.h \
|
plug-in-params.h \
|
||||||
plug-in-rc.c \
|
plug-in-rc.c \
|
||||||
plug-in-rc.h \
|
plug-in-rc.h
|
||||||
\
|
|
||||||
plug-in-icc-profile.c \
|
|
||||||
plug-in-icc-profile.h
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# rules to generate built sources
|
# rules to generate built sources
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
||||||
*
|
|
||||||
* plug-in-icc-profile.c
|
|
||||||
* Copyright (C) 2006 Sven Neumann <sven@gimp.org>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
|
||||||
#include <gegl.h>
|
|
||||||
|
|
||||||
#include "libgimpbase/gimpbase.h"
|
|
||||||
|
|
||||||
#include "core/core-types.h"
|
|
||||||
|
|
||||||
#include "core/gimp.h"
|
|
||||||
#include "core/gimpcontext.h"
|
|
||||||
#include "core/gimpimage.h"
|
|
||||||
#include "core/gimpparamspecs.h"
|
|
||||||
#include "core/gimpprogress.h"
|
|
||||||
|
|
||||||
#include "pdb/gimppdb.h"
|
|
||||||
#include "pdb/gimpprocedure.h"
|
|
||||||
|
|
||||||
#include "gimppluginerror.h"
|
|
||||||
#include "plug-in-icc-profile.h"
|
|
||||||
|
|
||||||
#include "gimp-intl.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define ICC_PROFILE_APPLY_RGB_PROC "plug-in-icc-profile-apply-rgb"
|
|
||||||
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
plug_in_icc_profile_apply_rgb (GimpImage *image,
|
|
||||||
GimpContext *context,
|
|
||||||
GimpProgress *progress,
|
|
||||||
GimpRunMode run_mode,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
Gimp *gimp;
|
|
||||||
GimpProcedure *procedure;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
|
||||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), FALSE);
|
|
||||||
g_return_val_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress), FALSE);
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
||||||
|
|
||||||
gimp = image->gimp;
|
|
||||||
|
|
||||||
if (gimp_image_get_base_type (image) == GIMP_GRAY)
|
|
||||||
{
|
|
||||||
g_set_error (error, GIMP_PLUG_IN_ERROR, GIMP_PLUG_IN_EXECUTION_FAILED,
|
|
||||||
_("Can't apply color profile to grayscale image (%s)"),
|
|
||||||
ICC_PROFILE_APPLY_RGB_PROC);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
procedure = gimp_pdb_lookup_procedure (gimp->pdb, ICC_PROFILE_APPLY_RGB_PROC);
|
|
||||||
|
|
||||||
if (procedure &&
|
|
||||||
procedure->num_args >= 2 &&
|
|
||||||
GIMP_IS_PARAM_SPEC_INT32 (procedure->args[0]) &&
|
|
||||||
GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[1]))
|
|
||||||
{
|
|
||||||
GimpValueArray *return_vals;
|
|
||||||
GimpPDBStatusType status;
|
|
||||||
GimpColorProfilePolicy policy = GIMP_COLOR_PROFILE_POLICY_ASK;
|
|
||||||
gboolean success;
|
|
||||||
|
|
||||||
return_vals =
|
|
||||||
gimp_pdb_execute_procedure_by_name (gimp->pdb, context, progress, error,
|
|
||||||
ICC_PROFILE_APPLY_RGB_PROC,
|
|
||||||
GIMP_TYPE_INT32, run_mode,
|
|
||||||
GIMP_TYPE_IMAGE_ID,
|
|
||||||
gimp_image_get_ID (image),
|
|
||||||
G_TYPE_NONE);
|
|
||||||
|
|
||||||
status = g_value_get_enum (gimp_value_array_index (return_vals, 0));
|
|
||||||
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GIMP_PDB_SUCCESS:
|
|
||||||
policy = GIMP_COLOR_PROFILE_POLICY_CONVERT;
|
|
||||||
success = TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GIMP_PDB_CANCEL:
|
|
||||||
policy = GIMP_COLOR_PROFILE_POLICY_KEEP;
|
|
||||||
success = TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (error && *error == NULL)
|
|
||||||
g_set_error (error,
|
|
||||||
GIMP_PLUG_IN_ERROR, GIMP_PLUG_IN_EXECUTION_FAILED,
|
|
||||||
_("Error running '%s'"), ICC_PROFILE_APPLY_RGB_PROC);
|
|
||||||
success = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (success && gimp_value_array_length (return_vals) > 1)
|
|
||||||
{
|
|
||||||
GValue *value = gimp_value_array_index (return_vals, 1);
|
|
||||||
|
|
||||||
if (GIMP_VALUE_HOLDS_INT32 (value) && g_value_get_int (value))
|
|
||||||
{
|
|
||||||
g_object_set (G_OBJECT (gimp->config),
|
|
||||||
"color-profile-policy", policy,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gimp_value_array_unref (return_vals);
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_set_error (error,
|
|
||||||
GIMP_PLUG_IN_ERROR, GIMP_PLUG_IN_NOT_FOUND,
|
|
||||||
_("Plug-In missing (%s)"), ICC_PROFILE_APPLY_RGB_PROC);
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
|
@ -150,6 +150,7 @@
|
||||||
#define GIMP_HELP_IMAGE_COLOR_PROFILE_ASSIGN "gimp-image-color-profile-assign"
|
#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_CONVERT "gimp-image-color-profile-convert"
|
||||||
#define GIMP_HELP_IMAGE_COLOR_PROFILE_DISCARD "gimp-image-color-profile-discard"
|
#define GIMP_HELP_IMAGE_COLOR_PROFILE_DISCARD "gimp-image-color-profile-discard"
|
||||||
|
#define GIMP_HELP_IMAGE_COLOR_PROFILE_IMPORT "gimp-image-color-profile-import"
|
||||||
#define GIMP_HELP_IMAGE_GRID "gimp-image-grid"
|
#define GIMP_HELP_IMAGE_GRID "gimp-image-grid"
|
||||||
#define GIMP_HELP_IMAGE_PROPERTIES "gimp-image-properties"
|
#define GIMP_HELP_IMAGE_PROPERTIES "gimp-image-properties"
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,7 @@ app/dialogs/about-dialog.c
|
||||||
app/dialogs/action-search-dialog.c
|
app/dialogs/action-search-dialog.c
|
||||||
app/dialogs/channel-options-dialog.c
|
app/dialogs/channel-options-dialog.c
|
||||||
app/dialogs/color-profile-dialog.c
|
app/dialogs/color-profile-dialog.c
|
||||||
|
app/dialogs/color-profile-import-dialog.c
|
||||||
app/dialogs/convert-precision-dialog.c
|
app/dialogs/convert-precision-dialog.c
|
||||||
app/dialogs/convert-type-dialog.c
|
app/dialogs/convert-type-dialog.c
|
||||||
app/dialogs/data-delete-dialog.c
|
app/dialogs/data-delete-dialog.c
|
||||||
|
@ -326,7 +327,6 @@ app/plug-in/gimppluginprocedure.c
|
||||||
app/plug-in/gimppluginprocframe.c
|
app/plug-in/gimppluginprocframe.c
|
||||||
app/plug-in/gimptemporaryprocedure.c
|
app/plug-in/gimptemporaryprocedure.c
|
||||||
app/plug-in/plug-in-enums.c
|
app/plug-in/plug-in-enums.c
|
||||||
app/plug-in/plug-in-icc-profile.c
|
|
||||||
app/plug-in/plug-in-rc.c
|
app/plug-in/plug-in-rc.c
|
||||||
|
|
||||||
app/text/gimpfont.c
|
app/text/gimpfont.c
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue