diff --git a/app/Makefile.am b/app/Makefile.am index f506f08d49..2931f8bb4a 100644 --- a/app/Makefile.am +++ b/app/Makefile.am @@ -179,6 +179,7 @@ gimpconsoleldadd = \ $(GEGL_LIBS) \ $(GLIB_LIBS) \ $(GEXIV2_LIBS) \ + $(LCMS_LIBS) \ $(INTLLIBS) \ $(RT_LIBS) diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index 4027a966b1..ecf5d139e9 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -8,6 +8,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_builddir)/app \ -I$(top_srcdir)/app \ + $(LCMS_CFLAGS) \ $(GEGL_CFLAGS) \ $(GTK_CFLAGS) \ -I$(includedir) diff --git a/app/widgets/gimpimageprofileview.c b/app/widgets/gimpimageprofileview.c index 4747d15420..f8551e689f 100644 --- a/app/widgets/gimpimageprofileview.c +++ b/app/widgets/gimpimageprofileview.c @@ -22,26 +22,30 @@ #include +#include /* lcms.h uses the "inline" keyword */ + +#include + #include #include +#include "libgimpconfig/gimpconfig.h" +#include "libgimpcolor/gimpcolor.h" #include "libgimpbase/gimpbase.h" #include "libgimpwidgets/gimpwidgets.h" #include "widgets-types.h" +#include "config/gimpcoreconfig.h" + #include "core/gimp.h" #include "core/gimpimage.h" -#include "plug-in/plug-in-icc-profile.h" - #include "gimpimageprofileview.h" #include "gimp-intl.h" -static void gimp_image_profile_view_dispose (GObject *object); - static void gimp_image_profile_view_update (GimpImageParasiteView *view); @@ -54,21 +58,18 @@ G_DEFINE_TYPE (GimpImageProfileView, static void gimp_image_profile_view_class_init (GimpImageProfileViewClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpImageParasiteViewClass *view_class; view_class = GIMP_IMAGE_PARASITE_VIEW_CLASS (klass); - object_class->dispose = gimp_image_profile_view_dispose; - - view_class->update = gimp_image_profile_view_update; + view_class->update = gimp_image_profile_view_update; } static void gimp_image_profile_view_init (GimpImageProfileView *view) { GtkWidget *scrolled_window; - GtkWidget *text_view; + GtkWidget *profile_view; scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), @@ -78,43 +79,11 @@ gimp_image_profile_view_init (GimpImageProfileView *view) gtk_box_pack_start (GTK_BOX (view), scrolled_window, TRUE, TRUE, 0); gtk_widget_show (scrolled_window); - text_view = gtk_text_view_new (); + profile_view = gimp_color_profile_view_new (); + gtk_container_add (GTK_CONTAINER (scrolled_window), profile_view); + gtk_widget_show (profile_view); - gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE); - gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD); - - gtk_text_view_set_pixels_above_lines (GTK_TEXT_VIEW (text_view), 6); - gtk_text_view_set_left_margin (GTK_TEXT_VIEW (text_view), 6); - gtk_text_view_set_right_margin (GTK_TEXT_VIEW (text_view), 6); - - gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); - gtk_widget_show (text_view); - - view->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); - - gtk_text_buffer_create_tag (view->buffer, "strong", - "weight", PANGO_WEIGHT_BOLD, - "scale", PANGO_SCALE_LARGE, - NULL); - gtk_text_buffer_create_tag (view->buffer, "emphasis", - "style", PANGO_STYLE_OBLIQUE, - NULL); - - view->idle_id = 0; -} - -static void -gimp_image_profile_view_dispose (GObject *object) -{ - GimpImageProfileView *view = GIMP_IMAGE_PROFILE_VIEW (object); - - if (view->idle_id) - { - g_source_remove (view->idle_id); - view->idle_id = 0; - } - - G_OBJECT_CLASS (parent_class)->dispose (object); + view->profile_view = GIMP_COLOR_PROFILE_VIEW (profile_view); } @@ -134,78 +103,54 @@ gimp_image_profile_view_new (GimpImage *image) /* private functions */ -static gboolean -gimp_image_profile_view_query (GimpImageProfileView *view) -{ - GimpImage *image; - gchar *name = NULL; - gchar *desc = NULL; - gchar *info = NULL; - GError *error = NULL; - GtkTextIter iter; - - gtk_text_buffer_set_text (view->buffer, "", 0); - gtk_text_buffer_get_start_iter (view->buffer, &iter); - - image = gimp_image_parasite_view_get_image (GIMP_IMAGE_PARASITE_VIEW (view)); - - if (plug_in_icc_profile_info (image, - gimp_get_user_context (image->gimp), - NULL, - &name, &desc, &info, - &error)) - { - if ((desc && strlen (desc)) || - (name && strlen (name))) - { - const gchar *title; - - if (desc && strlen (desc)) - title = desc; - else - title = name; - - gtk_text_buffer_insert_with_tags_by_name (view->buffer, &iter, - title, -1, - "strong", NULL); - gtk_text_buffer_insert (view->buffer, &iter, "\n", 1); - } - - if (info) - gtk_text_buffer_insert (view->buffer, &iter, info, -1); - } - else - { - gtk_text_buffer_insert_with_tags_by_name (view->buffer, &iter, - error->message, -1, - "emphasis", NULL); - g_clear_error (&error); - } - - g_free (name); - g_free (desc); - g_free (info); - - view->idle_id = 0; - - return FALSE; -} - static void gimp_image_profile_view_update (GimpImageParasiteView *view) { GimpImageProfileView *profile_view = GIMP_IMAGE_PROFILE_VIEW (view); - GtkTextIter iter; + GimpImage *image; + GimpColorConfig *config; + const GimpParasite *parasite; + GimpColorProfile *profile = NULL; + GError *error = NULL; - gtk_text_buffer_set_text (profile_view->buffer, "", 0); - gtk_text_buffer_get_start_iter (profile_view->buffer, &iter); - gtk_text_buffer_insert_with_tags_by_name (profile_view->buffer, &iter, - _("Querying..."), -1, - "emphasis", NULL); + image = gimp_image_parasite_view_get_image (view); + parasite = gimp_image_parasite_view_get_parasite (view); - if (profile_view->idle_id) - g_source_remove (profile_view->idle_id); + config = image->gimp->config->color_management; - profile_view->idle_id = - g_idle_add ((GSourceFunc) gimp_image_profile_view_query, profile_view); + if (parasite) + { + profile = gimp_lcms_profile_open_from_data (gimp_parasite_data (parasite), + gimp_parasite_data_size (parasite), + NULL, &error); + if (! profile) + { + g_message (_("Error parsing 'icc-profile': %s"), error->message); + g_clear_error (&error); + } + } + else if (config->rgb_profile) + { + profile = gimp_lcms_profile_open_from_file (config->rgb_profile, + NULL, &error); + if (! profile) + { + g_message ("%s", error->message); + g_clear_error (&error); + } + } + + if (profile && ! gimp_lcms_profile_is_rgb (profile)) + { + g_message (_("Color profile is not for RGB color space (skipping)")); + cmsCloseProfile (profile); + profile = NULL; + } + + if (! profile) + profile = gimp_lcms_create_srgb_profile (); + + gimp_color_profile_view_set_profile (profile_view->profile_view, profile); + + cmsCloseProfile (profile); } diff --git a/app/widgets/gimpimageprofileview.h b/app/widgets/gimpimageprofileview.h index d26335077f..a260dc537d 100644 --- a/app/widgets/gimpimageprofileview.h +++ b/app/widgets/gimpimageprofileview.h @@ -39,9 +39,7 @@ struct _GimpImageProfileView { GimpImageParasiteView parent_instance; - GtkTextBuffer *buffer; - - guint idle_id; + GimpColorProfileView *profile_view; }; struct _GimpImageProfileViewClass