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
|
||||
{
|
||||
/* ... 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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user