app: Fix dynamics mixing for inputs&outputs that have paint options toggles

This commit is contained in:
Alexia Death 2009-12-18 20:20:45 +02:00
parent d2ad292848
commit b95dda6eea
12 changed files with 58 additions and 9 deletions

View File

@ -24,6 +24,9 @@
#include "core-types.h"
#include "paint/gimppaintoptions.h"
#include "gimpcurve.h"
#include "gimpdynamicsoutput.h"
@ -243,6 +246,7 @@ gimp_dynamics_output_is_enabled (GimpDynamicsOutput *output)
gdouble
gimp_dynamics_output_get_linear_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point)
{
gdouble total = 0.0;
@ -279,10 +283,15 @@ gimp_dynamics_output_get_linear_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_fade)
if ((output->use_fade) && (options))
{
total += fade_point;
factors++;
GimpFadeOptions *fade_options = options->fade_options;
if (fade_options->use_fade)
{
total += fade_point;
factors++;
}
}
if (factors > 0)
@ -299,6 +308,7 @@ gimp_dynamics_output_get_linear_value (GimpDynamicsOutput *output,
gdouble
gimp_dynamics_output_get_angular_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point)
{
gdouble total = 0.0;
@ -368,10 +378,15 @@ gimp_dynamics_output_get_angular_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_fade)
if ((output->use_fade) && (options))
{
total += fade_point;
factors++;
GimpFadeOptions *fade_options = options->fade_options;
if (fade_options->use_fade)
{
total += fade_point;
factors++;
}
}
if (factors > 0)
@ -388,6 +403,7 @@ gimp_dynamics_output_get_angular_value (GimpDynamicsOutput *output,
gdouble
gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point)
{
gdouble total = 0.0;
@ -438,10 +454,15 @@ gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_fade)
if ((output->use_fade) && (options))
{
total += fade_point;
factors++;
GimpFadeOptions *fade_options = options->fade_options;
if (fade_options->use_fade)
{
total += fade_point;
factors++;
}
}
if (factors > 0)

View File

@ -65,12 +65,15 @@ gboolean gimp_dynamics_output_is_enabled (GimpDynamicsOutput *output);
gdouble gimp_dynamics_output_get_linear_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point);
gdouble gimp_dynamics_output_get_angular_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point);
gdouble gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
const GimpCoords *coords,
GimpPaintOptions *options,
gdouble fade_point);

View File

@ -156,6 +156,7 @@ gimp_airbrush_paint (GimpPaintCore *paint_core,
dynamic_rate =
gimp_dynamics_output_get_linear_value (dynamics->rate_output,
coords,
paint_options,
fade_point);
timeout = 10000 / (options->rate * dynamic_rate);
@ -198,6 +199,7 @@ gimp_airbrush_motion (GimpPaintCore *paint_core,
opacity = options->pressure / 100.0;
opacity *= gimp_dynamics_output_get_linear_value(GIMP_BRUSH_CORE(paint_core)->dynamics->opacity_output,
coords,
paint_options,
fade_point);

View File

@ -425,14 +425,17 @@ gimp_brush_core_start (GimpPaintCore *paint_core,
core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
coords,
paint_options,
fade_point);
core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
coords,
paint_options,
fade_point);
core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
coords,
paint_options,
fade_point);
}
}
@ -519,6 +522,7 @@ gimp_brush_core_interpolate (GimpPaintCore *paint_core,
{
dyn_spacing = gimp_dynamics_output_get_linear_value (core->dynamics->spacing_output,
&current_coords,
paint_options,
fade_point);
/* Dynamic spacing assumes that the value set in core is the min value
* and the max is full 200% spacing. This approach differs ofrom the usual
@ -747,6 +751,7 @@ gimp_brush_core_interpolate (GimpPaintCore *paint_core,
dyn_jitter = core->jitter * gimp_dynamics_output_get_linear_value (core->dynamics->jitter_output,
&current_coords,
paint_options,
fade_point);
jitter_dist = g_rand_double_range (core->rand, 0, dyn_jitter);
@ -814,14 +819,17 @@ gimp_brush_core_get_paint_area (GimpPaintCore *paint_core,
core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
coords,
paint_options,
fade_point);
core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
coords,
paint_options,
fade_point);
core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
coords,
paint_options,
fade_point);
}
}

View File

@ -245,6 +245,7 @@ gimp_clone_motion (GimpSourceCore *source_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
gimp_brush_core_paste_canvas (GIMP_BRUSH_CORE (paint_core), drawable,

View File

@ -151,6 +151,7 @@ gimp_convolve_motion (GimpPaintCore *paint_core,
opacity = gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;
@ -164,6 +165,7 @@ gimp_convolve_motion (GimpPaintCore *paint_core,
rate *= gimp_dynamics_output_get_linear_value (dynamics->rate_output,
coords,
paint_options,
fade_point);
gimp_convolve_calculate_matrix (convolve, options->type,

View File

@ -190,6 +190,7 @@ gimp_dodge_burn_motion (GimpPaintCore *paint_core,
opacity = gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;
@ -256,6 +257,7 @@ gimp_dodge_burn_motion (GimpPaintCore *paint_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
/* Replace the newly dodgedburned area (canvas_buf) to the image */

View File

@ -125,6 +125,7 @@ gimp_eraser_motion (GimpPaintCore *paint_core,
opacity = gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;
@ -146,6 +147,7 @@ gimp_eraser_motion (GimpPaintCore *paint_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
gimp_brush_core_paste_canvas (GIMP_BRUSH_CORE (paint_core), drawable,

View File

@ -450,6 +450,7 @@ gimp_heal_motion (GimpSourceCore *source_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
mask_buf = gimp_brush_core_get_brush_mask (GIMP_BRUSH_CORE (source_core),

View File

@ -128,6 +128,7 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core,
opacity *= gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;
@ -141,6 +142,7 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core,
grad_point = gimp_dynamics_output_get_linear_value (dynamics->color_output,
coords,
paint_options,
fade_point);
/* optionally take the color from the current gradient */
@ -188,6 +190,7 @@ _gimp_paintbrush_motion (GimpPaintCore *paint_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
/* finally, let the brush core paste the colored area on the canvas */

View File

@ -262,6 +262,7 @@ gimp_smudge_motion (GimpPaintCore *paint_core,
opacity = gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;
@ -281,6 +282,7 @@ gimp_smudge_motion (GimpPaintCore *paint_core,
/* Enable dynamic rate */
dynamic_rate = gimp_dynamics_output_get_linear_value (dynamics->rate_output,
coords,
paint_options,
fade_point);
rate = (options->rate / 100.0) * dynamic_rate;
@ -324,6 +326,7 @@ gimp_smudge_motion (GimpPaintCore *paint_core,
hardness = gimp_dynamics_output_get_linear_value (dynamics->hardness_output,
coords,
paint_options,
fade_point);
gimp_brush_core_replace_canvas (GIMP_BRUSH_CORE (paint_core), drawable,

View File

@ -366,6 +366,7 @@ gimp_source_core_motion (GimpSourceCore *source_core,
opacity = gimp_dynamics_output_get_linear_value (dynamics->opacity_output,
coords,
paint_options,
fade_point);
if (opacity == 0.0)
return;