[gimp] app: remove GimpDrawableFilter's own color profile conversion hack



commit 08b4b944dc779f7e33988e4d8de56f12331c5905
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jan 28 20:13:12 2019 +0100

    app: remove GimpDrawableFilter's own color profile conversion hack
    
    it's wrong and harmful after space invasion.

 app/core/gimpdrawablefilter.c | 157 ------------------------------------------
 app/core/gimpdrawablefilter.h |   3 -
 app/tools/gimpfilteroptions.c |  17 -----
 app/tools/gimpfilteroptions.h |   1 -
 app/tools/gimpfiltertool.c    |  26 ++-----
 5 files changed, 4 insertions(+), 200 deletions(-)
---
diff --git a/app/core/gimpdrawablefilter.c b/app/core/gimpdrawablefilter.c
index 740497d918..395e761424 100644
--- a/app/core/gimpdrawablefilter.c
+++ b/app/core/gimpdrawablefilter.c
@@ -84,8 +84,6 @@ struct _GimpDrawableFilter
   GeglNode               *translate;
   GeglNode               *crop_before;
   GeglNode               *cast_before;
-  GeglNode               *transform_before;
-  GeglNode               *transform_after;
   GeglNode               *cast_after;
   GeglNode               *crop_after;
   GimpApplicator         *applicator;
@@ -108,7 +106,6 @@ static void       gimp_drawable_filter_sync_mode          (GimpDrawableFilter  *
 static void       gimp_drawable_filter_sync_affect        (GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_sync_format        (GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_sync_mask          (GimpDrawableFilter  *filter);
-static void       gimp_drawable_filter_sync_transform     (GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_sync_gamma_hack    (GimpDrawableFilter  *filter);
 
 static gboolean   gimp_drawable_filter_is_filtering       (GimpDrawableFilter  *filter);
@@ -123,8 +120,6 @@ static void       gimp_drawable_filter_affect_changed     (GimpImage           *
                                                            GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_mask_changed       (GimpImage           *image,
                                                            GimpDrawableFilter  *filter);
-static void       gimp_drawable_filter_profile_changed    (GimpColorManaged    *managed,
-                                                           GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_format_changed     (GimpDrawable        *drawable,
                                                            GimpDrawableFilter  *filter);
 static void       gimp_drawable_filter_drawable_removed   (GimpDrawable        *drawable,
@@ -246,23 +241,14 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
                                                  "operation", "gegl:nop",
                                                  NULL);
 
-      filter->transform_before = gegl_node_new_child (node,
-                                                      "operation", "gegl:nop",
-                                                      NULL);
-
       gegl_node_link_many (input,
                            filter->translate,
                            filter->crop_before,
                            filter->cast_before,
-                           filter->transform_before,
                            filter->operation,
                            NULL);
     }
 
-  filter->transform_after = gegl_node_new_child (node,
-                                                 "operation", "gegl:nop",
-                                                 NULL);
-
   filter->cast_after = gegl_node_new_child (node,
                                             "operation", "gegl:nop",
                                             NULL);
@@ -272,7 +258,6 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
                                             NULL);
 
   gegl_node_link_many (filter->operation,
-                       filter->transform_after,
                        filter->cast_after,
                        filter->crop_after,
                        NULL);
@@ -412,23 +397,6 @@ gimp_drawable_filter_set_mode (GimpDrawableFilter     *filter,
     }
 }
 
-void
-gimp_drawable_filter_set_color_managed (GimpDrawableFilter *filter,
-                                        gboolean            color_managed)
-{
-  g_return_if_fail (GIMP_IS_DRAWABLE_FILTER (filter));
-
-  if (color_managed != filter->color_managed)
-    {
-      filter->color_managed = color_managed;
-
-      gimp_drawable_filter_sync_transform (filter);
-
-      if (gimp_drawable_filter_is_filtering (filter))
-        gimp_drawable_filter_update_drawable (filter, NULL);
-    }
-}
-
 void
 gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter *filter,
                                      gboolean            gamma_hack)
@@ -440,7 +408,6 @@ gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter *filter,
       filter->gamma_hack = gamma_hack;
 
       gimp_drawable_filter_sync_gamma_hack (filter);
-      gimp_drawable_filter_sync_transform (filter);
 
       if (gimp_drawable_filter_is_filtering (filter))
         gimp_drawable_filter_update_drawable (filter, NULL);
@@ -754,115 +721,6 @@ gimp_drawable_filter_sync_mask (GimpDrawableFilter *filter)
                             &filter->filter_area.height);
 }
 
-static void
-gimp_drawable_filter_sync_transform (GimpDrawableFilter *filter)
-{
-  GimpColorManaged *managed = GIMP_COLOR_MANAGED (filter->drawable);
-
-  if (filter->color_managed)
-    {
-      const Babl       *drawable_format  = NULL;
-      const Babl       *input_format     = NULL;
-      const Babl       *output_format    = NULL;
-      GimpColorProfile *drawable_profile = NULL;
-      GimpColorProfile *input_profile    = NULL;
-      GimpColorProfile *output_profile   = NULL;
-      guint32           dummy;
-
-      drawable_format = gimp_drawable_get_format (filter->drawable);
-      if (filter->has_input)
-        input_format  = gimp_gegl_node_get_format (filter->operation, "input");
-      output_format   = gimp_gegl_node_get_format (filter->operation, "output");
-
-      g_printerr ("drawable format:      %s\n", babl_get_name (drawable_format));
-      if (filter->has_input)
-        g_printerr ("filter input format:  %s\n", babl_get_name (input_format));
-      g_printerr ("filter output format: %s\n", babl_get_name (output_format));
-
-      /*  convert the drawable format to float, so we get a precise
-       *  color transform
-       */
-      drawable_format =
-        gimp_babl_format (gimp_babl_format_get_base_type (drawable_format),
-                          gimp_babl_precision (GIMP_COMPONENT_TYPE_FLOAT,
-                                               gimp_babl_format_get_trc (drawable_format)),
-                          babl_format_has_alpha (drawable_format),
-                          babl_format_get_space (drawable_format));
-
-      /*  convert the filter input/output formats to something we have
-       *  built-in color profiles for (see the get_color_profile()
-       *  calls below)
-       */
-      if (filter->has_input)
-        input_format = gimp_color_profile_get_lcms_format (input_format,  &dummy);
-      output_format  = gimp_color_profile_get_lcms_format (output_format, &dummy);
-
-      g_printerr ("profile transform drawable format: %s\n",
-                  babl_get_name (drawable_format));
-      if (filter->has_input)
-        g_printerr ("profile transform input format:    %s\n",
-                    babl_get_name (input_format));
-      g_printerr ("profile transform output format:   %s\n",
-                  babl_get_name (output_format));
-
-      drawable_profile = gimp_color_managed_get_color_profile (managed);
-      if (filter->has_input)
-        input_profile  = gimp_babl_format_get_color_profile (input_format);
-      output_profile   = gimp_babl_format_get_color_profile (output_format);
-
-      if ((filter->has_input &&
-           ! gimp_color_transform_can_gegl_copy (drawable_profile,
-                                                 input_profile)) ||
-          ! gimp_color_transform_can_gegl_copy (output_profile,
-                                                drawable_profile))
-        {
-          g_printerr ("using gimp:profile-transform\n");
-
-          if (filter->has_input)
-            {
-              gegl_node_set (filter->transform_before,
-                             "operation",    "gimp:profile-transform",
-                             "src-profile",  drawable_profile,
-                             "src-format",   drawable_format,
-                             "dest-profile", input_profile,
-                             "dest-format",  input_format,
-                             NULL);
-            }
-
-          gegl_node_set (filter->transform_after,
-                         "operation",    "gimp:profile-transform",
-                         "src-profile",  output_profile,
-                         "src-format",   output_format,
-                         "dest-profile", drawable_profile,
-                         "dest-format",  drawable_format,
-                         NULL);
-
-          if (filter->has_input)
-            g_object_unref (input_profile);
-          g_object_unref (output_profile);
-
-          return;
-        }
-
-      if (filter->has_input)
-        g_object_unref (input_profile);
-      g_object_unref (output_profile);
-    }
-
-  g_printerr ("using gegl copy\n");
-
-  if (filter->has_input)
-    {
-      gegl_node_set (filter->transform_before,
-                     "operation", "gegl:nop",
-                     NULL);
-    }
-
-  gegl_node_set (filter->transform_after,
-                 "operation", "gegl:nop",
-                 NULL);
-}
-
 static void
 gimp_drawable_filter_sync_gamma_hack (GimpDrawableFilter *filter)
 {
@@ -948,7 +806,6 @@ gimp_drawable_filter_add_filter (GimpDrawableFilter *filter)
       gimp_drawable_filter_sync_mode (filter);
       gimp_drawable_filter_sync_affect (filter);
       gimp_drawable_filter_sync_format (filter);
-      gimp_drawable_filter_sync_transform (filter);
       gimp_drawable_filter_sync_gamma_hack (filter);
 
       gimp_drawable_add_filter (filter->drawable,
@@ -960,9 +817,6 @@ gimp_drawable_filter_add_filter (GimpDrawableFilter *filter)
       g_signal_connect (image, "mask-changed",
                         G_CALLBACK (gimp_drawable_filter_mask_changed),
                         filter);
-      g_signal_connect (image, "profile-changed",
-                        G_CALLBACK (gimp_drawable_filter_profile_changed),
-                        filter);
       g_signal_connect (filter->drawable, "format-changed",
                         G_CALLBACK (gimp_drawable_filter_format_changed),
                         filter);
@@ -1003,9 +857,6 @@ gimp_drawable_filter_remove_filter (GimpDrawableFilter *filter)
       g_signal_handlers_disconnect_by_func (filter->drawable,
                                             gimp_drawable_filter_format_changed,
                                             filter);
-      g_signal_handlers_disconnect_by_func (image,
-                                            gimp_drawable_filter_profile_changed,
-                                            filter);
       g_signal_handlers_disconnect_by_func (image,
                                             gimp_drawable_filter_mask_changed,
                                             filter);
@@ -1089,14 +940,6 @@ gimp_drawable_filter_mask_changed (GimpImage          *image,
   gimp_drawable_filter_update_drawable (filter, NULL);
 }
 
-static void
-gimp_drawable_filter_profile_changed (GimpColorManaged   *managed,
-                                      GimpDrawableFilter *filter)
-{
-  gimp_drawable_filter_sync_transform (filter);
-  gimp_drawable_filter_update_drawable (filter, NULL);
-}
-
 static void
 gimp_drawable_filter_format_changed (GimpDrawable       *drawable,
                                      GimpDrawableFilter *filter)
diff --git a/app/core/gimpdrawablefilter.h b/app/core/gimpdrawablefilter.h
index cc3db76b43..8800190475 100644
--- a/app/core/gimpdrawablefilter.h
+++ b/app/core/gimpdrawablefilter.h
@@ -72,9 +72,6 @@ void       gimp_drawable_filter_set_mode       (GimpDrawableFilter  *filter,
                                                 GimpLayerColorSpace  composite_space,
                                                 GimpLayerCompositeMode composite_mode);
 
-void       gimp_drawable_filter_set_color_managed
-                                               (GimpDrawableFilter  *filter,
-                                                gboolean             managed);
 void       gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter  *filter,
                                                 gboolean             gamma_hack);
 
diff --git a/app/tools/gimpfilteroptions.c b/app/tools/gimpfilteroptions.c
index f9acd9e705..327ace201b 100644
--- a/app/tools/gimpfilteroptions.c
+++ b/app/tools/gimpfilteroptions.c
@@ -38,7 +38,6 @@ enum
   PROP_PREVIEW_POSITION,
   PROP_CONTROLLER,
   PROP_REGION,
-  PROP_COLOR_MANAGED,
   PROP_GAMMA_HACK
 };
 
@@ -112,14 +111,6 @@ gimp_filter_options_class_init (GimpFilterOptionsClass *klass)
                                                       GIMP_PARAM_READWRITE |
                                                       G_PARAM_CONSTRUCT));
 
-  g_object_class_install_property (object_class, PROP_COLOR_MANAGED,
-                                   g_param_spec_boolean ("color-managed",
-                                                         _("Color _managed"),
-                                                         NULL,
-                                                         FALSE,
-                                                         GIMP_PARAM_READWRITE |
-                                                         G_PARAM_CONSTRUCT));
-
   g_object_class_install_property (object_class, PROP_GAMMA_HACK,
                                    g_param_spec_boolean ("gamma-hack",
                                                          "Gamma hack (temp hack, please ignore)",
@@ -168,10 +159,6 @@ gimp_filter_options_set_property (GObject      *object,
       options->region = g_value_get_enum (value);
       break;
 
-    case PROP_COLOR_MANAGED:
-      options->color_managed = g_value_get_boolean (value);
-      break;
-
     case PROP_GAMMA_HACK:
       options->gamma_hack = g_value_get_boolean (value);
       break;
@@ -216,10 +203,6 @@ gimp_filter_options_get_property (GObject    *object,
       g_value_set_enum (value, options->region);
       break;
 
-    case PROP_COLOR_MANAGED:
-      g_value_set_boolean (value, options->color_managed);
-      break;
-
     case PROP_GAMMA_HACK:
       g_value_set_boolean (value, options->gamma_hack);
       break;
diff --git a/app/tools/gimpfilteroptions.h b/app/tools/gimpfilteroptions.h
index 3bf38cebbb..c5fe4313d4 100644
--- a/app/tools/gimpfilteroptions.h
+++ b/app/tools/gimpfilteroptions.h
@@ -42,7 +42,6 @@ struct _GimpFilterOptions
   gdouble             preview_position;
   gboolean            controller;
   GimpFilterRegion    region;
-  gboolean            color_managed;
   gboolean            gamma_hack;
 };
 
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index 454bfe205f..5706564e76 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -309,7 +309,6 @@ gimp_filter_tool_initialize (GimpTool     *tool,
       GtkWidget     *expander;
       GtkWidget     *frame;
       GtkWidget     *vbox2;
-      GtkWidget     *combo;
       GeglOperation *operation;
       const gchar   *operation_name = NULL;
 
@@ -402,15 +401,6 @@ gimp_filter_tool_initialize (GimpTool     *tool,
       gtk_container_add (GTK_CONTAINER (frame), vbox2);
       gtk_widget_show (vbox2);
 
-      /*  The color managed combo  */
-      combo = gimp_prop_boolean_combo_box_new
-        (G_OBJECT (tool_info->tool_options), "color-managed",
-         _("Convert pixels to built-in sRGB to apply filter (slow)"),
-         _("Assume pixels are built-in sRGB (ignore actual image color space)"));
-      g_object_set (combo, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-      gtk_box_pack_start (GTK_BOX (vbox2), combo, FALSE, FALSE, 0);
-      gtk_widget_show (combo);
-
       /*  The gamma hack toggle  */
       toggle = gimp_prop_check_button_new (G_OBJECT (tool_info->tool_options),
                                            "gamma-hack", NULL);
@@ -810,12 +800,6 @@ gimp_filter_tool_options_notify (GimpTool         *tool,
       gimp_drawable_filter_set_region (filter_tool->filter,
                                        filter_options->region);
     }
-  else if (! strcmp (pspec->name, "color-managed") &&
-           filter_tool->filter)
-    {
-      gimp_drawable_filter_set_color_managed (filter_tool->filter,
-                                              filter_options->color_managed);
-    }
   else if (! strcmp (pspec->name, "gamma-hack") &&
            filter_tool->filter)
     {
@@ -1106,12 +1090,10 @@ gimp_filter_tool_create_filter (GimpFilterTool *filter_tool)
                                                   filter_tool->operation,
                                                   gimp_tool_get_icon_name (tool));
 
-  gimp_drawable_filter_set_region        (filter_tool->filter,
-                                          options->region);
-  gimp_drawable_filter_set_color_managed (filter_tool->filter,
-                                          options->color_managed);
-  gimp_drawable_filter_set_gamma_hack    (filter_tool->filter,
-                                          options->gamma_hack);
+  gimp_drawable_filter_set_region     (filter_tool->filter,
+                                       options->region);
+  gimp_drawable_filter_set_gamma_hack (filter_tool->filter,
+                                       options->gamma_hack);
 
   g_signal_connect (filter_tool->filter, "flush",
                     G_CALLBACK (gimp_filter_tool_flush),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]