Issue #886 - Artifacts symmetry painting with big brushes
In GimpClone and GimpHeal, use gimp_gegl_apply_operation(), instead of gegl_node_process(), to apply the symmetry transform, which both performs chunking and avoids aliasing problems.
This commit is contained in:
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include "paint-types.h"
|
#include "paint-types.h"
|
||||||
|
|
||||||
|
#include "gegl/gimp-gegl-apply-operation.h"
|
||||||
#include "gegl/gimp-gegl-loops.h"
|
#include "gegl/gimp-gegl-loops.h"
|
||||||
|
|
||||||
#include "core/gimp.h"
|
#include "core/gimp.h"
|
||||||
@ -178,25 +179,11 @@ gimp_clone_motion (GimpSourceCore *source_core,
|
|||||||
GEGL_RECTANGLE (paint_area_offset_x,
|
GEGL_RECTANGLE (paint_area_offset_x,
|
||||||
paint_area_offset_y,
|
paint_area_offset_y,
|
||||||
0, 0));
|
0, 0));
|
||||||
|
|
||||||
if (op)
|
if (op)
|
||||||
{
|
{
|
||||||
GeglNode *graph, *source, *target;
|
gimp_gegl_apply_operation (paint_buffer, NULL, NULL, op,
|
||||||
|
paint_buffer, NULL, FALSE);
|
||||||
graph = gegl_node_new ();
|
|
||||||
source = gegl_node_new_child (graph,
|
|
||||||
"operation", "gegl:buffer-source",
|
|
||||||
"buffer", paint_buffer,
|
|
||||||
NULL);
|
|
||||||
gegl_node_add_child (graph, op);
|
|
||||||
target = gegl_node_new_child (graph,
|
|
||||||
"operation", "gegl:write-buffer",
|
|
||||||
"buffer", paint_buffer,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gegl_node_link_many (source, op, target, NULL);
|
|
||||||
gegl_node_process (target);
|
|
||||||
|
|
||||||
g_object_unref (graph);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (options->clone_type == GIMP_CLONE_PATTERN)
|
else if (options->clone_type == GIMP_CLONE_PATTERN)
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include "paint-types.h"
|
#include "paint-types.h"
|
||||||
|
|
||||||
|
#include "gegl/gimp-gegl-apply-operation.h"
|
||||||
#include "gegl/gimp-gegl-loops.h"
|
#include "gegl/gimp-gegl-loops.h"
|
||||||
|
|
||||||
#include "core/gimpbrush.h"
|
#include "core/gimpbrush.h"
|
||||||
@ -611,23 +612,8 @@ gimp_heal_motion (GimpSourceCore *source_core,
|
|||||||
|
|
||||||
if (op)
|
if (op)
|
||||||
{
|
{
|
||||||
GeglNode *graph, *source, *target;
|
gimp_gegl_apply_operation (src_copy, NULL, NULL, op,
|
||||||
|
src_copy, NULL, FALSE);
|
||||||
graph = gegl_node_new ();
|
|
||||||
source = gegl_node_new_child (graph,
|
|
||||||
"operation", "gegl:buffer-source",
|
|
||||||
"buffer", src_copy,
|
|
||||||
NULL);
|
|
||||||
gegl_node_add_child (graph, op);
|
|
||||||
target = gegl_node_new_child (graph,
|
|
||||||
"operation", "gegl:write-buffer",
|
|
||||||
"buffer", src_copy,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gegl_node_link_many (source, op, target, NULL);
|
|
||||||
gegl_node_process (target);
|
|
||||||
|
|
||||||
g_object_unref (graph);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_heal (src_copy,
|
gimp_heal (src_copy,
|
||||||
|
Reference in New Issue
Block a user