[gimp/soc-2009-dynamics] Fade dynamics. Add fade as one more dynamics driving factor on GUI. Implement fading dynamics calcul
- From: zhenfeng zhao <zhenfengz src gnome org>
- To: svn-commits-list gnome org
- Subject: [gimp/soc-2009-dynamics] Fade dynamics. Add fade as one more dynamics driving factor on GUI. Implement fading dynamics calcul
- Date: Sat, 11 Jul 2009 18:51:29 +0000 (UTC)
commit 96baac783f43da753fbe31b1767f740a8d6c5ecd
Author: zhenfeng zhao <zhzzf_0808 hotmail com>
Date: Thu Jul 2 14:45:32 2009 -0300
Fade dynamics. Add fade as one more dynamics driving factor on GUI. Implement fading dynamics calculation. Let fade work with all driven factors. Add pixel_dist parameter to get_dynamic_x. Adjusted function calls for get_dynamic_x.
* app/paint/gimppaintoptions.c: Add initialization for fading dynamics. Add fading related variables similar to Random. Adjust get_dynamics_mix function. Add fading calculation in get_dynamics_x functions. Adjust get_dynamic_x functions for fade dynamics.
* app/paint/gimppaintoptions.h: Add fading_options in GimpDynamicOptions.
* app/tools/gimppaintoptions-gui.c: Add the function fading_options_gui.
* app/paint/gimpclone.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimpheal.c
* app/paint/gimppaintbrush.c
* app/paint/gimpsmudge.c
* app/paint/gimpairbrush.c
* app/paint/gimpbrushcore.c
* app/paint/gimpconvolve.c: Adjust function calls. get_dynamic_opacity function calls were adjusted to have one more parameter, paint_core->pixel_dist.
some key words:
get_dynamic_
pixel_dist
paint_core->pixel_dist
.gitignore | 9 +
app/paint/gimpairbrush.c | 3 +-
app/paint/gimpbrushcore.c | 18 ++-
app/paint/gimpclone.c | 6 +-
app/paint/gimpconvolve.c | 3 +-
app/paint/gimpdodgeburn.c | 6 +-
app/paint/gimperaser.c | 6 +-
app/paint/gimpheal.c | 6 +-
app/paint/gimppaintbrush.c | 9 +-
app/paint/gimppaintoptions.c | 336 ++++++++++++++++++++++++++++++++++----
app/paint/gimppaintoptions.h | 22 ++-
app/paint/gimpsmudge.c | 9 +-
app/tools/gimppaintoptions-gui.c | 77 +++++++++-
13 files changed, 448 insertions(+), 62 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 5ccb71d..6b65d00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,12 @@
+/.anjuta/
+/.anjuta_sym_db.db
+/TODO.tasks
+*.anjuta
+*.c~
+*.h~
+*.patch
+/app/
+
/Makefile
/Makefile.in
/aclocal.m4
diff --git a/app/paint/gimpairbrush.c b/app/paint/gimpairbrush.c
index 9d03136..4ea888e 100644
--- a/app/paint/gimpairbrush.c
+++ b/app/paint/gimpairbrush.c
@@ -146,7 +146,8 @@ gimp_airbrush_paint (GimpPaintCore *paint_core,
airbrush->paint_options = paint_options;
dynamic_rate = gimp_paint_options_get_dynamic_rate (paint_options,
- coords);
+ coords,
+ paint_core->pixel_dist);
timeout = 10000 / (options->rate * dynamic_rate);
diff --git a/app/paint/gimpbrushcore.c b/app/paint/gimpbrushcore.c
index 1d424c1..a7d75a6 100644
--- a/app/paint/gimpbrushcore.c
+++ b/app/paint/gimpbrushcore.c
@@ -374,12 +374,15 @@ gimp_brush_core_start (GimpPaintCore *paint_core,
if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_transforming_brush)
{
core->scale = gimp_paint_options_get_dynamic_size (paint_options, coords,
- TRUE);
+ TRUE,
+ paint_core->pixel_dist);
- core->angle = gimp_paint_options_get_dynamic_angle (paint_options, coords);
+ core->angle = gimp_paint_options_get_dynamic_angle (paint_options, coords,
+ paint_core->pixel_dist);
core->aspect_ratio =
- gimp_paint_options_get_dynamic_aspect_ratio (paint_options, coords);
+ gimp_paint_options_get_dynamic_aspect_ratio (paint_options, coords,
+ paint_core->pixel_dist);
}
core->spacing = (gdouble) gimp_brush_get_spacing (core->main_brush) / 100.0;
@@ -722,12 +725,15 @@ gimp_brush_core_get_paint_area (GimpPaintCore *paint_core,
if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_transforming_brush)
{
core->scale = gimp_paint_options_get_dynamic_size (paint_options, coords,
- TRUE);
+ TRUE,
+ paint_core->pixel_dist);
- core->angle = gimp_paint_options_get_dynamic_angle (paint_options, coords);
+ core->angle = gimp_paint_options_get_dynamic_angle (paint_options, coords,
+ paint_core->pixel_dist);
core->aspect_ratio =
- gimp_paint_options_get_dynamic_aspect_ratio (paint_options, coords);
+ gimp_paint_options_get_dynamic_aspect_ratio (paint_options, coords,
+ paint_core->pixel_dist);
}
core->scale = gimp_brush_core_clamp_brush_scale (core, core->scale);
diff --git a/app/paint/gimpclone.c b/app/paint/gimpclone.c
index dd6b7b8..9fa6f46 100644
--- a/app/paint/gimpclone.c
+++ b/app/paint/gimpclone.c
@@ -238,9 +238,11 @@ gimp_clone_motion (GimpSourceCore *source_core,
}
}
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
gimp_brush_core_paste_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
coords,
diff --git a/app/paint/gimpconvolve.c b/app/paint/gimpconvolve.c
index 7b2cde8..1a9e591 100644
--- a/app/paint/gimpconvolve.c
+++ b/app/paint/gimpconvolve.c
@@ -154,7 +154,8 @@ gimp_convolve_motion (GimpPaintCore *paint_core,
rate = options->rate;
- rate *= gimp_paint_options_get_dynamic_rate (paint_options, coords);
+ rate *= gimp_paint_options_get_dynamic_rate (paint_options, coords,
+ paint_core->pixel_dist);
gimp_convolve_calculate_matrix (convolve, options->type,
brush_core->brush->mask->width / 2,
diff --git a/app/paint/gimpdodgeburn.c b/app/paint/gimpdodgeburn.c
index f09ff7b..1db1f2b 100644
--- a/app/paint/gimpdodgeburn.c
+++ b/app/paint/gimpdodgeburn.c
@@ -246,9 +246,11 @@ gimp_dodge_burn_motion (GimpPaintCore *paint_core,
g_free (temp_data);
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
/* Replace the newly dodgedburned area (canvas_buf) to the image */
gimp_brush_core_replace_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
diff --git a/app/paint/gimperaser.c b/app/paint/gimperaser.c
index a7013ca..b843395 100644
--- a/app/paint/gimperaser.c
+++ b/app/paint/gimperaser.c
@@ -135,9 +135,11 @@ gimp_eraser_motion (GimpPaintCore *paint_core,
color_pixels (temp_buf_get_data (area), col,
area->width * area->height, area->bytes);
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
gimp_brush_core_paste_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
coords,
diff --git a/app/paint/gimpheal.c b/app/paint/gimpheal.c
index 5b7021c..56bbbbd 100644
--- a/app/paint/gimpheal.c
+++ b/app/paint/gimpheal.c
@@ -439,7 +439,8 @@ gimp_heal_motion (GimpSourceCore *source_core,
TempBuf *mask_buf;
gdouble hardness;
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
mask_buf = gimp_brush_core_get_brush_mask (GIMP_BRUSH_CORE (source_core),
coords,
@@ -547,7 +548,8 @@ gimp_heal_motion (GimpSourceCore *source_core,
temp_buf_free (temp);
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
/* replace the canvas with our healed data */
gimp_brush_core_replace_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
diff --git a/app/paint/gimppaintbrush.c b/app/paint/gimppaintbrush.c
index 4f55794..32338ef 100644
--- a/app/paint/gimppaintbrush.c
+++ b/app/paint/gimppaintbrush.c
@@ -131,7 +131,8 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core,
paint_appl_mode = paint_options->application_mode;
- grad_point = gimp_paint_options_get_dynamic_color (paint_options, coords);
+ grad_point = gimp_paint_options_get_dynamic_color (paint_options, coords,
+ paint_core->pixel_dist);
/* optionally take the color from the current gradient */
if (gimp_paint_options_get_gradient_color (paint_options, image,
@@ -176,9 +177,11 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core,
area->bytes);
}
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
/* finally, let the brush core paste the colored area on the canvas */
gimp_brush_core_paste_canvas (brush_core, drawable,
diff --git a/app/paint/gimppaintoptions.c b/app/paint/gimppaintoptions.c
index 96dd741..a4ab651 100644
--- a/app/paint/gimppaintoptions.c
+++ b/app/paint/gimppaintoptions.c
@@ -34,6 +34,7 @@
#include "gimp-intl.h"
+#include "core/gimpcoords.h"
#define DEFAULT_BRUSH_SCALE 1.0
#define DEFAULT_BRUSH_ASPECT_RATIO 1.0
@@ -94,6 +95,16 @@
#define DEFAULT_RANDOM_ANGLE FALSE
#define DEFAULT_RANDOM_PRESCALE 1.0
+#define DEFAULT_FADING_OPACITY FALSE
+#define DEFAULT_FADING_HARDNESS FALSE
+#define DEFAULT_FADING_RATE FALSE
+#define DEFAULT_FADING_SIZE FALSE
+#define DEFAULT_FADING_INVERSE_SIZE FALSE
+#define DEFAULT_FADING_ASPECT_RATIO FALSE
+#define DEFAULT_FADING_COLOR FALSE
+#define DEFAULT_FADING_ANGLE FALSE
+#define DEFAULT_FADING_PRESCALE 1.0
+
#define DEFAULT_USE_FADE FALSE
#define DEFAULT_FADE_LENGTH 100.0
#define DEFAULT_FADE_UNIT GIMP_UNIT_PIXEL
@@ -173,6 +184,16 @@ enum
PROP_RANDOM_ANGLE,
PROP_RANDOM_PRESCALE,
+ PROP_FADING_OPACITY,
+ PROP_FADING_HARDNESS,
+ PROP_FADING_RATE,
+ PROP_FADING_SIZE,
+ PROP_FADING_INVERSE_SIZE,
+ PROP_FADING_ASPECT_RATIO,
+ PROP_FADING_COLOR,
+ PROP_FADING_ANGLE,
+ PROP_FADING_PRESCALE,
+
PROP_USE_FADE,
PROP_FADE_LENGTH,
PROP_FADE_UNIT,
@@ -216,7 +237,9 @@ static gdouble gimp_paint_options_get_dynamics_mix (gdouble mix1,
gdouble mix4,
gdouble mix4_scale,
gdouble mix5,
- gdouble mix5_scale);
+ gdouble mix5_scale,
+ gdouble mix6,
+ gdouble mix6_scale);
G_DEFINE_TYPE (GimpPaintOptions, gimp_paint_options, GIMP_TYPE_TOOL_OPTIONS)
@@ -451,6 +474,39 @@ gimp_paint_options_class_init (GimpPaintOptionsClass *klass)
0.0, 1.0, DEFAULT_RANDOM_PRESCALE,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_OPACITY,
+ "fading-opacity", NULL,
+ DEFAULT_FADING_OPACITY,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_HARDNESS,
+ "fading-hardness", NULL,
+ DEFAULT_FADING_HARDNESS,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_RATE,
+ "fading-rate", NULL,
+ DEFAULT_FADING_RATE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_SIZE,
+ "fading-size", NULL,
+ DEFAULT_FADING_SIZE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_COLOR,
+ "fading-color", NULL,
+ DEFAULT_FADING_COLOR,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_ANGLE,
+ "fading-angle", NULL,
+ DEFAULT_FADING_ANGLE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_INVERSE_SIZE,
+ "fading-inverse-size", NULL,
+ DEFAULT_FADING_INVERSE_SIZE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_FADING_PRESCALE,
+ "fading-prescale", NULL,
+ 0.0, 1.0, DEFAULT_FADING_PRESCALE,
+ GIMP_PARAM_STATIC_STRINGS);
+
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_FADE,
"use-fade", NULL,
DEFAULT_USE_FADE,
@@ -476,6 +532,10 @@ gimp_paint_options_class_init (GimpPaintOptionsClass *klass)
"random-aspect-ratio", NULL,
DEFAULT_RANDOM_ASPECT_RATIO,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_ASPECT_RATIO,
+ "fading-aspect-ratio", NULL,
+ DEFAULT_FADING_ASPECT_RATIO,
+ GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_GRADIENT,
"use-gradient", NULL,
DEFAULT_USE_GRADIENT,
@@ -545,6 +605,7 @@ gimp_paint_options_init (GimpPaintOptions *options)
options->direction_options = g_slice_new0 (GimpDynamicOptions);
options->tilt_options = g_slice_new0 (GimpDynamicOptions);
options->random_options = g_slice_new0 (GimpDynamicOptions);
+ options->fading_options = g_slice_new0 (GimpDynamicOptions);
options->fade_options = g_slice_new0 (GimpFadeOptions);
options->jitter_options = g_slice_new0 (GimpJitterOptions);
options->gradient_options = g_slice_new0 (GimpGradientOptions);
@@ -563,6 +624,7 @@ gimp_paint_options_finalize (GObject *object)
g_slice_free (GimpDynamicOptions, options->direction_options);
g_slice_free (GimpDynamicOptions, options->tilt_options);
g_slice_free (GimpDynamicOptions, options->random_options);
+ g_slice_free (GimpDynamicOptions, options->fading_options);
g_slice_free (GimpFadeOptions, options->fade_options);
g_slice_free (GimpJitterOptions, options->jitter_options);
g_slice_free (GimpGradientOptions, options->gradient_options);
@@ -582,6 +644,7 @@ gimp_paint_options_set_property (GObject *object,
GimpDynamicOptions *direction_options = options->direction_options;
GimpDynamicOptions *tilt_options = options->tilt_options;
GimpDynamicOptions *random_options = options->random_options;
+ GimpDynamicOptions *fading_options = options->fading_options;
GimpFadeOptions *fade_options = options->fade_options;
GimpJitterOptions *jitter_options = options->jitter_options;
GimpGradientOptions *gradient_options = options->gradient_options;
@@ -795,6 +858,42 @@ gimp_paint_options_set_property (GObject *object,
case PROP_RANDOM_PRESCALE:
random_options->prescale = g_value_get_double (value);
break;
+/*Fading*/
+ case PROP_FADING_OPACITY:
+ fading_options->opacity = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_HARDNESS:
+ fading_options->hardness = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_RATE:
+ fading_options->rate = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_SIZE:
+ fading_options->size = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_INVERSE_SIZE:
+ fading_options->inverse_size = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_ASPECT_RATIO:
+ fading_options->aspect_ratio = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_COLOR:
+ fading_options->color = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_ANGLE:
+ fading_options->angle = g_value_get_boolean (value);
+ break;
+
+ case PROP_FADING_PRESCALE:
+ fading_options->prescale = g_value_get_double (value);
+ break;
case PROP_USE_FADE:
fade_options->use_fade = g_value_get_boolean (value);
@@ -878,6 +977,7 @@ gimp_paint_options_get_property (GObject *object,
GimpDynamicOptions *direction_options = options->direction_options;
GimpDynamicOptions *tilt_options = options->tilt_options;
GimpDynamicOptions *random_options = options->random_options;
+ GimpDynamicOptions *fading_options = options->fading_options;
GimpFadeOptions *fade_options = options->fade_options;
GimpJitterOptions *jitter_options = options->jitter_options;
GimpGradientOptions *gradient_options = options->gradient_options;
@@ -1093,6 +1193,44 @@ gimp_paint_options_get_property (GObject *object,
g_value_set_double (value, random_options->prescale);
break;
+/*fading*/
+
+ case PROP_FADING_OPACITY:
+ g_value_set_boolean (value, fading_options->opacity);
+ break;
+
+ case PROP_FADING_HARDNESS:
+ g_value_set_boolean (value, fading_options->hardness);
+ break;
+
+ case PROP_FADING_RATE:
+ g_value_set_boolean (value, fading_options->rate);
+ break;
+
+ case PROP_FADING_SIZE:
+ g_value_set_boolean (value, fading_options->size);
+ break;
+
+ case PROP_FADING_INVERSE_SIZE:
+ g_value_set_boolean (value, fading_options->inverse_size);
+ break;
+
+ case PROP_FADING_ASPECT_RATIO:
+ g_value_set_boolean (value, fading_options->aspect_ratio);
+ break;
+
+ case PROP_FADING_COLOR:
+ g_value_set_boolean (value, fading_options->color);
+ break;
+
+ case PROP_FADING_ANGLE:
+ g_value_set_boolean (value, fading_options->angle);
+ break;
+
+ case PROP_FADING_PRESCALE:
+ g_value_set_double (value, fading_options->prescale);
+ break;
+
case PROP_USE_FADE:
g_value_set_boolean (value, fade_options->use_fade);
break;
@@ -1210,6 +1348,8 @@ gimp_paint_options_get_fade (GimpPaintOptions *paint_options,
gdouble pixel_dist)
{
GimpFadeOptions *fade_options;
+ gdouble z = -1.0;
+
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options),
GIMP_OPACITY_OPAQUE);
@@ -1244,8 +1384,14 @@ gimp_paint_options_get_fade (GimpPaintOptions *paint_options,
MAX (xres, yres) / unit_factor);
}
break;
- }
+
+ //printf("fade_out: %f", fade_out);
+ //printf("pixel_dist: %f", pixel_dist);
+ }
+ //printf("fade_out: %f", fade_out);
+ //printf("pixel_dist: %f", pixel_dist);
+
/* factor in the fade out value */
if (fade_out > 0.0)
{
@@ -1253,10 +1399,11 @@ gimp_paint_options_get_fade (GimpPaintOptions *paint_options,
/* Model the amount of paint left as a gaussian curve */
x = pixel_dist / fade_out;
+ z = exp (- x * x * 5.541);
+ return z; /* ln (1/255) */
- return exp (- x * x * 5.541); /* ln (1/255) */
}
-
+
return GIMP_OPACITY_TRANSPARENT;
}
@@ -1301,7 +1448,8 @@ gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
paint_options->velocity_options->color ||
paint_options->direction_options->color ||
paint_options->tilt_options->color ||
- paint_options->random_options->color)
+ paint_options->random_options->color ||
+ paint_options->fading_options->color)
{
gimp_gradient_get_color_at (gradient, GIMP_CONTEXT (paint_options),
NULL, grad_point,
@@ -1378,13 +1526,16 @@ gimp_paint_options_get_brush_mode (GimpPaintOptions *paint_options)
paint_options->velocity_options->hardness ||
paint_options->random_options->hardness)
return GIMP_BRUSH_PRESSURE;
-
+
return GIMP_BRUSH_SOFT;
}
/* Calculates dynamics mix to be used for same parameter
* (velocity/pressure/direction/tilt/random) mix Needed in may places and tools.
+ *
+ * Added one parameter: fading, the 6th driving factor.
+ * (velocity/pressure/direction/tilt/random/fading)
*/
static gdouble
gimp_paint_options_get_dynamics_mix (gdouble mix1,
@@ -1396,7 +1547,9 @@ gimp_paint_options_get_dynamics_mix (gdouble mix1,
gdouble mix4,
gdouble mix4_scale,
gdouble mix5,
- gdouble mix5_scale)
+ gdouble mix5_scale,
+ gdouble mix6,
+ gdouble mix6_scale)
{
gdouble scale_sum = 0.0;
gdouble result = 1.0;
@@ -1431,13 +1584,20 @@ gimp_paint_options_get_dynamics_mix (gdouble mix1,
}
else mix5 = 0.0;
+ if (mix6 > -1.0)
+ {
+ scale_sum += fabs (mix6_scale);
+ }
+ else mix6 = 0.0;
+
if (scale_sum > 0.0)
{
result = (mix1 * mix1_scale) / scale_sum +
(mix2 * mix2_scale) / scale_sum +
(mix3 * mix3_scale) / scale_sum +
(mix4 * mix4_scale) / scale_sum +
- (mix5 * mix5_scale) / scale_sum;
+ (mix5 * mix5_scale) / scale_sum +
+ (mix6 * mix6_scale) / scale_sum;
}
if (result < 0.0)
@@ -1448,7 +1608,8 @@ gimp_paint_options_get_dynamics_mix (gdouble mix1,
gdouble
gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble opacity = 1.0;
@@ -1459,13 +1620,15 @@ gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
paint_options->velocity_options->opacity ||
paint_options->direction_options->opacity ||
paint_options->tilt_options->opacity ||
- paint_options->random_options->opacity)
+ paint_options->random_options->opacity||
+ paint_options->fading_options->opacity)
{
gdouble pressure = -1.0;
gdouble velocity = -1.0;
gdouble direction = -1.0;
gdouble tilt = -1.0;
gdouble random = -1.0;
+ gdouble fading = -1.0;
if (paint_options->pressure_options->opacity)
@@ -1473,17 +1636,36 @@ gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
if (paint_options->velocity_options->opacity)
velocity = GIMP_PAINT_VELOCITY_SCALE * (1 - coords->velocity);
-
+ //printf("velocity: %f", velocity);
+
if (paint_options->random_options->opacity)
random = g_random_double_range (0.0, 1.0);
+ //printf("%f", random);
- if (paint_options->tilt_options->opacity)
+ if (paint_options->tilt_options->opacity)
tilt = 1.0 - sqrt (SQR (coords->xtilt) + SQR (coords->ytilt));
if (paint_options->direction_options->opacity)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
- opacity = gimp_paint_options_get_dynamics_mix (pressure,
+ if (paint_options->fading_options->opacity)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ /*
+ printf("fade_out: %f", fade_out);
+ printf("pixel_dist: %f", pixel_dist);
+ printf("fading value: %f", fading);
+ */
+ //printf("fading-cor: %f", coords->fading);
+
+ }
+
+ opacity = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
paint_options->velocity_options->prescale,
@@ -1492,7 +1674,9 @@ gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
}
return opacity;
@@ -1501,7 +1685,8 @@ gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
const GimpCoords *coords,
- gboolean use_dynamics)
+ gboolean use_dynamics,
+ gdouble pixel_dist)
{
gdouble scale = 1.0;
@@ -1512,7 +1697,8 @@ gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
gdouble direction = -1.0;
gdouble random = -1.0;
gdouble tilt = -1.0;
-
+ gdouble fading = -1.0;
+
if (paint_options->pressure_options->size)
{
pressure = coords->pressure;
@@ -1552,6 +1738,18 @@ gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
if (paint_options->direction_options->size)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
+
+ if (paint_options->fading_options->size ||
+ paint_options->fading_options->inverse_size)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
+
scale = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
@@ -1561,7 +1759,9 @@ gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
if (scale < 1 / 64.0)
scale = 1 / 8.0;
@@ -1576,7 +1776,8 @@ gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_aspect_ratio (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble aspect_ratio = 1.0;
@@ -1587,13 +1788,15 @@ gimp_paint_options_get_dynamic_aspect_ratio (GimpPaintOptions *paint_options,
paint_options->velocity_options->aspect_ratio ||
paint_options->direction_options->aspect_ratio ||
paint_options->tilt_options->aspect_ratio ||
- paint_options->random_options->aspect_ratio)
+ paint_options->random_options->aspect_ratio ||
+ paint_options->fading_options->aspect_ratio)
{
gdouble pressure = -1.0;
gdouble velocity = -1.0;
gdouble direction = -1.0;
gdouble tilt = -1.0;
gdouble random = -1.0;
+ gdouble fading = -1.0;
if (paint_options->pressure_options->aspect_ratio)
@@ -1628,6 +1831,16 @@ gimp_paint_options_get_dynamic_aspect_ratio (GimpPaintOptions *paint_options,
direction = 1 / direction;
}
+ if (paint_options->fading_options->aspect_ratio)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
+
aspect_ratio = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
@@ -1637,7 +1850,9 @@ gimp_paint_options_get_dynamic_aspect_ratio (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
}
return paint_options->brush_aspect_ratio * aspect_ratio;
@@ -1645,7 +1860,8 @@ gimp_paint_options_get_dynamic_aspect_ratio (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble rate = 1.0;
@@ -1663,6 +1879,7 @@ gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
gdouble direction = -1.0;
gdouble random = -1.0;
gdouble tilt = -1.0;
+ gdouble fading = -1.0;
if (paint_options->pressure_options->rate)
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
@@ -1679,6 +1896,16 @@ gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
if (paint_options->direction_options->rate)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
+ if (paint_options->fading_options->rate)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
+
rate = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
@@ -1688,7 +1915,9 @@ gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
}
return rate;
@@ -1697,7 +1926,8 @@ gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble color = 1.0;
@@ -1708,13 +1938,15 @@ gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
paint_options->velocity_options->color ||
paint_options->direction_options->color ||
paint_options->tilt_options->color ||
- paint_options->random_options->color)
+ paint_options->random_options->color ||
+ paint_options->fading_options->color)
{
gdouble pressure = -1.0;
gdouble velocity = -1.0;
gdouble direction = -1.0;
gdouble random = -1.0;
gdouble tilt = -1.0;
+ gdouble fading = -1.0;
if (paint_options->pressure_options->color)
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
@@ -1731,6 +1963,16 @@ gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
if (paint_options->direction_options->color)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
+ if (paint_options->fading_options->color)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
+
color = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
@@ -1740,7 +1982,9 @@ gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
}
return color;
@@ -1748,7 +1992,8 @@ gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble hardness = 1.0;
@@ -1759,13 +2004,15 @@ gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
paint_options->velocity_options->hardness ||
paint_options->direction_options->hardness ||
paint_options->tilt_options->hardness ||
- paint_options->random_options->hardness)
+ paint_options->random_options->hardness ||
+ paint_options->fading_options->hardness)
{
gdouble pressure = -1.0;
gdouble velocity = -1.0;
gdouble direction = -1.0;
gdouble random = -1.0;
gdouble tilt = -1.0;
+ gdouble fading = -1.0;
if (paint_options->pressure_options->hardness)
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
@@ -1782,6 +2029,16 @@ gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
if (paint_options->direction_options->hardness)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
+ if (paint_options->fading_options->hardness)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
+
hardness = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
velocity,
@@ -1791,7 +2048,9 @@ gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
}
return hardness;
@@ -1799,7 +2058,8 @@ gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
gdouble
gimp_paint_options_get_dynamic_angle (GimpPaintOptions *paint_options,
- const GimpCoords *coords)
+ const GimpCoords *coords,
+ gdouble pixel_dist)
{
gdouble angle = 1.0;
@@ -1810,14 +2070,15 @@ gimp_paint_options_get_dynamic_angle (GimpPaintOptions *paint_options,
paint_options->velocity_options->angle ||
paint_options->direction_options->angle ||
paint_options->tilt_options->angle ||
- paint_options->random_options->angle)
+ paint_options->random_options->angle ||
+ paint_options->fading_options->angle)
{
gdouble pressure = -1.0;
gdouble velocity = -1.0;
gdouble direction = -1.0;
gdouble random = -1.0;
gdouble tilt = -1.0;
-
+ gdouble fading = -1.0;
if (paint_options->pressure_options->angle)
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
@@ -1862,6 +2123,15 @@ gimp_paint_options_get_dynamic_angle (GimpPaintOptions *paint_options,
if (paint_options->direction_options->angle)
direction = coords->direction + 0.5; /* mixer does not mix negative angles right so we shift */
+ if (paint_options->fading_options->rate)
+ {
+ gdouble p;
+ gdouble fade_out;
+
+ fade_out = DEFAULT_FADE_LENGTH;
+ p = pixel_dist / fade_out;
+ fading = exp (- p * p * 5.541);
+ }
angle = gimp_paint_options_get_dynamics_mix (pressure,
paint_options->pressure_options->prescale,
@@ -1872,7 +2142,9 @@ gimp_paint_options_get_dynamic_angle (GimpPaintOptions *paint_options,
tilt,
paint_options->tilt_options->prescale,
direction,
- paint_options->direction_options->prescale);
+ paint_options->direction_options->prescale,
+ fading,
+ paint_options->fading_options->prescale);
angle = angle - 0.5;
}
diff --git a/app/paint/gimppaintoptions.h b/app/paint/gimppaintoptions.h
index e72a632..bb70952 100644
--- a/app/paint/gimppaintoptions.h
+++ b/app/paint/gimppaintoptions.h
@@ -103,6 +103,7 @@ struct _GimpPaintOptions
GimpDynamicOptions *direction_options;
GimpDynamicOptions *tilt_options;
GimpDynamicOptions *random_options;
+ GimpDynamicOptions *fading_options;
GimpFadeOptions *fade_options;
GimpJitterOptions *jitter_options;
@@ -144,27 +145,34 @@ GimpBrushApplicationMode
gdouble gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
const GimpCoords *coords,
- gboolean use_dynamics);
+ gboolean use_dynamics,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_aspect_ratio
(GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_angle (GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
gdouble gimp_paint_options_get_dynamic_hardness(GimpPaintOptions *paint_options,
- const GimpCoords *coords);
+ const GimpCoords *coords,
+ gdouble pixel_dist);
#endif /* __GIMP_PAINT_OPTIONS_H__ */
diff --git a/app/paint/gimpsmudge.c b/app/paint/gimpsmudge.c
index e526abf..8783664 100644
--- a/app/paint/gimpsmudge.c
+++ b/app/paint/gimpsmudge.c
@@ -271,7 +271,8 @@ gimp_smudge_motion (GimpPaintCore *paint_core,
area->x, area->y, area->width, area->height, FALSE);
/* Enable dynamic rate */
- dynamic_rate = gimp_paint_options_get_dynamic_rate (paint_options, coords);
+ dynamic_rate = gimp_paint_options_get_dynamic_rate (paint_options, coords,
+ paint_core->pixel_dist);
rate = (options->rate / 100.0) * dynamic_rate;
/* The tempPR will be the built up buffer (for smudge) */
@@ -311,9 +312,11 @@ gimp_smudge_motion (GimpPaintCore *paint_core,
else
copy_region (&tempPR, &destPR);
- opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords);
+ opacity *= gimp_paint_options_get_dynamic_opacity (paint_options, coords,
+ paint_core->pixel_dist);
- hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords);
+ hardness = gimp_paint_options_get_dynamic_hardness (paint_options, coords,
+ paint_core->pixel_dist);
gimp_brush_core_replace_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
coords,
diff --git a/app/tools/gimppaintoptions-gui.c b/app/tools/gimppaintoptions-gui.c
index 3dd34ca..3ebc84c 100644
--- a/app/tools/gimppaintoptions-gui.c
+++ b/app/tools/gimppaintoptions-gui.c
@@ -76,6 +76,12 @@ static void random_options_gui (GimpPaintOptions *paint_options,
GType tool_type,
GtkTable *table,
gint row);
+/**/
+static void fading_options_gui (GimpPaintOptions *paint_options,
+ GType tool_type,
+ GtkTable *table,
+ gint row);
+/**/
static GtkWidget * fade_options_gui (GimpPaintOptions *paint_options,
GType tool_type);
static GtkWidget * gradient_options_gui (GimpPaintOptions *paint_options,
@@ -234,7 +240,7 @@ gimp_paint_options_gui (GimpToolOptions *tool_options)
gtk_container_add (GTK_CONTAINER (frame), inner_frame);
gtk_widget_show (inner_frame);
- table = gtk_table_new (5, n_dynamics + 2, FALSE);
+ table = gtk_table_new (7, n_dynamics + 2, FALSE);
gtk_container_add (GTK_CONTAINER (inner_frame), table);
gtk_widget_show (table);
@@ -268,6 +274,14 @@ gimp_paint_options_gui (GimpToolOptions *tool_options)
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (label);
+//@@Nicolas
+
+ label = gtk_label_new (_("Fading - new:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 6, 7,
+ GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
pressure_options_gui (options, tool_type,
GTK_TABLE (table), 1,
dynamics_labels);
@@ -284,6 +298,9 @@ gimp_paint_options_gui (GimpToolOptions *tool_options)
random_options_gui (options, tool_type,
GTK_TABLE (table), 5);
+ fading_options_gui (options, tool_type,
+ GTK_TABLE (table), 6);
+
/* EEK: pack the fixed *after* the buttons so the table calls
* size-allocates on it *before* it places the toggles. Fixes
* label positions in RTL mode.
@@ -790,6 +807,64 @@ random_options_gui (GimpPaintOptions *paint_options,
gtk_widget_show (scalebutton);
}
+static void
+fading_options_gui (GimpPaintOptions *paint_options,
+ GType tool_type,
+ GtkTable *table,
+ gint row)
+{
+ GObject *config = G_OBJECT (paint_options);
+ gint column = 1;
+ GtkWidget *scalebutton;
+
+ if (tool_has_opacity_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-opacity",
+ table, column++, row);
+ }
+
+ if (tool_has_hardness_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-hardness",
+ table, column++, row);
+ }
+
+ if (tool_has_rate_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-rate",
+ table, column++, row);
+ }
+
+ if (tool_has_size_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-size",
+ table, column++, row);
+ }
+
+ if (tool_has_aspect_ratio_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-aspect-ratio",
+ table, column++, row);
+ }
+
+ if (tool_has_angle_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-angle",
+ table, column++, row);
+ }
+
+ if (tool_has_color_dynamics (tool_type))
+ {
+ dynamics_check_button_new (config, "fading-color",
+ table, column++, row);
+ }
+
+ scalebutton = gimp_prop_scale_button_new (config, "fading-prescale");
+ gtk_table_attach (table, scalebutton, column, column + 1, row, row + 1,
+ GTK_SHRINK, GTK_SHRINK, 0, 0);
+ gtk_widget_show (scalebutton);
+}
+
static GtkWidget *
fade_options_gui (GimpPaintOptions *paint_options,
GType tool_type)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]