app: avoid NULL output in layer-mode ops

In GimpOperationLayerMode and GimpOperationReplace, make sure we
don't return a NULL output buffer, or forward a NULL input buffer,
but rather create an appropriate empty buffer in this case.  This
avoids wrong results when the layer-mode op's output is connected
to the aux input of a subsequent op, as a result of the op behaving
differently with a NULL aux buffer (in particular, this can happen
when a drawable filter's output bounding box is smaller than the
drawable.)
This commit is contained in:
Ell
2019-05-31 12:19:21 -04:00
parent a26ade92a0
commit 8fcac3298c
2 changed files with 15 additions and 3 deletions

View File

@ -458,7 +458,12 @@ gimp_operation_layer_mode_parent_process (GeglOperation *operation,
else
{
/* ... the output is empty. */
gegl_operation_context_set_object (context, "output", NULL);
gegl_operation_context_take_object (
context, "output",
G_OBJECT (gegl_buffer_new (result,
gegl_operation_get_format (operation,
"output"))));
return TRUE;
}
}

View File

@ -96,9 +96,16 @@ gimp_operation_replace_parent_process (GeglOperation *op,
{
GObject *aux;
aux = gegl_operation_context_get_object (context, "aux");
aux = gegl_operation_context_dup_object (context, "aux");
gegl_operation_context_set_object (context, "output", aux);
if (! aux)
{
aux = G_OBJECT (
gegl_buffer_new (result,
gegl_operation_get_format (op, "output")));
}
gegl_operation_context_take_object (context, "output", aux);
return TRUE;
}