From 2341117517050e5ffffbb36f77e5235078ade831 Mon Sep 17 00:00:00 2001 From: Ell Date: Wed, 27 Mar 2019 14:50:20 -0400 Subject: [PATCH] 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 | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 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 ( + gegl_buffer_get_format (src_buffer)); + dest_profile = gimp_color_managed_get_color_profile ( + GIMP_COLOR_MANAGED (drawable)); - src_profile = gimp_babl_format_get_color_profile (format); - 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); + 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);