[gimp/gimp-2-10] app: improve gimp_drawable_fill_buffer() for patterns



commit 2341117517050e5ffffbb36f77e5235078ade831
Author: Ell <ell_se yahoo com>
Date:   Wed Mar 27 14:50:20 2019 -0400

    app: improve gimp_drawable_fill_buffer() for patterns
    
    In gimp_drawable_fill_buffer(), when the fill-source is a pattern,
    avoid going through an intermediate buffer when there's no profile
    transform, and use the destination-buffer format for the
    intermediate buffer, instead of the pattern format, when there is a
    profile transform.
    
    (cherry picked from commit 3c1634ee0d5a1d6bbf448253abe9b88b2172a2c2)

 app/core/gimpdrawable-fill.c | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)
---
diff --git a/app/core/gimpdrawable-fill.c b/app/core/gimpdrawable-fill.c
index 7051f9f770..a596d473d0 100644
--- a/app/core/gimpdrawable-fill.c
+++ b/app/core/gimpdrawable-fill.c
@@ -92,26 +92,34 @@ gimp_drawable_fill_buffer (GimpDrawable  *drawable,
 
   if (pattern)
     {
-      const Babl       *format;
       GeglBuffer       *src_buffer;
       GeglBuffer       *dest_buffer;
       GimpColorProfile *src_profile;
       GimpColorProfile *dest_profile;
 
       src_buffer = gimp_pattern_create_buffer (pattern);
-      format = gegl_buffer_get_format (src_buffer);
 
-      dest_buffer = gegl_buffer_new (gegl_buffer_get_extent (src_buffer),
-                                     format);
-
-      src_profile  = gimp_babl_format_get_color_profile (format);
-      dest_profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (drawable));
-
-      gimp_gegl_convert_color_profile (src_buffer,  NULL, src_profile,
-                                       dest_buffer, NULL, dest_profile,
-                                       GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
-                                       TRUE,
-                                       NULL);
+      src_profile  = gimp_babl_format_get_color_profile (
+                       gegl_buffer_get_format (src_buffer));
+      dest_profile = gimp_color_managed_get_color_profile (
+                       GIMP_COLOR_MANAGED (drawable));
+
+      if (gimp_color_transform_can_gegl_copy (src_profile, dest_profile))
+        {
+          dest_buffer = g_object_ref (src_buffer);
+        }
+      else
+        {
+          dest_buffer = gegl_buffer_new (gegl_buffer_get_extent (src_buffer),
+                                         gegl_buffer_get_format (buffer));
+
+          gimp_gegl_convert_color_profile (
+            src_buffer,  NULL, src_profile,
+            dest_buffer, NULL, dest_profile,
+            GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
+            TRUE,
+            NULL);
+        }
 
       gegl_buffer_set_pattern (buffer, NULL, dest_buffer,
                                pattern_offset_x, pattern_offset_y);


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