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:
@ -458,7 +458,12 @@ gimp_operation_layer_mode_parent_process (GeglOperation *operation,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* ... the output is empty. */
|
/* ... 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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,9 +96,16 @@ gimp_operation_replace_parent_process (GeglOperation *op,
|
|||||||
{
|
{
|
||||||
GObject *aux;
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user