[gimp] app: fix Ink tool symmetry transform
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: fix Ink tool symmetry transform
- Date: Mon, 27 May 2019 06:17:05 +0000 (UTC)
commit 39e1a6dfeae72900f0a8bf47fbcc6de1d31e9356
Author: Ell <ell_se yahoo com>
Date: Mon May 27 02:13:36 2019 -0400
app: fix Ink tool symmetry transform
... to take tilt into account.
app/paint/gimpink.c | 32 +++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
---
diff --git a/app/paint/gimpink.c b/app/paint/gimpink.c
index e71dda8c47..3714b2c809 100644
--- a/app/paint/gimpink.c
+++ b/app/paint/gimpink.c
@@ -359,7 +359,7 @@ gimp_ink_motion (GimpPaintCore *paint_core,
coords->xtilt,
coords->ytilt,
100,
- gimp_deg_to_rad (angle),
+ angle,
reflect);
ink->last_blobs = g_list_prepend (ink->last_blobs,
@@ -392,7 +392,7 @@ gimp_ink_motion (GimpPaintCore *paint_core,
coords->xtilt,
coords->ytilt,
coords->velocity * 100,
- gimp_deg_to_rad (angle),
+ angle,
reflect);
last_blob = g_list_nth_data (ink->last_blobs, i);
@@ -473,6 +473,7 @@ ink_pen_ellipse (GimpInkOptions *options,
gboolean reflect)
{
GimpBlobFunc blob_function;
+ GimpMatrix3 transform;
gdouble size;
gdouble tsin, tcos;
gdouble aspect, radmin;
@@ -480,7 +481,6 @@ ink_pen_ellipse (GimpInkOptions *options,
gdouble tscale;
gdouble tscale_c;
gdouble tscale_s;
- gdouble blob_angle;
/* Adjust the size depending on pressure. */
@@ -515,13 +515,6 @@ ink_pen_ellipse (GimpInkOptions *options,
if (size * SUBSAMPLE < 1.0)
size = 1.0 / SUBSAMPLE;
- /* Calculate brush angle */
-
- blob_angle = options->blob_angle - angle;
-
- if (reflect)
- blob_angle = -blob_angle;
-
/* Add brush angle/aspect to tilt vectorially */
/* I'm not happy with the way the brush widget info is combined with
@@ -534,14 +527,14 @@ ink_pen_ellipse (GimpInkOptions *options,
tscale_c = tscale * cos (gimp_deg_to_rad (options->tilt_angle));
tscale_s = tscale * sin (gimp_deg_to_rad (options->tilt_angle));
- x = (options->blob_aspect * cos (blob_angle) +
+ x = (options->blob_aspect * cos (options->blob_angle) +
xtilt * tscale_c - ytilt * tscale_s);
- y = (options->blob_aspect * sin (blob_angle) +
+ y = (options->blob_aspect * sin (options->blob_angle) +
ytilt * tscale_c + xtilt * tscale_s);
#ifdef VERBOSE
g_printerr ("angle %g aspect %g; %g %g; %g %g\n",
- blob_angle, options->blob_aspect,
+ options->blob_angle, options->blob_aspect,
tscale_c, tscale_s, x, y);
#endif
@@ -554,10 +547,19 @@ ink_pen_ellipse (GimpInkOptions *options,
}
else
{
- tsin = sin (blob_angle);
- tcos = cos (blob_angle);
+ tcos = cos (options->blob_angle);
+ tsin = sin (options->blob_angle);
}
+ gimp_matrix3_identity (&transform);
+ gimp_matrix3_rotate (&transform, -gimp_deg_to_rad (angle));
+ if (reflect)
+ gimp_matrix3_scale (&transform, -1.0, 1.0);
+
+ gimp_matrix3_transform_point (&transform,
+ tcos, tsin,
+ &tcos, &tsin);
+
aspect = CLAMP (aspect, 1.0, 10.0);
radmin = MAX (1.0, SUBSAMPLE * size / aspect);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]