gimp r25816 - in trunk: . app/display app/paint app/tools
- From: mitch svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r25816 - in trunk: . app/display app/paint app/tools
- Date: Mon, 26 May 2008 19:52:09 +0000 (UTC)
Author: mitch
Date: Mon May 26 19:52:09 2008
New Revision: 25816
URL: http://svn.gnome.org/viewvc/gimp?rev=25816&view=rev
Log:
2008-05-26 Michael Natterer <mitch gimp org>
Applied modified patch from Alexia Death. Addresses bug #534770:
* app/paint/gimppaintoptions.[ch]: add properties for scaling
the effects of pressure, velocity and hardness and honor them
in the various get_dynamic_foo() functions.
(gimp_paint_options_get_dynamic_size): look at
pressure_options->size again, that code got lost in one of the
earlier patches.
* app/tools/gimppaintoptions-gui.c: add GimpScaleButtons to the
table for the new properties.
* app/display/gimpdisplayshell-coords.c: don't let "velocity"
reach 1.0, use 0.9999 instead.
Modified:
trunk/ChangeLog
trunk/app/display/gimpdisplayshell-coords.c
trunk/app/paint/gimppaintoptions.c
trunk/app/paint/gimppaintoptions.h
trunk/app/tools/gimppaintoptions-gui.c
Modified: trunk/app/display/gimpdisplayshell-coords.c
==============================================================================
--- trunk/app/display/gimpdisplayshell-coords.c (original)
+++ trunk/app/display/gimpdisplayshell-coords.c Mon May 26 19:52:09 2008
@@ -279,8 +279,8 @@
coords->velocity *
MIN (SMOOTH_FACTOR, coords->velocity));
- /* Speed needs upper limit */
- coords->velocity = MIN (coords->velocity, 1.0);
+ /* Speed needs upper limit but allowing it to be 1.0 is no good in tools*/
+ coords->velocity = MIN (coords->velocity, 0.9999);
}
/* High speed -> less smooth*/
inertia_factor *= (1 - coords->velocity);
Modified: trunk/app/paint/gimppaintoptions.c
==============================================================================
--- trunk/app/paint/gimppaintoptions.c (original)
+++ trunk/app/paint/gimppaintoptions.c Mon May 26 19:52:09 2008
@@ -46,6 +46,7 @@
#define DEFAULT_PRESSURE_SIZE FALSE
#define DEFAULT_PRESSURE_INVERSE_SIZE FALSE
#define DEFAULT_PRESSURE_COLOR FALSE
+#define DEFAULT_PRESSURE_PRESCALE 1.0
#define DEFAULT_VELOCITY_OPACITY FALSE
#define DEFAULT_VELOCITY_HARDNESS FALSE
@@ -53,6 +54,7 @@
#define DEFAULT_VELOCITY_SIZE TRUE
#define DEFAULT_VELOCITY_INVERSE_SIZE FALSE
#define DEFAULT_VELOCITY_COLOR FALSE
+#define DEFAULT_VELOCITY_PRESCALE 1.0
#define DEFAULT_RANDOM_OPACITY FALSE
#define DEFAULT_RANDOM_HARDNESS FALSE
@@ -60,6 +62,7 @@
#define DEFAULT_RANDOM_SIZE FALSE
#define DEFAULT_RANDOM_INVERSE_SIZE FALSE
#define DEFAULT_RANDOM_COLOR FALSE
+#define DEFAULT_RANDOM_PRESCALE 1.0
#define DEFAULT_USE_FADE FALSE
#define DEFAULT_FADE_LENGTH 100.0
@@ -92,6 +95,7 @@
PROP_PRESSURE_SIZE,
PROP_PRESSURE_INVERSE_SIZE,
PROP_PRESSURE_COLOR,
+ PROP_PRESSURE_PRESCALE,
PROP_VELOCITY_OPACITY,
PROP_VELOCITY_HARDNESS,
@@ -99,6 +103,7 @@
PROP_VELOCITY_SIZE,
PROP_VELOCITY_INVERSE_SIZE,
PROP_VELOCITY_COLOR,
+ PROP_VELOCITY_PRESCALE,
PROP_RANDOM_OPACITY,
PROP_RANDOM_HARDNESS,
@@ -106,6 +111,7 @@
PROP_RANDOM_SIZE,
PROP_RANDOM_INVERSE_SIZE,
PROP_RANDOM_COLOR,
+ PROP_RANDOM_PRESCALE,
PROP_USE_FADE,
PROP_FADE_LENGTH,
@@ -142,8 +148,11 @@
GParamSpec *pspec);
static gdouble gimp_paint_options_get_dynamics_mix (gdouble mix1,
+ gdouble mix1_scale,
gdouble mix2,
- gdouble mix3);
+ gdouble mix2_scale,
+ gdouble mix3,
+ gdouble mix3_scale);
G_DEFINE_TYPE (GimpPaintOptions, gimp_paint_options, GIMP_TYPE_TOOL_OPTIONS)
@@ -211,6 +220,10 @@
"pressure-inverse-size", NULL,
DEFAULT_PRESSURE_INVERSE_SIZE,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_PRESSURE_PRESCALE,
+ "pressure-prescale", NULL,
+ 0.0, 1.0, DEFAULT_PRESSURE_PRESCALE,
+ GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_OPACITY,
"velocity-opacity", NULL,
@@ -236,6 +249,10 @@
"velocity-inverse-size", NULL,
DEFAULT_VELOCITY_INVERSE_SIZE,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_VELOCITY_PRESCALE,
+ "velocity-prescale", NULL,
+ 0.0, 1.0, DEFAULT_VELOCITY_PRESCALE,
+ GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_OPACITY,
"random-opacity", NULL,
@@ -261,6 +278,10 @@
"random-inverse-size", NULL,
DEFAULT_RANDOM_INVERSE_SIZE,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_RANDOM_PRESCALE,
+ "random-prescale", NULL,
+ 0.0, 1.0, DEFAULT_RANDOM_PRESCALE,
+ GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_FADE,
"use-fade", NULL,
@@ -426,6 +447,9 @@
case PROP_PRESSURE_COLOR:
pressure_options->color = g_value_get_boolean (value);
break;
+ case PROP_PRESSURE_PRESCALE:
+ pressure_options->prescale = g_value_get_double (value);
+ break;
case PROP_VELOCITY_OPACITY:
velocity_options->opacity = g_value_get_boolean (value);
@@ -445,6 +469,9 @@
case PROP_VELOCITY_COLOR:
velocity_options->color = g_value_get_boolean (value);
break;
+ case PROP_VELOCITY_PRESCALE:
+ velocity_options->prescale = g_value_get_double (value);
+ break;
case PROP_RANDOM_OPACITY:
random_options->opacity = g_value_get_boolean (value);
@@ -464,6 +491,9 @@
case PROP_RANDOM_COLOR:
random_options->color = g_value_get_boolean (value);
break;
+ case PROP_RANDOM_PRESCALE:
+ random_options->prescale = g_value_get_double (value);
+ break;
case PROP_USE_FADE:
fade_options->use_fade = g_value_get_boolean (value);
@@ -577,6 +607,9 @@
case PROP_PRESSURE_COLOR:
g_value_set_boolean (value, pressure_options->color);
break;
+ case PROP_PRESSURE_PRESCALE:
+ g_value_set_double (value, pressure_options->prescale);
+ break;
case PROP_VELOCITY_OPACITY:
g_value_set_boolean (value, velocity_options->opacity);
@@ -596,6 +629,9 @@
case PROP_VELOCITY_COLOR:
g_value_set_boolean (value, velocity_options->color);
break;
+ case PROP_VELOCITY_PRESCALE:
+ g_value_set_double (value, velocity_options->prescale);
+ break;
case PROP_RANDOM_OPACITY:
g_value_set_boolean (value, random_options->opacity);
@@ -615,6 +651,9 @@
case PROP_RANDOM_COLOR:
g_value_set_boolean (value, random_options->color);
break;
+ case PROP_RANDOM_PRESCALE:
+ g_value_set_double (value, random_options->prescale);
+ break;
case PROP_USE_FADE:
g_value_set_boolean (value, fade_options->use_fade);
@@ -899,34 +938,44 @@
*/
static gdouble
gimp_paint_options_get_dynamics_mix (gdouble mix1,
+ gdouble mix1_scale,
gdouble mix2,
- gdouble mix3)
+ gdouble mix2_scale,
+ gdouble mix3,
+ gdouble mix3_scale)
{
- gdouble mixpv = 0.0;
- gint dyn = 0;
+ gdouble scale_sum = 0.0;
+ gdouble result = 1.0;
+
+ if (mix1 >= 0.0)
+ {
+ scale_sum += fabs (mix1_scale);
+ }
+ else mix1 = 0.0;
- if (mix1 >= 0)
+ if (mix2 >= 0.0)
{
- mixpv += mix1;
- dyn++;
+ scale_sum += fabs (mix2_scale);
}
+ else mix2 = 0.0;
- if (mix2 >= 0)
+ if (mix3 >= 0.0)
{
- mixpv += mix2;
- dyn++;
+ scale_sum += fabs (mix3_scale);
}
+ else mix3 = 0.0;
- if (mix3 >= 0)
+ if (scale_sum > 0.0)
{
- mixpv += mix3;
- dyn++;
+ result = (mix1 * mix1_scale) / scale_sum +
+ (mix2 * mix2_scale) / scale_sum +
+ (mix3 * mix3_scale) / scale_sum;
}
- if (dyn == 0)
- return 1.0;
- else
- return mixpv / (gdouble) dyn;
+ if (result < 0.0)
+ result = 1.0 + result;
+
+ return MAX (0.0, result);
}
gdouble
@@ -952,10 +1001,16 @@
if (paint_options->velocity_options->opacity)
velocity = GIMP_PAINT_VELOCITY_SCALE * (1 - coords->velocity);
+
if (paint_options->random_options->opacity)
random = coords->random;
- opacity = gimp_paint_options_get_dynamics_mix (pressure, velocity, random);
+ opacity = gimp_paint_options_get_dynamics_mix (pressure,
+ paint_options->pressure_options->prescale,
+ velocity,
+ paint_options->velocity_options->prescale,
+ random,
+ paint_options->random_options->prescale);
}
return opacity;
@@ -967,7 +1022,7 @@
gboolean use_pressure,
gboolean use_dynamics)
{
- gdouble scale = 1.0;
+ gdouble scale = 1.0;
if (use_dynamics)
{
@@ -975,7 +1030,11 @@
gdouble velocity = -1.0;
gdouble random = -1.0;
- if (paint_options->pressure_options->inverse_size)
+ if (paint_options->pressure_options->size && use_pressure)
+ {
+ pressure = coords->pressure;
+ }
+ else if (paint_options->pressure_options->inverse_size && use_pressure)
{
pressure = 1.0 - 0.9 * coords->pressure;
}
@@ -998,7 +1057,12 @@
random = coords->random;
}
- scale = gimp_paint_options_get_dynamics_mix (pressure, velocity, random);
+ scale = gimp_paint_options_get_dynamics_mix (pressure,
+ paint_options->pressure_options->prescale,
+ velocity,
+ paint_options->velocity_options->prescale,
+ random,
+ paint_options->random_options->prescale);
if (scale < 1 / 64.0)
scale = 1 / 8.0;
@@ -1039,7 +1103,12 @@
if (paint_options->random_options->rate)
random = coords->random;
- rate = gimp_paint_options_get_dynamics_mix (pressure, velocity, random);
+ rate = gimp_paint_options_get_dynamics_mix (pressure,
+ paint_options->pressure_options->prescale,
+ velocity,
+ paint_options->velocity_options->prescale,
+ random,
+ paint_options->random_options->prescale);
}
return rate;
@@ -1073,7 +1142,12 @@
if (paint_options->random_options->color)
random = coords->random;
- color = gimp_paint_options_get_dynamics_mix (pressure, velocity, random);
+ color = gimp_paint_options_get_dynamics_mix (pressure,
+ paint_options->pressure_options->prescale,
+ velocity,
+ paint_options->velocity_options->prescale,
+ random,
+ paint_options->random_options->prescale);
}
return color;
@@ -1106,7 +1180,12 @@
if (paint_options->random_options->hardness)
random = coords->random;
- hardness = gimp_paint_options_get_dynamics_mix (pressure, velocity, random);
+ hardness = gimp_paint_options_get_dynamics_mix (pressure,
+ paint_options->pressure_options->prescale,
+ velocity,
+ paint_options->velocity_options->prescale,
+ random,
+ paint_options->random_options->prescale);
}
return hardness;
Modified: trunk/app/paint/gimppaintoptions.h
==============================================================================
--- trunk/app/paint/gimppaintoptions.h (original)
+++ trunk/app/paint/gimppaintoptions.h Mon May 26 19:52:09 2008
@@ -43,6 +43,7 @@
gboolean size;
gboolean inverse_size;
gboolean color;
+ gdouble prescale;
};
struct _GimpFadeOptions
Modified: trunk/app/tools/gimppaintoptions-gui.c
==============================================================================
--- trunk/app/tools/gimppaintoptions-gui.c (original)
+++ trunk/app/tools/gimppaintoptions-gui.c Mon May 26 19:52:09 2008
@@ -204,7 +204,7 @@
gtk_container_add (GTK_CONTAINER (frame), inner_frame);
gtk_widget_show (inner_frame);
- table = gtk_table_new (4, n_dynamics + 1, FALSE);
+ table = gtk_table_new (4, n_dynamics + 2, FALSE);
gtk_container_add (GTK_CONTAINER (inner_frame), table);
gtk_widget_show (table);
@@ -411,6 +411,7 @@
GObject *config = G_OBJECT (paint_options);
GtkWidget *button;
gint column = 1;
+ GtkWidget *scalebutton;
if (tool_has_opacity_dynamics (tool_type))
{
@@ -466,6 +467,11 @@
labels[column - 1]);
column++;
}
+
+ scalebutton = gimp_prop_scale_button_new (config, "pressure-prescale");
+ gtk_table_attach (table, scalebutton, column, column + 1, row, row + 1,
+ GTK_SHRINK, GTK_SHRINK, 0, 0);
+ gtk_widget_show (scalebutton);
}
static void
@@ -474,8 +480,9 @@
GtkTable *table,
gint row)
{
- GObject *config = G_OBJECT (paint_options);
- gint column = 1;
+ GObject *config = G_OBJECT (paint_options);
+ gint column = 1;
+ GtkWidget *scalebutton;
if (tool_has_opacity_dynamics (tool_type))
{
@@ -506,6 +513,11 @@
dynamics_check_button_new (config, "velocity-color",
table, column++, row);
}
+
+ scalebutton = gimp_prop_scale_button_new (config, "velocity-prescale");
+ gtk_table_attach (table, scalebutton, column, column + 1, row, row + 1,
+ GTK_SHRINK, GTK_SHRINK, 0, 0);
+ gtk_widget_show (scalebutton);
}
static void
@@ -514,8 +526,9 @@
GtkTable *table,
gint row)
{
- GObject*config = G_OBJECT (paint_options);
- gint column = 1;
+ GObject *config = G_OBJECT (paint_options);
+ gint column = 1;
+ GtkWidget *scalebutton;
if (tool_has_opacity_dynamics (tool_type))
{
@@ -546,6 +559,11 @@
dynamics_check_button_new (config, "random-color",
table, column++, row);
}
+
+ scalebutton = gimp_prop_scale_button_new (config, "random-prescale");
+ gtk_table_attach (table, scalebutton, column, column + 1, row, row + 1,
+ GTK_SHRINK, GTK_SHRINK, 0, 0);
+ gtk_widget_show (scalebutton);
}
static GtkWidget *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]