From 84635445025a7a3d7115a5f39562c9b5cd8f6fc0 Mon Sep 17 00:00:00 2001 From: Shubham Date: Fri, 30 Jun 2023 01:55:29 +0530 Subject: [PATCH] app: fix broken symmetry on offset layers Painting with symmetry enabled on layers with offset was broken. Fixed it. --- app/paint/gimpconvolve.c | 3 +-- app/paint/gimpdodgeburn.c | 3 +-- app/paint/gimpink.c | 11 +++++------ app/paint/gimpmybrushcore.c | 19 +++++++++++++------ app/paint/gimppaintbrush.c | 3 +-- app/paint/gimpsmudge.c | 4 ++-- app/paint/gimpsourcecore.c | 11 +++++++---- 7 files changed, 30 insertions(+), 24 deletions(-) diff --git a/app/paint/gimpconvolve.c b/app/paint/gimpconvolve.c index 74c05e4c0a..724ebc1231 100644 --- a/app/paint/gimpconvolve.c +++ b/app/paint/gimpconvolve.c @@ -154,6 +154,7 @@ gimp_convolve_motion (GimpPaintCore *paint_core, coords = *(gimp_symmetry_get_origin (sym)); coords.x -= off_x; coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); opacity = gimp_dynamics_get_linear_value (dynamics, GIMP_DYNAMICS_OUTPUT_OPACITY, @@ -171,8 +172,6 @@ gimp_convolve_motion (GimpPaintCore *paint_core, for (i = 0; i < n_strokes; i++) { coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_brush_core_eval_transform_symmetry (brush_core, sym, i); diff --git a/app/paint/gimpdodgeburn.c b/app/paint/gimpdodgeburn.c index 1d9e3cdfe5..f334a847d6 100644 --- a/app/paint/gimpdodgeburn.c +++ b/app/paint/gimpdodgeburn.c @@ -140,6 +140,7 @@ gimp_dodge_burn_motion (GimpPaintCore *paint_core, coords = *(gimp_symmetry_get_origin (sym)); coords.x -= off_x; coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); opacity = gimp_dynamics_get_linear_value (dynamics, GIMP_DYNAMICS_OUTPUT_OPACITY, @@ -162,8 +163,6 @@ gimp_dodge_burn_motion (GimpPaintCore *paint_core, for (i = 0; i < n_strokes; i++) { coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_brush_core_eval_transform_symmetry (brush_core, sym, i); diff --git a/app/paint/gimpink.c b/app/paint/gimpink.c index 78a1a52be1..543366a2ba 100644 --- a/app/paint/gimpink.c +++ b/app/paint/gimpink.c @@ -330,6 +330,11 @@ gimp_ink_motion (GimpPaintCore *paint_core, gint i; gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y); + coords = *(gimp_symmetry_get_origin (sym)); + coords.x -= off_x; + coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); + n_strokes = gimp_symmetry_get_size (sym); if (ink->last_blobs && @@ -352,8 +357,6 @@ gimp_ink_motion (GimpPaintCore *paint_core, GimpMatrix3 transform; coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_symmetry_get_matrix (sym, i, &transform); @@ -385,8 +388,6 @@ gimp_ink_motion (GimpPaintCore *paint_core, GimpMatrix3 transform; coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_symmetry_get_matrix (sym, i, &transform); @@ -423,8 +424,6 @@ gimp_ink_motion (GimpPaintCore *paint_core, GimpBlob *blob_to_render = g_list_nth_data (blobs_to_render, i); coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; ink->cur_blob = blob_to_render; paint_buffer = gimp_paint_core_get_paint_buffer (paint_core, drawable, diff --git a/app/paint/gimpmybrushcore.c b/app/paint/gimpmybrushcore.c index 108997f1ca..a833176e7d 100644 --- a/app/paint/gimpmybrushcore.c +++ b/app/paint/gimpmybrushcore.c @@ -255,6 +255,7 @@ gimp_mybrush_core_motion (GimpPaintCore *paint_core, { GimpMybrushCore *mybrush = GIMP_MYBRUSH_CORE (paint_core); MyPaintRectangle rect; + GimpCoords coords; GList *iter; gdouble dt = 0.0; gint off_x, off_y; @@ -264,6 +265,11 @@ gimp_mybrush_core_motion (GimpPaintCore *paint_core, gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y); n_strokes = gimp_symmetry_get_size (sym); + coords = *(gimp_symmetry_get_origin (sym)); + coords.x -= off_x; + coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); + /* The number of strokes may change during a motion, depending on * the type of symmetry. When that happens, reset the brushes. */ @@ -281,13 +287,14 @@ gimp_mybrush_core_motion (GimpPaintCore *paint_core, iter; iter = g_list_next (iter), i++) { - MyPaintBrush *brush = iter->data; - GimpCoords coords = *(gimp_symmetry_get_coords (sym, i)); + MyPaintBrush *brush = iter->data; + + coords = *(gimp_symmetry_get_coords (sym, i)); mypaint_brush_stroke_to (brush, (MyPaintSurface *) mybrush->private->surface, - coords.x - off_x, - coords.y - off_y, + coords.x, + coords.y, 0.0f, coords.xtilt, coords.ytilt, @@ -318,8 +325,8 @@ gimp_mybrush_core_motion (GimpPaintCore *paint_core, mypaint_brush_stroke_to (brush, (MyPaintSurface *) mybrush->private->surface, - coords.x - off_x, - coords.y - off_y, + coords.x, + coords.y, pressure, coords.xtilt, coords.ytilt, diff --git a/app/paint/gimppaintbrush.c b/app/paint/gimppaintbrush.c index ebc41fade5..eac1a32160 100644 --- a/app/paint/gimppaintbrush.c +++ b/app/paint/gimppaintbrush.c @@ -247,6 +247,7 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core, coords = *(gimp_symmetry_get_origin (sym)); coords.x -= off_x; coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); /* Some settings are based on the original stroke. */ opacity *= gimp_dynamics_get_linear_value (dynamics, @@ -296,8 +297,6 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core, &paint_color); coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; if (GIMP_BRUSH_CORE_GET_CLASS (brush_core)->handles_transforming_brush) gimp_brush_core_eval_transform_symmetry (brush_core, sym, i); diff --git a/app/paint/gimpsmudge.c b/app/paint/gimpsmudge.c index f1759bdbc4..cdd09ca086 100644 --- a/app/paint/gimpsmudge.c +++ b/app/paint/gimpsmudge.c @@ -401,6 +401,8 @@ gimp_smudge_motion (GimpPaintCore *paint_core, coords = *(gimp_symmetry_get_origin (sym)); coords.x -= off_x; coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); + opacity = gimp_dynamics_get_linear_value (dynamics, GIMP_DYNAMICS_OUTPUT_OPACITY, &coords, @@ -464,8 +466,6 @@ gimp_smudge_motion (GimpPaintCore *paint_core, for (i = 0; i < n_strokes; i++) { coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_brush_core_eval_transform_symmetry (brush_core, sym, i); diff --git a/app/paint/gimpsourcecore.c b/app/paint/gimpsourcecore.c index 712423905d..23e673d49b 100644 --- a/app/paint/gimpsourcecore.c +++ b/app/paint/gimpsourcecore.c @@ -337,6 +337,13 @@ gimp_source_core_motion (GimpSourceCore *source_core, origin = *(gimp_symmetry_get_origin (sym)); + gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y); + + coords = origin; + coords.x -= off_x; + coords.y -= off_y; + gimp_symmetry_set_origin (sym, drawable, &coords); + /* Some settings are based on the original stroke. */ opacity = gimp_dynamics_get_linear_value (dynamics, GIMP_DYNAMICS_OUTPUT_OPACITY, @@ -346,8 +353,6 @@ gimp_source_core_motion (GimpSourceCore *source_core, if (opacity == 0.0) return; - gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y); - base_src_offset_x = source_core->offset_x; base_src_offset_y = source_core->offset_y; @@ -398,8 +403,6 @@ gimp_source_core_motion (GimpSourceCore *source_core, for (i = 0; i < n_strokes; i++) { coords = *(gimp_symmetry_get_coords (sym, i)); - coords.x -= off_x; - coords.y -= off_y; gimp_brush_core_eval_transform_symmetry (brush_core, sym, i);