[gimp/gimp-2-10] app: add gimp_applicator_set_output_format()
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: add gimp_applicator_set_output_format()
- Date: Fri, 28 Dec 2018 08:58:05 +0000 (UTC)
commit ad6fff33b66e1aa8387bc629a066531177b73d6b
Author: Ell <ell_se yahoo com>
Date: Fri Dec 28 02:09:11 2018 -0500
app: add gimp_applicator_set_output_format()
In GimpApplicator, add gimp_applicator_set_output_format(), which
can be used to explicitly set the format of the result. In
particular, this allows controlling the output cache format, which
can speed up the merging of cached filters.
(cherry picked from commit b93df0311f716ec952110a406b6ec5f40177ab85)
app/gegl/gimpapplicator.c | 33 +++++++++++++++++
app/gegl/gimpapplicator.h | 92 +++++++++++++++++++++++++----------------------
2 files changed, 82 insertions(+), 43 deletions(-)
---
diff --git a/app/gegl/gimpapplicator.c b/app/gegl/gimpapplicator.c
index 16041f20e2..b30947545c 100644
--- a/app/gegl/gimpapplicator.c
+++ b/app/gegl/gimpapplicator.c
@@ -197,6 +197,11 @@ gimp_applicator_new (GeglNode *parent,
"mask", applicator->affect,
NULL);
+ applicator->output_convert_format_node =
+ gegl_node_new_child (applicator->node,
+ "operation", "gegl:nop",
+ NULL);
+
if (use_result_cache)
{
applicator->output_cache_node =
@@ -206,6 +211,7 @@ gimp_applicator_new (GeglNode *parent,
gegl_node_link_many (applicator->input_node,
applicator->affect_node,
+ applicator->output_convert_format_node,
applicator->output_cache_node,
applicator->output_node,
NULL);
@@ -214,6 +220,7 @@ gimp_applicator_new (GeglNode *parent,
{
gegl_node_link_many (applicator->input_node,
applicator->affect_node,
+ applicator->output_convert_format_node,
applicator->output_node,
NULL);
}
@@ -481,6 +488,32 @@ gimp_applicator_set_affect (GimpApplicator *applicator,
}
}
+void
+gimp_applicator_set_output_format (GimpApplicator *applicator,
+ const Babl *format)
+{
+ g_return_if_fail (GIMP_IS_APPLICATOR (applicator));
+
+ if (applicator->output_format != format)
+ {
+ applicator->output_format = format;
+
+ if (format)
+ {
+ gegl_node_set (applicator->output_convert_format_node,
+ "operation", "gegl:convert-format",
+ "format", format,
+ NULL);
+ }
+ else
+ {
+ gegl_node_set (applicator->output_convert_format_node,
+ "operation", "gegl:nop",
+ NULL);
+ }
+ }
+}
+
gboolean gegl_buffer_list_valid_rectangles (GeglBuffer *buffer,
GeglRectangle **rectangles,
gint *n_rectangles);
diff --git a/app/gegl/gimpapplicator.h b/app/gegl/gimpapplicator.h
index 4593859d63..f518c32eaf 100644
--- a/app/gegl/gimpapplicator.h
+++ b/app/gegl/gimpapplicator.h
@@ -63,6 +63,9 @@ struct _GimpApplicator
GimpComponentMask affect;
GeglNode *affect_node;
+ const Babl *output_format;
+ GeglNode *output_convert_format_node;
+
GeglNode *output_cache_node;
GeglBuffer *src_buffer;
@@ -85,49 +88,52 @@ struct _GimpApplicatorClass
};
-GType gimp_applicator_get_type (void) G_GNUC_CONST;
-
-GimpApplicator * gimp_applicator_new (GeglNode *parent,
- gboolean use_split_preview,
- gboolean use_result_cache);
-
-void gimp_applicator_set_src_buffer (GimpApplicator *applicator,
- GeglBuffer *dest_buffer);
-void gimp_applicator_set_dest_buffer (GimpApplicator *applicator,
- GeglBuffer *dest_buffer);
-
-void gimp_applicator_set_mask_buffer (GimpApplicator *applicator,
- GeglBuffer *mask_buffer);
-void gimp_applicator_set_mask_offset (GimpApplicator *applicator,
- gint mask_offset_x,
- gint mask_offset_y);
-
-void gimp_applicator_set_apply_buffer (GimpApplicator *applicator,
- GeglBuffer *apply_buffer);
-void gimp_applicator_set_apply_offset (GimpApplicator *applicator,
- gint apply_offset_x,
- gint apply_offset_y);
-
-void gimp_applicator_set_opacity (GimpApplicator *applicator,
- gdouble opacity);
-void gimp_applicator_set_mode (GimpApplicator *applicator,
- GimpLayerMode paint_mode,
- GimpLayerColorSpace blend_space,
- GimpLayerColorSpace composite_space,
- GimpLayerCompositeMode composite_mode);
-void gimp_applicator_set_affect (GimpApplicator *applicator,
- GimpComponentMask affect);
-
-void gimp_applicator_set_preview (GimpApplicator *applicator,
- gboolean enable,
- const GeglRectangle *rect);
-
-void gimp_applicator_blit (GimpApplicator *applicator,
- const GeglRectangle *rect);
-
-GeglBuffer * gimp_applicator_get_cache_buffer (GimpApplicator *applicator,
- GeglRectangle **rectangles,
- gint *n_rectangles);
+GType gimp_applicator_get_type (void) G_GNUC_CONST;
+
+GimpApplicator * gimp_applicator_new (GeglNode *parent,
+ gboolean use_split_preview,
+ gboolean use_result_cache);
+
+void gimp_applicator_set_src_buffer (GimpApplicator *applicator,
+ GeglBuffer *dest_buffer);
+void gimp_applicator_set_dest_buffer (GimpApplicator *applicator,
+ GeglBuffer *dest_buffer);
+
+void gimp_applicator_set_mask_buffer (GimpApplicator *applicator,
+ GeglBuffer *mask_buffer);
+void gimp_applicator_set_mask_offset (GimpApplicator *applicator,
+ gint mask_offset_x,
+ gint mask_offset_y);
+
+void gimp_applicator_set_apply_buffer (GimpApplicator *applicator,
+ GeglBuffer *apply_buffer);
+void gimp_applicator_set_apply_offset (GimpApplicator *applicator,
+ gint apply_offset_x,
+ gint apply_offset_y);
+
+void gimp_applicator_set_opacity (GimpApplicator *applicator,
+ gdouble opacity);
+void gimp_applicator_set_mode (GimpApplicator *applicator,
+ GimpLayerMode paint_mode,
+ GimpLayerColorSpace blend_space,
+ GimpLayerColorSpace composite_space,
+ GimpLayerCompositeMode composite_mode);
+void gimp_applicator_set_affect (GimpApplicator *applicator,
+ GimpComponentMask affect);
+
+void gimp_applicator_set_output_format (GimpApplicator *applicator,
+ const Babl *format);
+
+void gimp_applicator_set_preview (GimpApplicator *applicator,
+ gboolean enable,
+ const GeglRectangle *rect);
+
+void gimp_applicator_blit (GimpApplicator *applicator,
+ const GeglRectangle *rect);
+
+GeglBuffer * gimp_applicator_get_cache_buffer (GimpApplicator *applicator,
+ GeglRectangle **rectangles,
+ gint *n_rectangles);
#endif /* __GIMP_APPLICATOR_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]