[gimp/gimp-2-10] app: add symmetry-transform support to the Ink tool
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: add symmetry-transform support to the Ink tool
- Date: Sun, 26 May 2019 18:49:52 +0000 (UTC)
commit eaef7dcf443db3f9e7f76b701fb5be84ee12d1d0
Author: Ell <ell_se yahoo com>
Date: Sun May 26 14:27:35 2019 -0400
app: add symmetry-transform support to the Ink tool
In GimpInk, apply the current symmetry transform, as per
gimp_symmetry_get_transform(), to rendered blobs.
(cherry picked from commit 3b56bd7a9aa7c9210bd469f688f021b835c11983)
app/paint/gimpink.c | 44 +++++++++++++++++++++++++++++++++++---------
1 file changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/app/paint/gimpink.c b/app/paint/gimpink.c
index 9573e83f47..c6e4e8e391 100644
--- a/app/paint/gimpink.c
+++ b/app/paint/gimpink.c
@@ -84,7 +84,9 @@ static GimpBlob * ink_pen_ellipse (GimpInkOptions *options,
gdouble pressure,
gdouble xtilt,
gdouble ytilt,
- gdouble velocity);
+ gdouble velocity,
+ gdouble angle,
+ gboolean reflect);
static void render_blob (GeglBuffer *buffer,
GeglRectangle *rect,
@@ -343,15 +345,22 @@ gimp_ink_motion (GimpPaintCore *paint_core,
for (i = 0; i < n_strokes; i++)
{
+ gdouble angle;
+ gboolean reflect;
+
coords = gimp_symmetry_get_coords (sym, i);
+ gimp_symmetry_get_transform (sym, i, &angle, &reflect);
+
last_blob = ink_pen_ellipse (options,
coords->x,
coords->y,
coords->pressure,
coords->xtilt,
coords->ytilt,
- 100);
+ 100,
+ gimp_deg_to_rad (angle),
+ reflect);
ink->last_blobs = g_list_prepend (ink->last_blobs,
last_blob);
@@ -369,15 +378,22 @@ gimp_ink_motion (GimpPaintCore *paint_core,
{
GimpBlob *blob;
GimpBlob *blob_union = NULL;
+ gdouble angle;
+ gboolean reflect;
coords = gimp_symmetry_get_coords (sym, i);
+
+ gimp_symmetry_get_transform (sym, i, &angle, &reflect);
+
blob = ink_pen_ellipse (options,
coords->x,
coords->y,
coords->pressure,
coords->xtilt,
coords->ytilt,
- coords->velocity * 100);
+ coords->velocity * 100,
+ gimp_deg_to_rad (angle),
+ reflect);
last_blob = g_list_nth_data (ink->last_blobs, i);
blob_union = gimp_blob_convex_union (last_blob, blob);
@@ -452,7 +468,9 @@ ink_pen_ellipse (GimpInkOptions *options,
gdouble pressure,
gdouble xtilt,
gdouble ytilt,
- gdouble velocity)
+ gdouble velocity,
+ gdouble angle,
+ gboolean reflect)
{
GimpBlobFunc blob_function;
gdouble size;
@@ -462,6 +480,7 @@ ink_pen_ellipse (GimpInkOptions *options,
gdouble tscale;
gdouble tscale_c;
gdouble tscale_s;
+ gdouble blob_angle;
/* Adjust the size depending on pressure. */
@@ -496,6 +515,13 @@ 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
@@ -508,14 +534,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 (options->blob_angle) +
+ x = (options->blob_aspect * cos (blob_angle) +
xtilt * tscale_c - ytilt * tscale_s);
- y = (options->blob_aspect * sin (options->blob_angle) +
+ y = (options->blob_aspect * sin (blob_angle) +
ytilt * tscale_c + xtilt * tscale_s);
#ifdef VERBOSE
g_printerr ("angle %g aspect %g; %g %g; %g %g\n",
- options->blob_angle, options->blob_aspect,
+ blob_angle, options->blob_aspect,
tscale_c, tscale_s, x, y);
#endif
@@ -528,8 +554,8 @@ ink_pen_ellipse (GimpInkOptions *options,
}
else
{
- tsin = sin (options->blob_angle);
- tcos = cos (options->blob_angle);
+ tsin = sin (blob_angle);
+ tcos = cos (blob_angle);
}
aspect = CLAMP (aspect, 1.0, 10.0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]