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.
This commit is contained in:
Ell 2018-12-28 02:09:11 -05:00
parent 85e454bae8
commit b93df0311f
2 changed files with 74 additions and 35 deletions

View File

@ -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);

View File

@ -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;
GType gimp_applicator_get_type (void) G_GNUC_CONST;
GimpApplicator * gimp_applicator_new (GeglNode *parent,
gboolean use_split_preview,
gboolean use_result_cache);
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_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_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_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_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_set_output_format (GimpApplicator *applicator,
const Babl *format);
void gimp_applicator_blit (GimpApplicator *applicator,
const GeglRectangle *rect);
void gimp_applicator_set_preview (GimpApplicator *applicator,
gboolean enable,
const GeglRectangle *rect);
GeglBuffer * gimp_applicator_get_cache_buffer (GimpApplicator *applicator,
GeglRectangle **rectangles,
gint *n_rectangles);
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__ */