[gimp] Bug 796090 - (wrong) true-color preview of GEGL filter ops, ...
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 796090 - (wrong) true-color preview of GEGL filter ops, ...
- Date: Wed, 16 May 2018 00:10:12 +0000 (UTC)
commit d6e0ca505440596e81593cf9ec0fac4f0d9e2ba8
Author: Michael Natterer <mitch gimp org>
Date: Wed May 16 02:06:03 2018 +0200
Bug 796090 - (wrong) true-color preview of GEGL filter ops, ...
...like gaussian blur in indexed mode
In GimpDrawable's source node, after the filter stack, insert a node
that converts the pixels back to the drawable's format if the drawable
is indexed.
app/core/gimpdrawable-private.h | 1 +
app/core/gimpdrawable.c | 45 +++++++++++++++++++++++++++++++++-----
2 files changed, 40 insertions(+), 6 deletions(-)
---
diff --git a/app/core/gimpdrawable-private.h b/app/core/gimpdrawable-private.h
index c84c665..233ac21 100644
--- a/app/core/gimpdrawable-private.h
+++ b/app/core/gimpdrawable-private.h
@@ -26,6 +26,7 @@ struct _GimpDrawablePrivate
GeglNode *source_node;
GeglNode *buffer_source_node;
GimpContainer *filter_stack;
+ GeglNode *convert_format;
GimpLayer *floating_selection;
GimpFilter *fs_filter;
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index cc41116..ac07d0a 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -809,6 +809,21 @@ gimp_drawable_real_set_buffer (GimpDrawable *drawable,
"buffer", gimp_drawable_get_buffer (drawable),
NULL);
+ if (drawable->private->convert_format)
+ {
+ const Babl *format = gimp_drawable_get_format (drawable);
+
+ if (babl_format_is_palette (format))
+ gegl_node_set (drawable->private->convert_format,
+ "operation", "gegl:convert-format",
+ "format", gimp_drawable_get_format (drawable),
+ NULL);
+ else
+ gegl_node_set (drawable->private->convert_format,
+ "operation", "gegl:nop",
+ NULL);
+ }
+
gimp_item_set_offset (item, offset_x, offset_y);
gimp_item_set_size (item,
gegl_buffer_get_width (buffer),
@@ -1278,10 +1293,11 @@ gimp_drawable_steal_buffer (GimpDrawable *drawable,
GeglNode *
gimp_drawable_get_source_node (GimpDrawable *drawable)
{
- GeglNode *input;
- GeglNode *source;
- GeglNode *filter;
- GeglNode *output;
+ const Babl *format;
+ GeglNode *input;
+ GeglNode *source;
+ GeglNode *filter;
+ GeglNode *output;
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
@@ -1311,10 +1327,27 @@ gimp_drawable_get_source_node (GimpDrawable *drawable)
gegl_node_connect_to (source, "output",
filter, "input");
+ format = gimp_drawable_get_format (drawable);
+
+ if (babl_format_is_palette (format))
+ drawable->private->convert_format =
+ gegl_node_new_child (drawable->private->source_node,
+ "operation", "gegl:convert-format",
+ "format", gimp_drawable_get_format (drawable),
+ NULL);
+ else
+ drawable->private->convert_format =
+ gegl_node_new_child (drawable->private->source_node,
+ "operation", "gegl:nop",
+ NULL);
+
+ gegl_node_connect_to (filter, "output",
+ drawable->private->convert_format, "input");
+
output = gegl_node_get_output_proxy (drawable->private->source_node, "output");
- gegl_node_connect_to (filter, "output",
- output, "input");
+ gegl_node_connect_to (drawable->private->convert_format, "output",
+ output, "input");
if (gimp_drawable_get_floating_sel (drawable))
_gimp_drawable_add_floating_sel_filter (drawable);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]