libgimpcolor, *: change GimpColorProfile to be a GObject

it used to be a typedef to gpointer and actually was a cmsHPROFILE.

Change its API to be more "standard", remove the public close()
function. The object caches both the cmsHPROFILE and the data/length
ICC blob, so conversions between the two become obsolete (simply call
get_lcms_profile() or get_icc_profile()).

Adapt everything to the new API, but port it in a naive way for now,
the code doesn't take advantage of the new possibilities yet (like
refcounting).
This commit is contained in:
Michael Natterer 2015-07-10 22:43:53 +02:00
parent 763e459a92
commit c102dde92b
33 changed files with 730 additions and 512 deletions

View File

@ -52,14 +52,14 @@
/* local function prototypes */
static void gimp_image_convert_profile_rgb (GimpImage *image,
GimpColorProfile src_profile,
GimpColorProfile dest_profile,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress);
static void gimp_image_convert_profile_indexed (GimpImage *image,
GimpColorProfile src_profile,
GimpColorProfile dest_profile,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress);
@ -133,14 +133,14 @@ gimp_image_validate_icc_profile (GimpImage *image,
gsize length,
GError **error)
{
GimpColorProfile profile;
GimpColorProfile *profile;
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (length != 0, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
profile = gimp_color_profile_open_from_data (data, length, error);
profile = gimp_color_profile_new_from_icc_profile (data, length, error);
if (! profile)
{
@ -150,11 +150,11 @@ gimp_image_validate_icc_profile (GimpImage *image,
if (! gimp_image_validate_color_profile (image, profile, error))
{
gimp_color_profile_close (profile);
g_object_unref (profile);
return FALSE;
}
gimp_color_profile_close (profile);
g_object_unref (profile);
return TRUE;
}
@ -219,11 +219,11 @@ gimp_image_set_icc_profile (GimpImage *image,
gboolean
gimp_image_validate_color_profile (GimpImage *image,
GimpColorProfile profile,
GimpColorProfile *profile,
GError **error)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (profile != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
if (gimp_image_get_base_type (image) == GIMP_GRAY)
@ -245,7 +245,7 @@ gimp_image_validate_color_profile (GimpImage *image,
return TRUE;
}
GimpColorProfile
GimpColorProfile *
gimp_image_get_color_profile (GimpImage *image)
{
const GimpParasite *parasite;
@ -255,53 +255,42 @@ gimp_image_get_color_profile (GimpImage *image)
parasite = gimp_image_get_icc_parasite (image);
if (parasite)
return gimp_color_profile_open_from_data (gimp_parasite_data (parasite),
gimp_parasite_data_size (parasite),
NULL);
return gimp_color_profile_new_from_icc_profile (gimp_parasite_data (parasite),
gimp_parasite_data_size (parasite),
NULL);
return NULL;
}
gboolean
gimp_image_set_color_profile (GimpImage *image,
GimpColorProfile profile,
GimpColorProfile *profile,
GError **error)
{
guint8 *data = NULL;
gsize length = 0;
const guint8 *data = NULL;
gsize length = 0;
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (profile == NULL || GIMP_IS_COLOR_PROFILE (profile),
FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
if (profile)
{
data = gimp_color_profile_save_to_data (profile, &length, error);
if (! data)
return FALSE;
}
data = gimp_color_profile_get_icc_profile (profile, &length);
if (! gimp_image_set_icc_profile (image, data, length, error))
{
g_free (data);
return FALSE;
}
g_free (data);
return TRUE;
return gimp_image_set_icc_profile (image, data, length, error);
}
gboolean
gimp_image_convert_color_profile (GimpImage *image,
GimpColorProfile dest_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress,
GError **error)
{
GimpColorProfile src_profile;
GimpColorProfile builtin_profile;
GimpColorProfile *src_profile;
GimpColorProfile *builtin_profile;
const Babl *layer_format;
gchar *src_label;
gchar *dest_label;
@ -318,7 +307,7 @@ gimp_image_convert_color_profile (GimpImage *image,
if (gimp_color_profile_is_equal (src_profile, dest_profile))
{
gimp_color_profile_close (src_profile);
g_object_unref (src_profile);
return TRUE;
}
@ -353,7 +342,7 @@ gimp_image_convert_color_profile (GimpImage *image,
gimp_image_set_color_profile (image, dest_profile, NULL);
}
gimp_color_profile_close (builtin_profile);
g_object_unref (builtin_profile);
/* omg... */
gimp_image_parasite_detach (image, "icc-profile-name");
@ -383,7 +372,7 @@ gimp_image_convert_color_profile (GimpImage *image,
if (progress)
gimp_progress_end (progress);
gimp_color_profile_close (src_profile);
g_object_unref (src_profile);
return TRUE;
}
@ -393,8 +382,8 @@ gimp_image_convert_color_profile (GimpImage *image,
static void
gimp_image_convert_profile_rgb (GimpImage *image,
GimpColorProfile src_profile,
GimpColorProfile dest_profile,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress)
@ -413,6 +402,8 @@ gimp_image_convert_profile_rgb (GimpImage *image,
list = g_list_next (list), nth_drawable++)
{
GimpDrawable *drawable = list->data;
cmsHPROFILE src_lcms;
cmsHPROFILE dest_lcms;
const Babl *iter_format;
cmsUInt32Number lcms_format;
cmsUInt32Number flags;
@ -421,6 +412,9 @@ gimp_image_convert_profile_rgb (GimpImage *image,
if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable)))
continue;
src_lcms = gimp_color_profile_get_lcms_profile (src_profile);
dest_lcms = gimp_color_profile_get_lcms_profile (dest_profile);
iter_format =
gimp_color_profile_get_format (gimp_drawable_get_format (drawable),
&lcms_format);
@ -430,8 +424,8 @@ gimp_image_convert_profile_rgb (GimpImage *image,
if (bpc)
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
transform = cmsCreateTransform (src_profile, lcms_format,
dest_profile, lcms_format,
transform = cmsCreateTransform (src_lcms, lcms_format,
dest_lcms, lcms_format,
intent, flags);
if (transform)
@ -474,21 +468,26 @@ gimp_image_convert_profile_rgb (GimpImage *image,
static void
gimp_image_convert_profile_indexed (GimpImage *image,
GimpColorProfile src_profile,
GimpColorProfile dest_profile,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress)
{
GimpColorTransform transform;
cmsHPROFILE src_lcms;
cmsHPROFILE dest_lcms;
guchar *cmap;
gint n_colors;
GimpColorTransform transform;
src_lcms = gimp_color_profile_get_lcms_profile (src_profile);
dest_lcms = gimp_color_profile_get_lcms_profile (dest_profile);
n_colors = gimp_image_get_colormap_size (image);
cmap = g_memdup (gimp_image_get_colormap (image), n_colors * 3);
transform = cmsCreateTransform (src_profile, TYPE_RGB_8,
dest_profile, TYPE_RGB_8,
transform = cmsCreateTransform (src_lcms, TYPE_RGB_8,
dest_lcms, TYPE_RGB_8,
intent,
cmsFLAGS_NOOPTIMIZE |
(bpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0));

View File

@ -44,15 +44,15 @@ gboolean gimp_image_set_icc_profile (GimpImage *ima
GError **error);
gboolean gimp_image_validate_color_profile (GimpImage *image,
GimpColorProfile profile,
GimpColorProfile *profile,
GError **error);
GimpColorProfile gimp_image_get_color_profile (GimpImage *image);
GimpColorProfile * gimp_image_get_color_profile (GimpImage *image);
gboolean gimp_image_set_color_profile (GimpImage *image,
GimpColorProfile profile,
GimpColorProfile *profile,
GError **error);
gboolean gimp_image_convert_color_profile (GimpImage *image,
GimpColorProfile dest_profile,
GimpColorProfile *dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc,
GimpProgress *progress,

View File

@ -180,7 +180,7 @@ static void gimp_image_real_colormap_changed (GimpImage *image,
static const guint8 *
gimp_image_color_managed_get_icc_profile (GimpColorManaged *managed,
gsize *len);
static GimpColorProfile
static GimpColorProfile *
gimp_image_color_managed_get_color_profile (GimpColorManaged *managed);
static void gimp_image_projectable_flush (GimpProjectable *projectable,
@ -1369,11 +1369,11 @@ gimp_image_color_managed_get_icc_profile (GimpColorManaged *managed,
return gimp_image_get_icc_profile (GIMP_IMAGE (managed), len);
}
static GimpColorProfile
static GimpColorProfile *
gimp_image_color_managed_get_color_profile (GimpColorManaged *managed)
{
GimpImage *image = GIMP_IMAGE (managed);
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_image_get_color_profile (image);

View File

@ -461,7 +461,7 @@ gimp_display_shell_format_title (GimpDisplayShell *shell,
i += print (title, title_len, i, "%s",
gimp_color_profile_get_label (profile));
gimp_color_profile_close (profile);
g_object_unref (profile);
}
break;

View File

@ -150,7 +150,7 @@ static void gimp_display_shell_real_rotated (GimpDisplayShell *shell);
static const guint8 *
gimp_display_shell_get_icc_profile(GimpColorManaged *managed,
gsize *len);
static GimpColorProfile
static GimpColorProfile *
gimp_display_shell_get_color_profile(GimpColorManaged *managed);
static void gimp_display_shell_profile_changed(GimpColorManaged *managed);
@ -1138,7 +1138,7 @@ gimp_display_shell_get_icc_profile (GimpColorManaged *managed,
return NULL;
}
static GimpColorProfile
static GimpColorProfile *
gimp_display_shell_get_color_profile (GimpColorManaged *managed)
{
GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (managed);

View File

@ -60,18 +60,21 @@ image_get_color_profile_invoker (GimpProcedure *procedure,
if (success)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_image_get_color_profile (image);
if (profile)
{
gsize length;
const guint8 *data;
gsize length;
profile_data = gimp_color_profile_save_to_data (profile, &length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
profile_data = g_memdup (data, length);
num_bytes = length;
gimp_color_profile_close (profile);
g_object_unref (profile);
}
}
@ -108,15 +111,16 @@ image_set_color_profile_invoker (GimpProcedure *procedure,
{
if (color_profile)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (color_profile, num_bytes,
error);
profile = gimp_color_profile_new_from_icc_profile (color_profile,
num_bytes,
error);
if (profile)
{
success = gimp_image_set_color_profile (image, profile, error);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
success = FALSE;
@ -149,15 +153,18 @@ image_get_effective_color_profile_invoker (GimpProcedure *procedure,
if (success)
{
GimpColorProfile profile;
gsize length;
GimpColorProfile *profile;
const guint8 *data;
gsize length;
profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
profile_data = gimp_color_profile_save_to_data (profile, &length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
profile_data = g_memdup (data, length);
num_bytes = length;
gimp_color_profile_close (profile);
g_object_unref (profile);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
@ -197,16 +204,18 @@ image_convert_color_profile_invoker (GimpProcedure *procedure,
{
if (color_profile)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (color_profile, num_bytes,
error);
profile = gimp_color_profile_new_from_icc_profile (color_profile,
num_bytes,
error);
if (profile)
{
success = gimp_image_convert_color_profile (image, profile,
intent, bpc,
progress, error);
g_object_unref (profile);
}
else
success = FALSE;

View File

@ -1880,7 +1880,7 @@ plug_in_icc_profile_info_invoker (GimpProcedure *procedure,
if (success)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
@ -1888,7 +1888,7 @@ plug_in_icc_profile_info_invoker (GimpProcedure *procedure,
profile_desc = gimp_color_profile_get_description (profile);
profile_info = gimp_color_profile_get_summary (profile);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
@ -1928,9 +1928,9 @@ plug_in_icc_profile_file_info_invoker (GimpProcedure *procedure,
if (file)
{
GimpColorProfile p;
GimpColorProfile *p;
p = gimp_color_profile_open_from_file (file, error);
p = gimp_color_profile_new_from_file (file, error);
g_object_unref (file);
if (p)
@ -1939,7 +1939,7 @@ plug_in_icc_profile_file_info_invoker (GimpProcedure *procedure,
profile_desc = gimp_color_profile_get_description (p);
profile_info = gimp_color_profile_get_summary (p);
gimp_color_profile_close (p);
g_object_unref (p);
}
else
success = FALSE;

View File

@ -103,7 +103,7 @@ gimp_image_profile_view_update (GimpImageParasiteView *view)
GimpImageProfileView *profile_view = GIMP_IMAGE_PROFILE_VIEW (view);
GimpImage *image;
GimpColorManaged *managed;
GimpColorProfile profile;
GimpColorProfile *profile;
image = gimp_image_parasite_view_get_image (view);
managed = GIMP_COLOR_MANAGED (image);
@ -112,5 +112,5 @@ gimp_image_profile_view_update (GimpImageParasiteView *view)
gimp_color_profile_view_set_profile (profile_view->profile_view, profile);
gimp_color_profile_close (profile);
g_object_unref (profile);
}

View File

@ -33,11 +33,11 @@
* image has no color profile assigned.
*
* Returns: The image's color profile. The returned value
* must be freed with gimp_color_profile_close().
* must be freed with g_object_unref().
*
* Since: 2.10
**/
GimpColorProfile
GimpColorProfile *
gimp_image_get_color_profile (gint32 image_ID)
{
guint8 *data;
@ -47,9 +47,9 @@ gimp_image_get_color_profile (gint32 image_ID)
if (data)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (data, length, NULL);
profile = gimp_color_profile_new_from_icc_profile (data, length, NULL);
g_free (data);
return profile;
@ -72,28 +72,24 @@ gimp_image_get_color_profile (gint32 image_ID)
* Since: 2.10
**/
gboolean
gimp_image_set_color_profile (gint32 image_ID,
GimpColorProfile profile)
gimp_image_set_color_profile (gint32 image_ID,
GimpColorProfile *profile)
{
guint8 *data = NULL;
gint length = 0;
gboolean success;
const guint8 *data = NULL;
gint length = 0;
g_return_val_if_fail (profile == NULL || GIMP_IS_COLOR_PROFILE (profile),
NULL);
if (profile)
{
gsize l;
data = gimp_color_profile_save_to_data (profile, &l, NULL);
data = gimp_color_profile_get_icc_profile (profile, &l);
length = l;
if (! data)
return FALSE;
}
success = _gimp_image_set_color_profile (image_ID, length, data);
g_free (data);
return success;
return _gimp_image_set_color_profile (image_ID, length, data);
}
/**
@ -110,11 +106,11 @@ gimp_image_set_color_profile (gint32 image_ID,
* in preferences either, a generated default RGB profile is returned.
*
* Returns: The color profile. The returned value
* must be freed with gimp_color_profile_close().
* must be freed with g_object_unref().
*
* Since: 2.10
**/
GimpColorProfile
GimpColorProfile *
gimp_image_get_effective_color_profile (gint32 image_ID)
{
guint8 *data;
@ -124,9 +120,9 @@ gimp_image_get_effective_color_profile (gint32 image_ID)
if (data)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (data, length, NULL);
profile = gimp_color_profile_new_from_icc_profile (data, length, NULL);
g_free (data);
return profile;
@ -138,9 +134,9 @@ gimp_image_get_effective_color_profile (gint32 image_ID)
/**
* gimp_image_convert_color_profile:
* @image_ID: The image.
* @profile: The color profile to convert to.
* @intent: Rendering intent.
* @bpc: Black point compensation.
* @profile: The color profile to convert to.
* @intent: Rendering intent.
* @bpc: Black point compensation.
*
* Convert the image's layers to a color profile
*
@ -153,29 +149,25 @@ gimp_image_get_effective_color_profile (gint32 image_ID)
* Since: 2.10
**/
gboolean
gimp_image_convert_color_profile (gint32 image_ID,
GimpColorProfile profile,
GimpColorRenderingIntent intent,
gboolean bpc)
gimp_image_convert_color_profile (gint32 image_ID,
GimpColorProfile *profile,
GimpColorRenderingIntent intent,
gboolean bpc)
{
guint8 *data = NULL;
gint length = 0;
gboolean success;
const guint8 *data = NULL;
gint length = 0;
g_return_val_if_fail (profile == NULL || GIMP_IS_COLOR_PROFILE (profile),
NULL);
if (profile)
{
gsize l;
data = gimp_color_profile_save_to_data (profile, &l, NULL);
data = gimp_color_profile_get_icc_profile (profile, &l);
length = l;
if (! data)
return FALSE;
}
success = _gimp_image_convert_color_profile (image_ID, length, data,
intent, bpc);
g_free (data);
return success;
return _gimp_image_convert_color_profile (image_ID, length, data,
intent, bpc);
}

View File

@ -30,16 +30,17 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
GimpColorProfile gimp_image_get_color_profile (gint32 image_ID);
gboolean gimp_image_set_color_profile (gint32 image_ID,
GimpColorProfile profile);
GimpColorProfile * gimp_image_get_color_profile (gint32 image_ID);
gboolean gimp_image_set_color_profile (gint32 image_ID,
GimpColorProfile *profile);
GimpColorProfile gimp_image_get_effective_color_profile (gint32 image_ID);
GimpColorProfile * gimp_image_get_effective_color_profile (gint32 image_ID);
gboolean gimp_image_convert_color_profile (gint32 image_ID,
GimpColorProfile *profile,
GimpColorRenderingIntent intent,
gboolean bpc);
gboolean gimp_image_convert_color_profile (gint32 image_ID,
GimpColorProfile profile,
GimpColorRenderingIntent intent,
gboolean bpc);
G_END_DECLS

View File

@ -25,22 +25,23 @@ EXPORTS
gimp_color_managed_get_icc_profile
gimp_color_managed_interface_get_type
gimp_color_managed_profile_changed
gimp_color_profile_close
gimp_color_profile_get_copyright
gimp_color_profile_get_description
gimp_color_profile_get_format
gimp_color_profile_get_icc_profile
gimp_color_profile_get_label
gimp_color_profile_get_lcms_profile
gimp_color_profile_get_manufacturer
gimp_color_profile_get_model
gimp_color_profile_get_summary
gimp_color_profile_is_cmyk
gimp_color_profile_is_equal
gimp_color_profile_is_rgb
gimp_color_profile_new_from_file
gimp_color_profile_new_from_icc_profile
gimp_color_profile_new_from_lcms_profile
gimp_color_profile_new_linear_rgb
gimp_color_profile_new_srgb
gimp_color_profile_open_from_data
gimp_color_profile_open_from_file
gimp_color_profile_save_to_data
gimp_hsl_get_type
gimp_hsl_set
gimp_hsl_set_alpha

View File

@ -141,7 +141,7 @@ gimp_color_managed_get_icc_profile (GimpColorManaged *managed,
*
* Since: 2.10
**/
GimpColorProfile
GimpColorProfile *
gimp_color_managed_get_color_profile (GimpColorManaged *managed)
{
GimpColorManagedInterface *iface;

View File

@ -51,17 +51,17 @@ struct _GimpColorManagedInterface
void (* profile_changed) (GimpColorManaged *managed);
/* virtual functions */
GimpColorProfile (* get_color_profile) (GimpColorManaged *managed);
GimpColorProfile * (* get_color_profile) (GimpColorManaged *managed);
};
GType gimp_color_managed_interface_get_type (void) G_GNUC_CONST;
GType gimp_color_managed_interface_get_type (void) G_GNUC_CONST;
const guint8 * gimp_color_managed_get_icc_profile (GimpColorManaged *managed,
gsize *len);
GimpColorProfile gimp_color_managed_get_color_profile (GimpColorManaged *managed);
const guint8 * gimp_color_managed_get_icc_profile (GimpColorManaged *managed,
gsize *len);
GimpColorProfile * gimp_color_managed_get_color_profile (GimpColorManaged *managed);
void gimp_color_managed_profile_changed (GimpColorManaged *managed);
void gimp_color_managed_profile_changed (GimpColorManaged *managed);
G_END_DECLS

View File

@ -58,6 +58,23 @@
#define GIMP_LCMS_MD5_DIGEST_LENGTH 16
struct _GimpColorProfilePrivate
{
cmsHPROFILE lcms_profile;
guint8 *data;
gsize length;
};
static void gimp_color_profile_finalize (GObject *object);
G_DEFINE_TYPE (GimpColorProfile, gimp_color_profile,
G_TYPE_OBJECT);
#define parent_class gimp_color_profile_parent_class
static GQuark
gimp_color_profile_error_quark (void)
{
@ -69,8 +86,48 @@ gimp_color_profile_error_quark (void)
return quark;
}
static void
gimp_color_profile_class_init (GimpColorProfileClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gimp_color_profile_finalize;
g_type_class_add_private (klass, sizeof (GimpColorProfilePrivate));
}
static void
gimp_color_profile_init (GimpColorProfile *profile)
{
profile->priv = G_TYPE_INSTANCE_GET_PRIVATE (profile,
GIMP_TYPE_COLOR_PROFILE,
GimpColorProfilePrivate);
}
static void
gimp_color_profile_finalize (GObject *object)
{
GimpColorProfile *profile = GIMP_COLOR_PROFILE (object);
if (profile->priv->lcms_profile)
{
cmsCloseProfile (profile->priv->lcms_profile);
profile->priv->lcms_profile = NULL;
}
if (profile->priv->data)
{
g_free (profile->priv->data);
profile->priv->data = NULL;
profile->priv->length = 0;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
/**
* gimp_color_profile_open_from_file:
* gimp_color_profile_new_from_file:
* @file: a #GFile
* @error: return location for #GError
*
@ -81,11 +138,14 @@ gimp_color_profile_error_quark (void)
*
* Since: 2.10
**/
GimpColorProfile
gimp_color_profile_open_from_file (GFile *file,
GError **error)
GimpColorProfile *
gimp_color_profile_new_from_file (GFile *file,
GError **error)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
cmsHPROFILE lcms_profile = NULL;
guint8 *data = NULL;
gsize length = 0;
gchar *path;
g_return_val_if_fail (G_IS_FILE (file), NULL);
@ -96,18 +156,16 @@ gimp_color_profile_open_from_file (GFile *file,
if (path)
{
GMappedFile *mapped;
const guint8 *data;
gsize length;
mapped = g_mapped_file_new (path, FALSE, error);
if (! mapped)
return NULL;
data = (const guint8 *) g_mapped_file_get_contents (mapped);
length = g_mapped_file_get_length (mapped);
data = g_memdup (g_mapped_file_get_contents (mapped), length);
profile = cmsOpenProfileFromMem (data, length);
lcms_profile = cmsOpenProfileFromMem (data, length);
g_mapped_file_unref (mapped);
}
@ -122,8 +180,9 @@ gimp_color_profile_open_from_file (GFile *file,
if (info)
{
GInputStream *input;
goffset length = g_file_info_get_size (info);
guint8 *data = g_malloc (length);
length = g_file_info_get_size (info);
data = g_malloc (length);
g_object_unref (info);
@ -137,26 +196,40 @@ gimp_color_profile_open_from_file (GFile *file,
&bytes_read, NULL, error) &&
bytes_read == length)
{
profile = cmsOpenProfileFromMem (data, length);
lcms_profile = cmsOpenProfileFromMem (data, length);
}
g_object_unref (input);
}
g_free (data);
}
}
if (! profile && error && *error == NULL)
g_set_error (error, gimp_color_profile_error_quark (), 0,
_("'%s' does not appear to be an ICC color profile"),
gimp_file_get_utf8_name (file));
if (lcms_profile)
{
profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL);
profile->priv->lcms_profile = lcms_profile;
profile->priv->data = data;
profile->priv->length = length;
}
else
{
if (data)
g_free (data);
if (error && *error == NULL)
{
g_set_error (error, gimp_color_profile_error_quark (), 0,
_("'%s' does not appear to be an ICC color profile"),
gimp_file_get_utf8_name (file));
}
}
return profile;
}
/**
* gimp_color_profile_open_from_data:
* gimp_color_profile_new_from_icc_profile:
* @data: pointer to memory containing an ICC profile
* @length: lenght of the profile in memory, in bytes
* @error: return location for #GError
@ -168,60 +241,82 @@ gimp_color_profile_open_from_file (GFile *file,
*
* Since: 2.10
**/
GimpColorProfile
gimp_color_profile_open_from_data (const guint8 *data,
gsize length,
GError **error)
GimpColorProfile *
gimp_color_profile_new_from_icc_profile (const guint8 *data,
gsize length,
GError **error)
{
GimpColorProfile profile;
cmsHPROFILE lcms_profile;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (length > 0, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
profile = cmsOpenProfileFromMem (data, length);
lcms_profile = cmsOpenProfileFromMem (data, length);
if (! profile)
g_set_error_literal (error, gimp_color_profile_error_quark (), 0,
_("Data does not appear to be an ICC color profile"));
if (lcms_profile)
{
profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL);
profile->priv->lcms_profile = lcms_profile;
profile->priv->data = g_memdup (data, length);
profile->priv->length = length;
}
else
{
g_set_error_literal (error, gimp_color_profile_error_quark (), 0,
_("Data does not appear to be an ICC color profile"));
}
return profile;
}
/**
* gimp_color_profile_dave_to_data:
* @profile: a #GimpColorProfile
* @length: return location for the number of bytes written
* @error: return location for #GError
* gimp_color_profile_new_from_lcms_profile:
* @lcms_profile: an LCMS cmsHPROFILE pointer
* @error: return location for #GError
*
* This function saves @profile to an ICC color profile in newly
* allocated memory. On error, %NULL is returned and @error is set.
* This function creates a GimpColorProfile from a cmsHPROFILE. On
* error, %NULL is returned and @error is set. The passed
* @lcms_profile pointer is not retained by the created
* #GimpColorProfile.
*
* Return value: a pointer to the written IIC profile in memory, or
* %NULL. Free with g_free().
* Return value: the #GimpColorProfile, or %NULL.
*
* Since: 2.10
**/
guint8 *
gimp_color_profile_save_to_data (GimpColorProfile profile,
gsize *length,
GError **error)
GimpColorProfile *
gimp_color_profile_new_from_lcms_profile (gpointer lcms_profile,
GError **error)
{
cmsUInt32Number size;
g_return_val_if_fail (profile != NULL, NULL);
g_return_val_if_fail (length != NULL, NULL);
g_return_val_if_fail (lcms_profile != NULL, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
if (cmsSaveProfileToMem (profile, NULL, &size))
if (cmsSaveProfileToMem (lcms_profile, NULL, &size))
{
guint8 *data = g_malloc (size);
if (cmsSaveProfileToMem (profile, data, &size))
if (cmsSaveProfileToMem (lcms_profile, data, &size))
{
*length = size;
gsize length = size;
return data;
lcms_profile = cmsOpenProfileFromMem (data, length);
if (lcms_profile)
{
GimpColorProfile *profile;
profile = g_object_new (GIMP_TYPE_COLOR_PROFILE, NULL);
profile->priv->lcms_profile = lcms_profile;
profile->priv->data = data;
profile->priv->length = length;
return profile;
}
}
g_free (data);
@ -234,37 +329,65 @@ gimp_color_profile_save_to_data (GimpColorProfile profile,
}
/**
* gimp_color_profile_close:
* gimp_color_profile_get_icc_profile:
* @profile: a #GimpColorProfile
* @length: return location for the number of bytes
* @error: return location for #GError
*
* This function closes a #GimpColorProfile and frees its memory.
* This function returns @profile as ICC profile data. The returned
* memory belongs to @profile and must not be modified or freed.
*
* Return value: a pointer to the IIC profile data.
*
* Since: 2.10
**/
void
gimp_color_profile_close (GimpColorProfile profile)
const guint8 *
gimp_color_profile_get_icc_profile (GimpColorProfile *profile,
gsize *length)
{
g_return_if_fail (profile != NULL);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
g_return_val_if_fail (length != NULL, NULL);
cmsCloseProfile (profile);
*length = profile->priv->length;
return profile->priv->data;
}
/**
* gimp_color_profile_get_lcms_profile:
* @profile: a #GimpColorProfile
*
* This function returns @profile's cmsHPROFILE. The returned
* value belongs to @profile and must not be modified or freed.
*
* Return value: a pointer to the cmsHPROFILE.
*
* Since: 2.10
**/
gpointer
gimp_color_profile_get_lcms_profile (GimpColorProfile *profile)
{
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
return profile->priv->lcms_profile;
}
static gchar *
gimp_color_profile_get_info (GimpColorProfile profile,
cmsInfoType info)
gimp_color_profile_get_info (GimpColorProfile *profile,
cmsInfoType info)
{
cmsUInt32Number size;
gchar *text = NULL;
g_return_val_if_fail (profile != NULL, NULL);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
size = cmsGetProfileInfoASCII (profile, info,
size = cmsGetProfileInfoASCII (profile->priv->lcms_profile, info,
"en", "US", NULL, 0);
if (size > 0)
{
gchar *data = g_new (gchar, size + 1);
size = cmsGetProfileInfoASCII (profile, info,
size = cmsGetProfileInfoASCII (profile->priv->lcms_profile, info,
"en", "US", data, size);
if (size > 0)
text = gimp_any_to_utf8 (data, -1, NULL);
@ -285,7 +408,7 @@ gimp_color_profile_get_info (GimpColorProfile profile,
* Since: 2.10
**/
gchar *
gimp_color_profile_get_description (GimpColorProfile profile)
gimp_color_profile_get_description (GimpColorProfile *profile)
{
return gimp_color_profile_get_info (profile, cmsInfoDescription);
}
@ -300,7 +423,7 @@ gimp_color_profile_get_description (GimpColorProfile profile)
* Since: 2.10
**/
gchar *
gimp_color_profile_get_manufacturer (GimpColorProfile profile)
gimp_color_profile_get_manufacturer (GimpColorProfile *profile)
{
return gimp_color_profile_get_info (profile, cmsInfoManufacturer);
}
@ -315,7 +438,7 @@ gimp_color_profile_get_manufacturer (GimpColorProfile profile)
* Since: 2.10
**/
gchar *
gimp_color_profile_get_model (GimpColorProfile profile)
gimp_color_profile_get_model (GimpColorProfile *profile)
{
return gimp_color_profile_get_info (profile, cmsInfoModel);
}
@ -330,7 +453,7 @@ gimp_color_profile_get_model (GimpColorProfile profile)
* Since: 2.10
**/
gchar *
gimp_color_profile_get_copyright (GimpColorProfile profile)
gimp_color_profile_get_copyright (GimpColorProfile *profile)
{
return gimp_color_profile_get_info (profile, cmsInfoCopyright);
}
@ -348,11 +471,11 @@ gimp_color_profile_get_copyright (GimpColorProfile profile)
* Since: 2.10
**/
gchar *
gimp_color_profile_get_label (GimpColorProfile profile)
gimp_color_profile_get_label (GimpColorProfile *profile)
{
gchar *label;
g_return_val_if_fail (profile != NULL, NULL);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
label = gimp_color_profile_get_description (profile);
@ -391,12 +514,12 @@ gimp_color_profile_get_label (GimpColorProfile profile)
* Since: 2.10
**/
gchar *
gimp_color_profile_get_summary (GimpColorProfile profile)
gimp_color_profile_get_summary (GimpColorProfile *profile)
{
GString *string;
gchar *text;
g_return_val_if_fail (profile != NULL, NULL);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
string = g_string_new (NULL);
@ -414,6 +537,7 @@ gimp_color_profile_get_summary (GimpColorProfile profile)
g_string_append (string, "\n");
g_string_append (string, text);
g_free (text);
}
text = gimp_color_profile_get_manufacturer (profile);
@ -423,6 +547,7 @@ gimp_color_profile_get_summary (GimpColorProfile profile)
g_string_append (string, "\n");
g_string_append (string, text);
g_free (text);
}
text = gimp_color_profile_get_copyright (profile);
@ -432,6 +557,7 @@ gimp_color_profile_get_summary (GimpColorProfile profile)
g_string_append (string, "\n");
g_string_append (string, text);
g_free (text);
}
return g_string_free (string, FALSE);
@ -449,23 +575,23 @@ gimp_color_profile_get_summary (GimpColorProfile profile)
* Since: 2.10
**/
gboolean
gimp_color_profile_is_equal (GimpColorProfile profile1,
GimpColorProfile profile2)
gimp_color_profile_is_equal (GimpColorProfile *profile1,
GimpColorProfile *profile2)
{
cmsUInt8Number digest1[GIMP_LCMS_MD5_DIGEST_LENGTH];
cmsUInt8Number digest2[GIMP_LCMS_MD5_DIGEST_LENGTH];
g_return_val_if_fail (profile1 != NULL, FALSE);
g_return_val_if_fail (profile2 != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile1), FALSE);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile1), FALSE);
if (! cmsMD5computeID (profile1) ||
! cmsMD5computeID (profile2))
if (! cmsMD5computeID (profile1->priv->lcms_profile) ||
! cmsMD5computeID (profile2->priv->lcms_profile))
{
return FALSE;
}
cmsGetHeaderProfileID (profile1, digest1);
cmsGetHeaderProfileID (profile2, digest2);
cmsGetHeaderProfileID (profile1->priv->lcms_profile, digest1);
cmsGetHeaderProfileID (profile2->priv->lcms_profile, digest2);
return (memcmp (digest1, digest2, GIMP_LCMS_MD5_DIGEST_LENGTH) == 0);
}
@ -480,11 +606,11 @@ gimp_color_profile_is_equal (GimpColorProfile profile1,
* Since: 2.10
**/
gboolean
gimp_color_profile_is_rgb (GimpColorProfile profile)
gimp_color_profile_is_rgb (GimpColorProfile *profile)
{
g_return_val_if_fail (profile != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), FALSE);
return (cmsGetColorSpace (profile) == cmsSigRgbData);
return (cmsGetColorSpace (profile->priv->lcms_profile) == cmsSigRgbData);
}
/**
@ -497,11 +623,11 @@ gimp_color_profile_is_rgb (GimpColorProfile profile)
* Since: 2.10
**/
gboolean
gimp_color_profile_is_cmyk (GimpColorProfile profile)
gimp_color_profile_is_cmyk (GimpColorProfile *profile)
{
g_return_val_if_fail (profile != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), FALSE);
return (cmsGetColorSpace (profile) == cmsSigCmykData);
return (cmsGetColorSpace (profile->priv->lcms_profile) == cmsSigCmykData);
}
static void
@ -517,10 +643,10 @@ gimp_color_profile_set_tag (cmsHPROFILE profile,
cmsMLUfree (mlu);
}
static GimpColorProfile
static cmsHPROFILE *
gimp_color_profile_new_srgb_internal (void)
{
cmsHPROFILE srgb_profile;
cmsHPROFILE profile;
cmsCIExyY d65_srgb_specs = { 0.3127, 0.3290, 1.0 };
cmsCIExyYTRIPLE srgb_primaries_pre_quantized =
@ -540,19 +666,19 @@ gimp_color_profile_new_srgb_internal (void)
tone_curve[0] = tone_curve[1] = tone_curve[2] = srgb_parametric_curve;
srgb_profile = cmsCreateRGBProfile (&d65_srgb_specs,
&srgb_primaries_pre_quantized,
tone_curve);
profile = cmsCreateRGBProfile (&d65_srgb_specs,
&srgb_primaries_pre_quantized,
tone_curve);
cmsFreeToneCurve (srgb_parametric_curve);
gimp_color_profile_set_tag (srgb_profile, cmsSigProfileDescriptionTag,
gimp_color_profile_set_tag (profile, cmsSigProfileDescriptionTag,
"GIMP built-in sRGB");
gimp_color_profile_set_tag (srgb_profile, cmsSigDeviceMfgDescTag,
gimp_color_profile_set_tag (profile, cmsSigDeviceMfgDescTag,
"GIMP");
gimp_color_profile_set_tag (srgb_profile, cmsSigDeviceModelDescTag,
gimp_color_profile_set_tag (profile, cmsSigDeviceModelDescTag,
"sRGB");
gimp_color_profile_set_tag (srgb_profile, cmsSigCopyrightTag,
gimp_color_profile_set_tag (profile, cmsSigCopyrightTag,
"Public Domain");
/* The following line produces a V2 profile with a point curve TRC.
@ -565,7 +691,7 @@ gimp_color_profile_new_srgb_internal (void)
* cmsSetProfileVersion (srgb_profile, 2.1);
*/
return srgb_profile;
return profile;
}
/**
@ -595,32 +721,33 @@ gimp_color_profile_new_srgb_internal (void)
* ArgyllCMS sRGB.icm profile. The resulting sRGB profile's colorants
* exactly matches the ArgyllCMS sRGB.icm profile colorants.
*
* Return value: the sRGB cmsHPROFILE.
* Return value: the sRGB #GimpColorProfile.
*
* Since: 2.10
**/
GimpColorProfile
GimpColorProfile *
gimp_color_profile_new_srgb (void)
{
static guint8 *profile_data = NULL;
static gsize profile_length = 0;
static GimpColorProfile *profile = NULL;
if (G_UNLIKELY (profile_data == NULL))
const guint8 *data;
gsize length;
if (G_UNLIKELY (profile == NULL))
{
GimpColorProfile profile;
cmsHPROFILE lcms_profile = gimp_color_profile_new_srgb_internal ();
profile = gimp_color_profile_new_srgb_internal ();
profile = gimp_color_profile_new_from_lcms_profile (lcms_profile, NULL);
profile_data = gimp_color_profile_save_to_data (profile, &profile_length,
NULL);
gimp_color_profile_close (profile);
cmsCloseProfile (lcms_profile);
}
return gimp_color_profile_open_from_data (profile_data, profile_length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
return gimp_color_profile_new_from_icc_profile (data, length, NULL);
}
static GimpColorProfile
static cmsHPROFILE
gimp_color_profile_new_linear_rgb_internal (void)
{
cmsHPROFILE profile;
@ -669,29 +796,30 @@ gimp_color_profile_new_linear_rgb_internal (void)
* This function creates a profile for babl_model("RGB"). Please
* somebody write someting smarter here.
*
* Return value: the linear RGB cmsHPROFILE.
* Return value: the linear RGB #GimpColorProfile.
*
* Since: 2.10
**/
GimpColorProfile
GimpColorProfile *
gimp_color_profile_new_linear_rgb (void)
{
static guint8 *profile_data = NULL;
static gsize profile_length = 0;
static GimpColorProfile *profile = NULL;
if (G_UNLIKELY (profile_data == NULL))
const guint8 *data;
gsize length;
if (G_UNLIKELY (profile == NULL))
{
GimpColorProfile profile;
cmsHPROFILE lcms_profile = gimp_color_profile_new_linear_rgb_internal ();
profile = gimp_color_profile_new_linear_rgb_internal ();
profile = gimp_color_profile_new_from_lcms_profile (lcms_profile, NULL);
profile_data = gimp_color_profile_save_to_data (profile, &profile_length,
NULL);
gimp_color_profile_close (profile);
cmsCloseProfile (lcms_profile);
}
return gimp_color_profile_open_from_data (profile_data, profile_length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
return gimp_color_profile_new_from_icc_profile (data, length, NULL);
}
/**

View File

@ -32,35 +32,70 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
GimpColorProfile gimp_color_profile_open_from_file (GFile *file,
GError **error);
GimpColorProfile gimp_color_profile_open_from_data (const guint8 *data,
gsize length,
GError **error);
guint8 * gimp_color_profile_save_to_data (GimpColorProfile profile,
gsize *length,
GError **error);
void gimp_color_profile_close (GimpColorProfile profile);
#define GIMP_TYPE_COLOR_PROFILE (gimp_color_profile_get_type ())
#define GIMP_COLOR_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_PROFILE, GimpColorProfile))
#define GIMP_COLOR_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_PROFILE, GimpColorProfileClass))
#define GIMP_IS_COLOR_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_PROFILE))
#define GIMP_IS_COLOR_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_PROFILE))
#define GIMP_COLOR_PROFILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_PROFILE, GimpColorProfileClass))
gchar * gimp_color_profile_get_description (GimpColorProfile profile);
gchar * gimp_color_profile_get_manufacturer (GimpColorProfile profile);
gchar * gimp_color_profile_get_model (GimpColorProfile profile);
gchar * gimp_color_profile_get_copyright (GimpColorProfile profile);
gchar * gimp_color_profile_get_label (GimpColorProfile profile);
gchar * gimp_color_profile_get_summary (GimpColorProfile profile);
typedef struct _GimpColorProfileClass GimpColorProfileClass;
typedef struct _GimpColorProfilePrivate GimpColorProfilePrivate;
gboolean gimp_color_profile_is_equal (GimpColorProfile profile1,
GimpColorProfile profile2);
struct _GimpColorProfile
{
GObject parent_instance;
gboolean gimp_color_profile_is_rgb (GimpColorProfile profile);
gboolean gimp_color_profile_is_cmyk (GimpColorProfile profile);
GimpColorProfilePrivate *priv;
};
GimpColorProfile gimp_color_profile_new_srgb (void);
GimpColorProfile gimp_color_profile_new_linear_rgb (void);
struct _GimpColorProfileClass
{
GObjectClass parent_class;
const Babl * gimp_color_profile_get_format (const Babl *format,
guint32 *lcms_format);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
};
GType gimp_color_profile_get_type (void) G_GNUC_CONST;
GimpColorProfile * gimp_color_profile_new_srgb (void);
GimpColorProfile * gimp_color_profile_new_linear_rgb (void);
GimpColorProfile * gimp_color_profile_new_from_file (GFile *file,
GError **error);
GimpColorProfile * gimp_color_profile_new_from_icc_profile (const guint8 *data,
gsize length,
GError **error);
GimpColorProfile * gimp_color_profile_new_from_lcms_profile (gpointer lcms_profile,
GError **error);
const guint8 * gimp_color_profile_get_icc_profile (GimpColorProfile *profile,
gsize *length);
gpointer gimp_color_profile_get_lcms_profile (GimpColorProfile *profile);
gchar * gimp_color_profile_get_description (GimpColorProfile *profile);
gchar * gimp_color_profile_get_manufacturer (GimpColorProfile *profile);
gchar * gimp_color_profile_get_model (GimpColorProfile *profile);
gchar * gimp_color_profile_get_copyright (GimpColorProfile *profile);
gchar * gimp_color_profile_get_label (GimpColorProfile *profile);
gchar * gimp_color_profile_get_summary (GimpColorProfile *profile);
gboolean gimp_color_profile_is_equal (GimpColorProfile *profile1,
GimpColorProfile *profile2);
gboolean gimp_color_profile_is_rgb (GimpColorProfile *profile);
gboolean gimp_color_profile_is_cmyk (GimpColorProfile *profile);
const Babl * gimp_color_profile_get_format (const Babl *format,
guint32 *lcms_format);
G_END_DECLS

View File

@ -29,8 +29,8 @@ G_BEGIN_DECLS
typedef struct _GimpColorManaged GimpColorManaged; /* dummy typedef */
typedef struct _GimpColorProfile GimpColorProfile;
typedef gpointer GimpColorProfile;
typedef gpointer GimpColorTransform;

View File

@ -370,11 +370,11 @@ gimp_color_config_get_property (GObject *object,
}
}
GimpColorProfile
GimpColorProfile *
gimp_color_config_get_rgb_color_profile (GimpColorConfig *config,
GError **error)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@ -383,11 +383,11 @@ gimp_color_config_get_rgb_color_profile (GimpColorConfig *config,
{
GFile *file = g_file_new_for_path (config->rgb_profile);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile && ! gimp_color_profile_is_rgb (profile))
{
gimp_color_profile_close (profile);
g_object_unref (profile);
profile = NULL;
g_set_error (error, GIMP_CONFIG_ERROR, 0,
@ -401,11 +401,11 @@ gimp_color_config_get_rgb_color_profile (GimpColorConfig *config,
return profile;
}
GimpColorProfile
GimpColorProfile *
gimp_color_config_get_cmyk_color_profile (GimpColorConfig *config,
GError **error)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@ -414,11 +414,11 @@ gimp_color_config_get_cmyk_color_profile (GimpColorConfig *config,
{
GFile *file = g_file_new_for_path (config->cmyk_profile);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile && ! gimp_color_profile_is_cmyk (profile))
{
gimp_color_profile_close (profile);
g_object_unref (profile);
profile = NULL;
g_set_error (error, GIMP_CONFIG_ERROR, 0,
@ -432,11 +432,11 @@ gimp_color_config_get_cmyk_color_profile (GimpColorConfig *config,
return profile;
}
GimpColorProfile
GimpColorProfile *
gimp_color_config_get_display_color_profile (GimpColorConfig *config,
GError **error)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@ -445,18 +445,18 @@ gimp_color_config_get_display_color_profile (GimpColorConfig *config,
{
GFile *file = g_file_new_for_path (config->display_profile);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
g_object_unref (file);
}
return profile;
}
GimpColorProfile
GimpColorProfile *
gimp_color_config_get_printer_color_profile (GimpColorConfig *config,
GError **error)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@ -465,7 +465,7 @@ gimp_color_config_get_printer_color_profile (GimpColorConfig *config,
{
GFile *file = g_file_new_for_path (config->printer_profile);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
g_object_unref (file);
}
@ -484,10 +484,10 @@ gimp_color_config_set_rgb_profile (GimpColorConfig *config,
if (filename)
{
GimpColorProfile profile;
GimpColorProfile *profile;
GFile *file = g_file_new_for_path (filename);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile)
{
@ -499,7 +499,7 @@ gimp_color_config_set_rgb_profile (GimpColorConfig *config,
success = FALSE;
}
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
{
@ -525,10 +525,10 @@ gimp_color_config_set_cmyk_profile (GimpColorConfig *config,
if (filename)
{
GimpColorProfile profile;
GimpColorProfile *profile;
GFile *file = g_file_new_for_path (filename);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile)
{
@ -540,7 +540,7 @@ gimp_color_config_set_cmyk_profile (GimpColorConfig *config,
success = FALSE;
}
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
{
@ -566,14 +566,14 @@ gimp_color_config_set_display_profile (GimpColorConfig *config,
if (filename)
{
GimpColorProfile profile;
GimpColorProfile *profile;
GFile *file = g_file_new_for_path (filename);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile)
{
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
{
@ -599,14 +599,14 @@ gimp_color_config_set_printer_profile (GimpColorConfig *config,
if (filename)
{
GimpColorProfile profile;
GimpColorProfile *profile;
GFile *file = g_file_new_for_path (filename);
profile = gimp_color_profile_open_from_file (file, error);
profile = gimp_color_profile_new_from_file (file, error);
if (profile)
{
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
{

View File

@ -77,16 +77,16 @@ struct _GimpColorConfigClass
};
GType gimp_color_config_get_type (void) G_GNUC_CONST;
GType gimp_color_config_get_type (void) G_GNUC_CONST;
GimpColorProfile gimp_color_config_get_rgb_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile gimp_color_config_get_cmyk_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile gimp_color_config_get_display_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile gimp_color_config_get_printer_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile * gimp_color_config_get_rgb_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile * gimp_color_config_get_cmyk_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile * gimp_color_config_get_display_color_profile (GimpColorConfig *config,
GError **error);
GimpColorProfile * gimp_color_config_get_printer_color_profile (GimpColorConfig *config,
GError **error);
#endif /* GIMP_COLOR_CONFIG_H__ */

View File

@ -183,7 +183,7 @@ gimp_color_profile_chooser_dialog_add_shortcut (GimpColorProfileChooserDialog *d
static void
gimp_color_profile_chooser_dialog_update_preview (GimpColorProfileChooserDialog *dialog)
{
GimpColorProfile profile;
GimpColorProfile *profile;
GFile *file;
GError *error = NULL;
@ -198,7 +198,7 @@ gimp_color_profile_chooser_dialog_update_preview (GimpColorProfileChooserDialog
switch (g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL))
{
case G_FILE_TYPE_REGULAR:
profile = gimp_color_profile_open_from_file (file, &error);
profile = gimp_color_profile_new_from_file (file, &error);
if (! profile)
{
@ -210,7 +210,7 @@ gimp_color_profile_chooser_dialog_update_preview (GimpColorProfileChooserDialog
{
gimp_color_profile_view_set_profile (dialog->priv->profile_view,
profile);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
break;

View File

@ -424,11 +424,11 @@ gimp_color_profile_combo_box_set_active (GimpColorProfileComboBox *combo,
if (filename && ! (label && *label))
{
GFile *file;
GimpColorProfile profile;
GimpColorProfile *profile;
GError *error = NULL;
file = g_file_new_for_path (filename);
profile = gimp_color_profile_open_from_file (file, &error);
profile = gimp_color_profile_new_from_file (file, &error);
g_object_unref (file);
if (! profile)
@ -439,7 +439,7 @@ gimp_color_profile_combo_box_set_active (GimpColorProfileComboBox *combo,
else
{
l = gimp_color_profile_get_label (profile);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
}
else

View File

@ -34,11 +34,12 @@
struct _GimpColorProfileViewPrivate
{
GimpColorProfile profile;
GimpColorProfile *profile;
};
static void gimp_color_profile_view_constructed (GObject *object);
static void gimp_color_profile_view_finalize (GObject *object);
G_DEFINE_TYPE (GimpColorProfileView, gimp_color_profile_view,
@ -53,6 +54,7 @@ gimp_color_profile_view_class_init (GimpColorProfileViewClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = gimp_color_profile_view_constructed;
object_class->finalize = gimp_color_profile_view_finalize;
g_type_class_add_private (klass, sizeof (GimpColorProfileViewPrivate));
}
@ -90,6 +92,20 @@ gimp_color_profile_view_constructed (GObject *object)
gtk_text_view_set_right_margin (GTK_TEXT_VIEW (object), 6);
}
static void
gimp_color_profile_view_finalize (GObject *object)
{
GimpColorProfileView *view = GIMP_COLOR_PROFILE_VIEW (object);
if (view->priv->profile)
{
g_object_unref (view->priv->profile);
view->priv->profile = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GtkWidget *
gimp_color_profile_view_new (void)
{
@ -98,42 +114,52 @@ gimp_color_profile_view_new (void)
void
gimp_color_profile_view_set_profile (GimpColorProfileView *view,
GimpColorProfile profile)
GimpColorProfile *profile)
{
GtkTextBuffer *buffer;
GtkTextIter iter;
gchar *label;
gchar *summary;
g_return_if_fail (GIMP_IS_COLOR_PROFILE_VIEW (view));
g_return_if_fail (profile == NULL || GIMP_IS_COLOR_PROFILE (profile));
if (profile == view->priv->profile)
return;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_set_text (buffer, "", 0);
if (view->priv->profile)
g_object_unref (view->priv->profile);
view->priv->profile = profile;
if (! profile)
return;
gtk_text_buffer_get_start_iter (buffer, &iter);
label = gimp_color_profile_get_label (profile);
summary = gimp_color_profile_get_summary (profile);
if (label && strlen (label))
if (view->priv->profile)
{
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
label, -1,
"strong", NULL);
gtk_text_buffer_insert (buffer, &iter, "\n", 1);
GtkTextIter iter;
gchar *label;
gchar *summary;
g_object_ref (view->priv->profile);
gtk_text_buffer_get_start_iter (buffer, &iter);
label = gimp_color_profile_get_label (profile);
summary = gimp_color_profile_get_summary (profile);
if (label && strlen (label))
{
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
label, -1,
"strong", NULL);
gtk_text_buffer_insert (buffer, &iter, "\n", 1);
}
if (summary)
gtk_text_buffer_insert (buffer, &iter, summary, -1);
g_free (label);
g_free (summary);
}
if (summary)
gtk_text_buffer_insert (buffer, &iter, summary, -1);
g_free (label);
g_free (summary);
}
void

View File

@ -59,7 +59,7 @@ GType gimp_color_profile_view_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_color_profile_view_new (void);
void gimp_color_profile_view_set_profile (GimpColorProfileView *view,
GimpColorProfile profile);
GimpColorProfile *profile);
void gimp_color_profile_view_set_error (GimpColorProfileView *view,
const gchar *message);

View File

@ -352,10 +352,10 @@ gimp_get_monitor_at_pointer (GdkScreen **screen)
return gdk_screen_get_monitor_at_point (*screen, x, y);
}
GimpColorProfile
GimpColorProfile *
gimp_widget_get_color_profile (GtkWidget *widget)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
GdkScreen *screen;
gint monitor;
@ -391,7 +391,8 @@ gimp_widget_get_color_profile (GtkWidget *widget)
0, 64 * 1024 * 1024, FALSE,
&type, &format, &nitems, &data) && nitems > 0)
{
profile = gimp_color_profile_open_from_data (data, nitems, NULL);
profile = gimp_color_profile_new_from_icc_profile (data, nitems,
NULL);
g_free (data);
}
@ -421,9 +422,9 @@ gimp_widget_get_color_profile (GtkWidget *widget)
CFDataGetBytes (data, CFRangeMake (0, CFDataGetLength (data)),
buffer);
profile = gimp_color_profile_open_from_data (data,
CFDataGetLength (data),
NULL);
profile = gimp_color_profile_new_from_icc_profile (data,
CFDataGetLength (data),
NULL);
g_free (buffer);
CFRelease (data);
@ -446,7 +447,7 @@ gimp_widget_get_color_profile (GtkWidget *widget)
{
GFile *file = g_file_new_for_path (path);
profile = gimp_color_profile_open_from_file (file, NULL);
profile = gimp_color_profile_new_from_file (file, NULL);
g_object_unref (file);
}
@ -459,11 +460,11 @@ gimp_widget_get_color_profile (GtkWidget *widget)
return profile;
}
static GimpColorProfile
static GimpColorProfile *
get_display_profile (GtkWidget *widget,
GimpColorConfig *config)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
if (config->display_profile_from_gdk)
profile = gimp_widget_get_color_profile (widget);
@ -484,13 +485,15 @@ gimp_widget_get_color_transform (GtkWidget *widget,
const Babl **src_format,
const Babl **dest_format)
{
GimpColorTransform transform = NULL;
GimpColorProfile src_profile = NULL;
GimpColorProfile dest_profile = NULL;
GimpColorProfile proof_profile = NULL;
cmsUInt32Number lcms_src_format;
cmsUInt32Number lcms_dest_format;
cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0, };
GimpColorTransform transform = NULL;
GimpColorProfile *src_profile = NULL;
GimpColorProfile *dest_profile = NULL;
GimpColorProfile *proof_profile = NULL;
cmsHPROFILE src_lcms;
cmsHPROFILE dest_lcms;
cmsUInt32Number lcms_src_format;
cmsUInt32Number lcms_dest_format;
cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0, };
g_return_val_if_fail (widget == NULL || GTK_IS_WIDGET (widget), NULL);
g_return_val_if_fail (GIMP_IS_COLOR_MANAGED (managed), NULL);
@ -513,13 +516,19 @@ gimp_widget_get_color_transform (GtkWidget *widget,
break;
}
src_lcms = gimp_color_profile_get_lcms_profile (src_profile);
dest_lcms = gimp_color_profile_get_lcms_profile (dest_profile);
*src_format = gimp_color_profile_get_format (*src_format, &lcms_src_format);
*dest_format = gimp_color_profile_get_format (*dest_format, &lcms_dest_format);
if (proof_profile)
{
cmsHPROFILE proof_lcms;
cmsUInt32Number softproof_flags = cmsFLAGS_SOFTPROOFING;
proof_lcms = gimp_color_profile_get_lcms_profile (proof_profile);
if (config->simulation_use_black_point_compensation)
{
softproof_flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
@ -540,14 +549,14 @@ gimp_widget_get_color_transform (GtkWidget *widget,
cmsSetAlarmCodes (alarmCodes);
}
transform = cmsCreateProofingTransform (src_profile, lcms_src_format,
dest_profile, lcms_dest_format,
proof_profile,
transform = cmsCreateProofingTransform (src_lcms, lcms_src_format,
dest_lcms, lcms_dest_format,
proof_lcms,
config->simulation_intent,
config->display_intent,
softproof_flags);
gimp_color_profile_close (proof_profile);
g_object_unref (proof_profile);
}
else if (! gimp_color_profile_is_equal (src_profile, dest_profile))
{
@ -558,14 +567,14 @@ gimp_widget_get_color_transform (GtkWidget *widget,
display_flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
}
transform = cmsCreateTransform (src_profile, lcms_src_format,
dest_profile, lcms_dest_format,
transform = cmsCreateTransform (src_lcms, lcms_src_format,
dest_lcms, lcms_dest_format,
config->display_intent,
display_flags);
}
gimp_color_profile_close (src_profile);
gimp_color_profile_close (dest_profile);
g_object_unref (src_profile);
g_object_unref (dest_profile);
return transform;
}

View File

@ -30,29 +30,29 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
GtkWidget * gimp_table_attach_aligned (GtkTable *table,
gint column,
gint row,
const gchar *label_text,
gfloat xalign,
gfloat yalign,
GtkWidget *widget,
gint colspan,
gboolean left_align);
GtkWidget * gimp_table_attach_aligned (GtkTable *table,
gint column,
gint row,
const gchar *label_text,
gfloat xalign,
gfloat yalign,
GtkWidget *widget,
gint colspan,
gboolean left_align);
void gimp_label_set_attributes (GtkLabel *label,
...);
void gimp_label_set_attributes (GtkLabel *label,
...);
gint gimp_widget_get_monitor (GtkWidget *widget);
gint gimp_get_monitor_at_pointer (GdkScreen **screen);
gint gimp_widget_get_monitor (GtkWidget *widget);
gint gimp_get_monitor_at_pointer (GdkScreen **screen);
GimpColorProfile gimp_widget_get_color_profile (GtkWidget *widget);
GimpColorProfile * gimp_widget_get_color_profile (GtkWidget *widget);
GimpColorTransform gimp_widget_get_color_transform (GtkWidget *widget,
GimpColorManaged *managed,
GimpColorConfig *config,
const Babl **src_format,
const Babl **dest_format);
GimpColorTransform gimp_widget_get_color_transform (GtkWidget *widget,
GimpColorManaged *managed,
GimpColorConfig *config,
const Babl **src_format,
const Babl **dest_format);
G_END_DECLS

View File

@ -353,8 +353,10 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
GimpColorSelector *selector = GIMP_COLOR_SELECTOR (module);
GimpColorConfig *config = module->config;
cmsUInt32Number flags = 0;
GimpColorProfile rgb_profile = NULL;
GimpColorProfile cmyk_profile = NULL;
GimpColorProfile *rgb_profile = NULL;
GimpColorProfile *cmyk_profile = NULL;
cmsHPROFILE rgb_lcms;
cmsHPROFILE cmyk_lcms;
gchar *label;
gchar *summary;
gchar *text;
@ -397,28 +399,31 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
g_free (label);
g_free (summary);
rgb_lcms = gimp_color_profile_get_lcms_profile (rgb_profile);
cmyk_lcms = gimp_color_profile_get_lcms_profile (cmyk_profile);
if (config->display_intent ==
GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC)
{
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
}
module->rgb2cmyk = cmsCreateTransform (rgb_profile, TYPE_RGB_DBL,
cmyk_profile, TYPE_CMYK_DBL,
module->rgb2cmyk = cmsCreateTransform (rgb_lcms, TYPE_RGB_DBL,
cmyk_lcms, TYPE_CMYK_DBL,
config->display_intent,
flags);
module->cmyk2rgb = cmsCreateTransform (cmyk_profile, TYPE_CMYK_DBL,
rgb_profile, TYPE_RGB_DBL,
module->cmyk2rgb = cmsCreateTransform (cmyk_lcms, TYPE_CMYK_DBL,
rgb_lcms, TYPE_RGB_DBL,
config->display_intent,
flags);
out:
if (rgb_profile)
gimp_color_profile_close (rgb_profile);
g_object_unref (rgb_profile);
if (cmyk_profile)
gimp_color_profile_close (cmyk_profile);
g_object_unref (cmyk_profile);
if (! module->in_destruction)
colorsel_cmyk_set_color (selector, &selector->rgb, &selector->hsv);

View File

@ -73,27 +73,27 @@ struct _CdisplayLcmsClass
};
GType cdisplay_lcms_get_type (void);
GType cdisplay_lcms_get_type (void);
static void cdisplay_lcms_finalize (GObject *object);
static void cdisplay_lcms_finalize (GObject *object);
static GtkWidget * cdisplay_lcms_configure (GimpColorDisplay *display);
static void cdisplay_lcms_convert_buffer (GimpColorDisplay *display,
GeglBuffer *buffer,
GeglRectangle *area);
static void cdisplay_lcms_changed (GimpColorDisplay *display);
static GtkWidget * cdisplay_lcms_configure (GimpColorDisplay *display);
static void cdisplay_lcms_convert_buffer (GimpColorDisplay *display,
GeglBuffer *buffer,
GeglRectangle *area);
static void cdisplay_lcms_changed (GimpColorDisplay *display);
static GimpColorProfile cdisplay_lcms_get_display_profile (CdisplayLcms *lcms);
static GimpColorProfile * cdisplay_lcms_get_display_profile (CdisplayLcms *lcms);
static void cdisplay_lcms_attach_labelled (GtkTable *table,
gint row,
const gchar *text,
GtkWidget *widget);
static void cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
const gchar *name);
static void cdisplay_lcms_notify_profile (GObject *config,
GParamSpec *pspec,
CdisplayLcms *lcms);
static void cdisplay_lcms_attach_labelled (GtkTable *table,
gint row,
const gchar *text,
GtkWidget *widget);
static void cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
const gchar *name);
static void cdisplay_lcms_notify_profile (GObject *config,
GParamSpec *pspec,
CdisplayLcms *lcms);
static const GimpModuleInfo cdisplay_lcms_info =
@ -284,13 +284,13 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
&lcms->dest_format);
}
static GimpColorProfile
static GimpColorProfile *
cdisplay_lcms_get_display_profile (CdisplayLcms *lcms)
{
GimpColorConfig *config;
GimpColorManaged *managed;
GtkWidget *widget = NULL;
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
config = gimp_color_display_get_config (GIMP_COLOR_DISPLAY (lcms));
managed = gimp_color_display_get_managed (GIMP_COLOR_DISPLAY (lcms));
@ -342,7 +342,7 @@ cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
GimpColorConfig *config;
GimpColorManaged *managed;
GtkWidget *label;
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
gchar *text;
gchar *tooltip;
@ -389,7 +389,7 @@ cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
g_free (tooltip);
if (profile)
gimp_color_profile_close (profile);
g_object_unref (profile);
}
static void

View File

@ -323,8 +323,8 @@ static void
cdisplay_proof_changed (GimpColorDisplay *display)
{
CdisplayProof *proof = CDISPLAY_PROOF (display);
GimpColorProfile rgb_profile;
GimpColorProfile proof_profile;
GimpColorProfile *rgb_profile;
GimpColorProfile *proof_profile;
GFile *file;
if (proof->transform)
@ -339,25 +339,30 @@ cdisplay_proof_changed (GimpColorDisplay *display)
rgb_profile = gimp_color_profile_new_srgb ();
file = g_file_new_for_path (proof->profile);
proof_profile = gimp_color_profile_open_from_file (file, NULL);
proof_profile = gimp_color_profile_new_from_file (file, NULL);
g_object_unref (file);
if (proof_profile)
{
cmsHPROFILE rgb_lcms;
cmsHPROFILE proof_lcms;
cmsUInt32Number flags = cmsFLAGS_SOFTPROOFING;
rgb_lcms = gimp_color_profile_get_lcms_profile (rgb_profile);
proof_lcms = gimp_color_profile_get_lcms_profile (proof_profile);
if (proof->bpc)
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
proof->transform = cmsCreateProofingTransform (rgb_profile, TYPE_RGBA_FLT,
rgb_profile, TYPE_RGBA_FLT,
proof_profile,
proof->transform = cmsCreateProofingTransform (rgb_lcms, TYPE_RGBA_FLT,
rgb_lcms, TYPE_RGBA_FLT,
proof_lcms,
proof->intent,
proof->intent,
flags);
gimp_color_profile_close (proof_profile);
g_object_unref (proof_profile);
}
gimp_color_profile_close (rgb_profile);
g_object_unref (rgb_profile);
}

View File

@ -143,7 +143,6 @@ libexec_PROGRAMS = \
web-browser \
$(WEB_PAGE)
EXTRA_PROGRAMS = \
file-aa \
file-jp2-load \
@ -1432,8 +1431,6 @@ jigsaw_LDADD = \
$(INTLLIBS) \
$(jigsaw_RC)
lcms_CFLAGS = $(LCMS_CFLAGS)
lcms_SOURCES = \
lcms.c
@ -1448,7 +1445,6 @@ lcms_LDADD = \
$(libgimpbase) \
$(GTK_LIBS) \
$(GEGL_LIBS) \
$(LCMS_LIBS) \
$(RT_LIBS) \
$(INTLLIBS) \
$(lcms_RC)

View File

@ -22,8 +22,6 @@
#include <string.h>
#include <lcms2.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
@ -69,29 +67,29 @@ static void run (const gchar *name,
gint *nreturn_vals,
GimpParam **return_vals);
static GimpPDBStatusType lcms_icc_set (GimpColorConfig *config,
gint32 image,
GFile *file);
static GimpPDBStatusType lcms_icc_apply (GimpColorConfig *config,
GimpRunMode run_mode,
gint32 image,
GFile *file,
static GimpPDBStatusType lcms_icc_set (GimpColorConfig *config,
gint32 image,
GFile *file);
static GimpPDBStatusType lcms_icc_apply (GimpColorConfig *config,
GimpRunMode run_mode,
gint32 image,
GFile *file,
GimpColorRenderingIntent intent,
gboolean bpc,
gboolean bpc,
gboolean *dont_ask);
static gboolean lcms_image_set_profile (gint32 image,
GFile *file);
static gboolean lcms_icc_apply_dialog (gint32 image,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
gboolean *dont_ask);
static gboolean lcms_image_set_profile (gint32 image,
GFile *file);
static gboolean lcms_icc_apply_dialog (gint32 image,
cmsHPROFILE src_profile,
cmsHPROFILE dest_profile,
gboolean *dont_ask);
static GimpPDBStatusType lcms_dialog (GimpColorConfig *config,
gint32 image,
gboolean apply,
LcmsValues *values);
static GimpPDBStatusType lcms_dialog (GimpColorConfig *config,
gint32 image,
gboolean apply,
LcmsValues *values);
static const GimpParamDef set_args[] =
@ -384,9 +382,9 @@ lcms_icc_apply (GimpColorConfig *config,
gboolean bpc,
gboolean *dont_ask)
{
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
GimpColorProfile src_profile = NULL;
GimpColorProfile dest_profile = NULL;
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
GimpColorProfile *src_profile = NULL;
GimpColorProfile *dest_profile = NULL;
g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), GIMP_PDB_CALLING_ERROR);
g_return_val_if_fail (image != -1, GIMP_PDB_CALLING_ERROR);
@ -400,7 +398,7 @@ lcms_icc_apply (GimpColorConfig *config,
{
GError *error = NULL;
dest_profile = gimp_color_profile_open_from_file (file, &error);
dest_profile = gimp_color_profile_new_from_file (file, &error);
if (! dest_profile)
{
@ -415,7 +413,7 @@ lcms_icc_apply (GimpColorConfig *config,
g_message (_("Color profile '%s' is not for RGB color space."),
gimp_file_get_utf8_name (file));
gimp_color_profile_close (dest_profile);
g_object_unref (dest_profile);
g_object_unref (file);
return GIMP_PDB_EXECUTION_ERROR;
}
@ -431,8 +429,8 @@ lcms_icc_apply (GimpColorConfig *config,
gchar *src_label = gimp_color_profile_get_label (src_profile);
gchar *dest_label = gimp_color_profile_get_label (dest_profile);
gimp_color_profile_close (src_profile);
gimp_color_profile_close (dest_profile);
g_object_unref (src_profile);
g_object_unref (dest_profile);
g_printerr ("lcms: skipping conversion because profiles seem to be equal:\n");
g_printerr (" %s\n", src_label);
@ -459,8 +457,8 @@ lcms_icc_apply (GimpColorConfig *config,
status = GIMP_PDB_EXECUTION_ERROR;
}
gimp_color_profile_close (src_profile);
gimp_color_profile_close (dest_profile);
g_object_unref (src_profile);
g_object_unref (dest_profile);
if (file)
g_object_unref (file);
@ -472,7 +470,7 @@ static gboolean
lcms_image_set_profile (gint32 image,
GFile *file)
{
GimpColorProfile profile = NULL;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (image != -1, FALSE);
@ -480,7 +478,7 @@ lcms_image_set_profile (gint32 image,
{
GError *error = NULL;
profile = gimp_color_profile_open_from_file (file, &error);
profile = gimp_color_profile_new_from_file (file, &error);
if (! profile)
{
@ -499,14 +497,14 @@ lcms_image_set_profile (gint32 image,
gimp_image_undo_group_end (image);
if (profile)
gimp_color_profile_close (profile);
g_object_unref (profile);
return TRUE;
}
static GtkWidget *
lcms_icc_profile_src_label_new (gint32 image,
cmsHPROFILE profile)
lcms_icc_profile_src_label_new (gint32 image,
GimpColorProfile *profile)
{
GtkWidget *vbox;
GtkWidget *label;
@ -553,7 +551,7 @@ lcms_icc_profile_src_label_new (gint32 image,
}
static GtkWidget *
lcms_icc_profile_dest_label_new (cmsHPROFILE profile)
lcms_icc_profile_dest_label_new (GimpColorProfile *profile)
{
GtkWidget *label;
gchar *name;
@ -577,10 +575,10 @@ lcms_icc_profile_dest_label_new (cmsHPROFILE profile)
}
static gboolean
lcms_icc_apply_dialog (gint32 image,
cmsHPROFILE src_profile,
cmsHPROFILE dest_profile,
gboolean *dont_ask)
lcms_icc_apply_dialog (gint32 image,
GimpColorProfile *src_profile,
GimpColorProfile *dest_profile,
gboolean *dont_ask)
{
GtkWidget *dialog;
GtkWidget *vbox;
@ -651,14 +649,14 @@ static GtkWidget *
lcms_icc_combo_box_new (GimpColorConfig *config,
const gchar *filename)
{
GtkWidget *combo;
GtkWidget *dialog;
gchar *history;
gchar *label;
gchar *name;
const gchar *rgb_filename = NULL;
cmsHPROFILE profile = NULL;
GError *error = NULL;
GtkWidget *combo;
GtkWidget *dialog;
gchar *history;
gchar *label;
gchar *name;
const gchar *rgb_filename = NULL;
GimpColorProfile *profile = NULL;
GError *error = NULL;
dialog = gimp_color_profile_chooser_dialog_new (_("Select destination profile"));
@ -685,7 +683,7 @@ lcms_icc_combo_box_new (GimpColorConfig *config,
label = g_strdup_printf (_("RGB workspace (%s)"), name);
g_free (name);
gimp_color_profile_close (profile);
g_object_unref (profile);
gimp_color_profile_combo_box_add (GIMP_COLOR_PROFILE_COMBO_BOX (combo),
rgb_filename, label);
@ -709,7 +707,7 @@ lcms_dialog (GimpColorConfig *config,
GtkWidget *frame;
GtkWidget *label;
GtkWidget *combo;
GimpColorProfile src_profile;
GimpColorProfile *src_profile;
gchar *name;
gboolean success = FALSE;
gboolean run;
@ -813,7 +811,7 @@ lcms_dialog (GimpColorConfig *config,
{
gchar *filename = gimp_color_profile_combo_box_get_active (box);
GFile *file = NULL;
GimpColorProfile dest_profile;
GimpColorProfile *dest_profile;
gtk_widget_set_sensitive (dialog, FALSE);
@ -827,7 +825,7 @@ lcms_dialog (GimpColorConfig *config,
{
GError *error = NULL;
dest_profile = gimp_color_profile_open_from_file (file, &error);
dest_profile = gimp_color_profile_new_from_file (file, &error);
if (! dest_profile)
{
@ -857,7 +855,7 @@ lcms_dialog (GimpColorConfig *config,
g_message (_("Destination profile is not for RGB color space."));
}
gimp_color_profile_close (dest_profile);
g_object_unref (dest_profile);
}
if (file)
@ -871,7 +869,7 @@ lcms_dialog (GimpColorConfig *config,
gtk_widget_destroy (dialog);
gimp_color_profile_close (src_profile);
g_object_unref (src_profile);
return (run ?
(success ? GIMP_PDB_SUCCESS : GIMP_PDB_EXECUTION_ERROR) :

View File

@ -70,7 +70,7 @@
'guillotine' => {},
'hot' => { ui => 1 },
'jigsaw' => { ui => 1 },
'lcms' => { ui => 1, gegl => 1, libs => 'LCMS_LIBS', cflags => 'LCMS_CFLAGS' },
'lcms' => { ui => 1, gegl => 1 },
'mail' => { ui => 1, optional => 1 },
'max-rgb' => { ui => 1 },
'metadata' => { ui => 1, libs => 'GEXIV2_LIBS', cflags => 'GEXIV2_CFLAGS' },

View File

@ -596,21 +596,23 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
gsize profile_len)
{
GimpColorConfig *config = gimp_get_color_configuration ();
GimpColorProfile cmyk_profile = NULL;
GimpColorProfile rgb_profile = NULL;
GimpColorProfile *cmyk_profile = NULL;
GimpColorProfile *rgb_profile = NULL;
cmsHPROFILE cmyk_lcms;
cmsHPROFILE rgb_lcms;
cmsUInt32Number flags = 0;
cmsHTRANSFORM transform;
/* try to load the embedded CMYK profile */
if (profile_data)
{
cmyk_profile = gimp_color_profile_open_from_data (profile_data,
profile_len,
NULL);
cmyk_profile = gimp_color_profile_new_from_icc_profile (profile_data,
profile_len,
NULL);
if (cmyk_profile && ! gimp_color_profile_is_cmyk (cmyk_profile))
{
gimp_color_profile_close (cmyk_profile);
g_object_unref (cmyk_profile);
cmyk_profile = NULL;
}
}
@ -633,19 +635,22 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
if (! rgb_profile)
rgb_profile = gimp_color_profile_new_srgb ();
cmyk_lcms = gimp_color_profile_get_lcms_profile (cmyk_profile);
rgb_lcms = gimp_color_profile_get_lcms_profile (rgb_profile);
if (config->display_intent ==
GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC)
{
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
}
transform = cmsCreateTransform (cmyk_profile, TYPE_CMYK_8_REV,
rgb_profile, TYPE_RGB_8,
transform = cmsCreateTransform (cmyk_lcms, TYPE_CMYK_8_REV,
rgb_lcms, TYPE_RGB_8,
config->display_intent,
flags);
gimp_color_profile_close (cmyk_profile);
gimp_color_profile_close (rgb_profile);
g_object_unref (cmyk_profile);
g_object_unref (rgb_profile);
g_object_unref (config);

View File

@ -41,18 +41,21 @@ HELP
%invoke = (
code => <<'CODE'
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_image_get_color_profile (image);
if (profile)
{
gsize length;
const guint8 *data;
gsize length;
profile_data = gimp_color_profile_save_to_data (profile, &length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
profile_data = g_memdup (data, length);
num_bytes = length;
gimp_color_profile_close (profile);
g_object_unref (profile);
}
}
CODE
@ -83,15 +86,16 @@ HELP
{
if (color_profile)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (color_profile, num_bytes,
error);
profile = gimp_color_profile_new_from_icc_profile (color_profile,
num_bytes,
error);
if (profile)
{
success = gimp_image_set_color_profile (image, profile, error);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
else
success = FALSE;
@ -134,15 +138,18 @@ HELP
%invoke = (
code => <<'CODE'
{
GimpColorProfile profile;
gsize length;
GimpColorProfile *profile;
const guint8 *data;
gsize length;
profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
profile_data = gimp_color_profile_save_to_data (profile, &length, NULL);
data = gimp_color_profile_get_icc_profile (profile, &length);
profile_data = g_memdup (data, length);
num_bytes = length;
gimp_color_profile_close (profile);
g_object_unref (profile);
}
CODE
);
@ -177,16 +184,18 @@ HELP
{
if (color_profile)
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_profile_open_from_data (color_profile, num_bytes,
error);
profile = gimp_color_profile_new_from_icc_profile (color_profile,
num_bytes,
error);
if (profile)
{
success = gimp_image_convert_color_profile (image, profile,
intent, bpc,
progress, error);
g_object_unref (profile);
}
else
success = FALSE;

View File

@ -1780,7 +1780,7 @@ HELP
%invoke = (
code => <<'CODE'
{
GimpColorProfile profile;
GimpColorProfile *profile;
profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
@ -1788,7 +1788,7 @@ HELP
profile_desc = gimp_color_profile_get_description (profile);
profile_info = gimp_color_profile_get_summary (profile);
gimp_color_profile_close (profile);
g_object_unref (profile);
}
CODE
@ -1826,9 +1826,9 @@ HELP
if (file)
{
GimpColorProfile p;
GimpColorProfile *p;
p = gimp_color_profile_open_from_file (file, error);
p = gimp_color_profile_new_from_file (file, error);
g_object_unref (file);
if (p)
@ -1837,7 +1837,7 @@ HELP
profile_desc = gimp_color_profile_get_description (p);
profile_info = gimp_color_profile_get_summary (p);
gimp_color_profile_close (p);
g_object_unref (p);
}
else
success = FALSE;