mirror of https://github.com/GNOME/gimp.git
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:
parent
763e459a92
commit
c102dde92b
|
@ -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));
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -29,8 +29,8 @@ G_BEGIN_DECLS
|
|||
|
||||
|
||||
typedef struct _GimpColorManaged GimpColorManaged; /* dummy typedef */
|
||||
typedef struct _GimpColorProfile GimpColorProfile;
|
||||
|
||||
typedef gpointer GimpColorProfile;
|
||||
typedef gpointer GimpColorTransform;
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) :
|
||||
|
|
|
@ -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' },
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue