From 05add456bb67933c2f7e980ffe20e4525c495b39 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 26 Aug 2015 19:16:17 +0200 Subject: [PATCH] app: add _gimp_image_update_color_profile() to update the cached profile and call it when an "icc-profile" parssite is attached or detached. This removes code duplication and creates a place to conveniently update more cached profiles and transforms, such as from/to sRGB for color picking and applying. --- app/core/gimpimage-color-profile.c | 26 ++++++++++++++++++++++++++ app/core/gimpimage-color-profile.h | 24 +++++++++++++++--------- app/core/gimpimage.c | 24 ++---------------------- app/core/gimpimageundo.c | 19 +------------------ 4 files changed, 44 insertions(+), 49 deletions(-) diff --git a/app/core/gimpimage-color-profile.c b/app/core/gimpimage-color-profile.c index de6cb29271..d9fc273ffb 100644 --- a/app/core/gimpimage-color-profile.c +++ b/app/core/gimpimage-color-profile.c @@ -613,3 +613,29 @@ gimp_image_convert_profile_indexed (GimpImage *image, g_free (cmap); } + + +/* internal API */ + +void +_gimp_image_update_color_profile (GimpImage *image, + const GimpParasite *icc_parasite) +{ + GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image); + + if (private->color_profile) + { + g_object_unref (private->color_profile); + private->color_profile = NULL; + } + + if (icc_parasite) + { + private->color_profile = + gimp_color_profile_new_from_icc_profile (gimp_parasite_data (icc_parasite), + gimp_parasite_data_size (icc_parasite), + NULL); + } + + gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (image)); +} diff --git a/app/core/gimpimage-color-profile.h b/app/core/gimpimage-color-profile.h index d525a4207b..1ee41c0837 100644 --- a/app/core/gimpimage-color-profile.h +++ b/app/core/gimpimage-color-profile.h @@ -57,17 +57,23 @@ gboolean gimp_image_set_color_profile (GimpImage *ima GimpColorProfile * gimp_image_get_builtin_color_profile (GimpImage *image); -gboolean gimp_image_convert_color_profile (GimpImage *image, - GimpColorProfile *dest_profile, +gboolean gimp_image_convert_color_profile (GimpImage *image, + GimpColorProfile *dest_profile, GimpColorRenderingIntent intent, - gboolean bpc, - GimpProgress *progress, - GError **error); + gboolean bpc, + GimpProgress *progress, + GError **error); -void gimp_image_import_color_profile (GimpImage *image, - GimpContext *context, - GimpProgress *progress, - gboolean interactive); +void gimp_image_import_color_profile (GimpImage *image, + GimpContext *context, + GimpProgress *progress, + gboolean interactive); + + +/* internal API, to be called only from the icc-profile parasite setters */ + +void _gimp_image_update_color_profile (GimpImage *image, + const GimpParasite *icc_parasite); #endif /* __GIMP_IMAGE_COLOR_PROFILE_H__ */ diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 3287e46379..921bd64039 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -3367,19 +3367,7 @@ gimp_image_parasite_attach (GimpImage *image, gimp_parasite_name (parasite)); if (strcmp (gimp_parasite_name (parasite), GIMP_ICC_PROFILE_PARASITE_NAME) == 0) - { - GimpColorProfile *profile = - gimp_color_profile_new_from_icc_profile (gimp_parasite_data (parasite), - gimp_parasite_data_size (parasite), - NULL); - - if (private->color_profile) - g_object_unref (private->color_profile); - - private->color_profile = profile; - - gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (image)); - } + _gimp_image_update_color_profile (image, parasite); } void @@ -3408,15 +3396,7 @@ gimp_image_parasite_detach (GimpImage *image, name); if (strcmp (name, GIMP_ICC_PROFILE_PARASITE_NAME) == 0) - { - if (private->color_profile) - { - g_object_unref (private->color_profile); - private->color_profile = NULL; - } - - gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (image)); - } + _gimp_image_update_color_profile (image, NULL); } diff --git a/app/core/gimpimageundo.c b/app/core/gimpimageundo.c index 28069902d2..8aeb1b00bd 100644 --- a/app/core/gimpimageundo.c +++ b/app/core/gimpimageundo.c @@ -24,7 +24,6 @@ #include #include "libgimpbase/gimpbase.h" -#include "libgimpcolor/gimpcolor.h" #include "libgimpconfig/gimpconfig.h" #include "core-types.h" @@ -489,23 +488,7 @@ gimp_image_undo_pop (GimpUndo *undo, name = parasite ? parasite->name : image_undo->parasite_name; if (strcmp (name, GIMP_ICC_PROFILE_PARASITE_NAME) == 0) - { - if (private->color_profile) - { - g_object_unref (private->color_profile); - private->color_profile = NULL; - } - - if (parasite) - { - private->color_profile = - gimp_color_profile_new_from_icc_profile (gimp_parasite_data (parasite), - gimp_parasite_data_size (parasite), - NULL); - } - - gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (image)); - } + _gimp_image_update_color_profile (image, parasite); if (parasite) gimp_parasite_free (parasite);