[gimp/gimp-2-10] app: in GimpLineArt, add support for arbitrary buffer extents
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: in GimpLineArt, add support for arbitrary buffer extents
- Date: Mon, 4 Nov 2019 11:34:19 +0000 (UTC)
commit c5ff92d71d4a298bc9f856f3e8fadbfe1ed388a1
Author: Ell <ell_se yahoo com>
Date: Mon Nov 4 12:46:42 2019 +0200
app: in GimpLineArt, add support for arbitrary buffer extents
In GimpLineArt, add support for arbitrary input-buffer extents,
by shifting/unshifting the input/output buffers before/after
passing them to the main algorithm, so that the algorithm keeps
working with buffers whose top-left corner is at (0, 0).
(cherry picked from commit bce96eb690eeb1cf83603e7abb13817e47b1f721)
app/core/gimplineart.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
---
diff --git a/app/core/gimplineart.c b/app/core/gimplineart.c
index beff476948..d49703481c 100644
--- a/app/core/gimplineart.c
+++ b/app/core/gimplineart.c
@@ -674,8 +674,11 @@ static void
gimp_line_art_prepare_async_func (GimpAsync *async,
LineArtData *data)
{
+ GeglBuffer *buffer;
GeglBuffer *closed = NULL;
gfloat *distmap = NULL;
+ gint buffer_x;
+ gint buffer_y;
gboolean has_alpha;
gboolean select_transparent = FALSE;
@@ -726,13 +729,26 @@ gimp_line_art_prepare_async_func (GimpAsync *async,
}
}
+ buffer = data->buffer;
+ buffer_x = gegl_buffer_get_x (data->buffer);
+ buffer_y = gegl_buffer_get_y (data->buffer);
+
+ if (buffer_x != 0 || buffer_y != 0)
+ {
+ buffer = g_object_new (GEGL_TYPE_BUFFER,
+ "source", buffer,
+ "shift-x", buffer_x,
+ "shift-y", buffer_y,
+ NULL);
+ }
+
/* For smart selection, we generate a binarized image with close
* regions, then run a composite selection with no threshold on
* this intermediate buffer.
*/
GIMP_TIMER_START();
- closed = gimp_line_art_close (data->buffer,
+ closed = gimp_line_art_close (buffer,
select_transparent,
data->threshold,
data->spline_max_len,
@@ -762,8 +778,24 @@ gimp_line_art_prepare_async_func (GimpAsync *async,
GIMP_TIMER_END("close line-art");
+ if (buffer != data->buffer)
+ g_object_unref (buffer);
+
if (! gimp_async_is_stopped (async))
{
+ if (buffer_x != 0 || buffer_y != 0)
+ {
+ buffer = g_object_new (GEGL_TYPE_BUFFER,
+ "source", closed,
+ "shift-x", -buffer_x,
+ "shift-y", -buffer_y,
+ NULL);
+
+ g_object_unref (closed);
+
+ closed = buffer;
+ }
+
gimp_async_finish_full (async,
line_art_result_new (closed, distmap),
(GDestroyNotify) line_art_result_free);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]