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 3c1634ee0d
)
This commit is contained in:
@ -92,26 +92,34 @@ gimp_drawable_fill_buffer (GimpDrawable *drawable,
|
|||||||
|
|
||||||
if (pattern)
|
if (pattern)
|
||||||
{
|
{
|
||||||
const Babl *format;
|
|
||||||
GeglBuffer *src_buffer;
|
GeglBuffer *src_buffer;
|
||||||
GeglBuffer *dest_buffer;
|
GeglBuffer *dest_buffer;
|
||||||
GimpColorProfile *src_profile;
|
GimpColorProfile *src_profile;
|
||||||
GimpColorProfile *dest_profile;
|
GimpColorProfile *dest_profile;
|
||||||
|
|
||||||
src_buffer = gimp_pattern_create_buffer (pattern);
|
src_buffer = gimp_pattern_create_buffer (pattern);
|
||||||
format = gegl_buffer_get_format (src_buffer);
|
|
||||||
|
|
||||||
|
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),
|
dest_buffer = gegl_buffer_new (gegl_buffer_get_extent (src_buffer),
|
||||||
format);
|
gegl_buffer_get_format (buffer));
|
||||||
|
|
||||||
src_profile = gimp_babl_format_get_color_profile (format);
|
gimp_gegl_convert_color_profile (
|
||||||
dest_profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (drawable));
|
src_buffer, NULL, src_profile,
|
||||||
|
|
||||||
gimp_gegl_convert_color_profile (src_buffer, NULL, src_profile,
|
|
||||||
dest_buffer, NULL, dest_profile,
|
dest_buffer, NULL, dest_profile,
|
||||||
GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
|
GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
|
||||||
TRUE,
|
TRUE,
|
||||||
NULL);
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
gegl_buffer_set_pattern (buffer, NULL, dest_buffer,
|
gegl_buffer_set_pattern (buffer, NULL, dest_buffer,
|
||||||
pattern_offset_x, pattern_offset_y);
|
pattern_offset_x, pattern_offset_y);
|
||||||
|
Reference in New Issue
Block a user