mirror of https://github.com/GNOME/gimp.git
app: Fix dynamics mixing for inputs&outputs that have paint options toggles
This commit is contained in:
parent
d2ad292848
commit
b95dda6eea
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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,
|
||||
¤t_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,
|
||||
¤t_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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue