app: Support for wheel input found in highend wacom tablets&tools

This commit is contained in:
Alexia Death 2010-03-09 22:22:38 +02:00
parent 96b371b775
commit 5fda650281
4 changed files with 110 additions and 10 deletions

View file

@ -39,6 +39,7 @@
#define DEFAULT_USE_VELOCITY FALSE
#define DEFAULT_USE_DIRECTION FALSE
#define DEFAULT_USE_TILT FALSE
#define DEFAULT_USE_WHEEL FALSE
#define DEFAULT_USE_RANDOM FALSE
#define DEFAULT_USE_FADE FALSE
@ -52,12 +53,14 @@ enum
PROP_USE_VELOCITY,
PROP_USE_DIRECTION,
PROP_USE_TILT,
PROP_USE_WHEEL,
PROP_USE_RANDOM,
PROP_USE_FADE,
PROP_PRESSURE_CURVE,
PROP_VELOCITY_CURVE,
PROP_DIRECTION_CURVE,
PROP_TILT_CURVE,
PROP_WHEEL_CURVE,
PROP_RANDOM_CURVE,
PROP_FADE_CURVE
};
@ -126,6 +129,12 @@ gimp_dynamics_output_class_init (GimpDynamicsOutputClass *klass)
DEFAULT_USE_TILT,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_WHEEL,
"use-wheel", NULL,
DEFAULT_USE_TILT,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_RANDOM,
"use-random", NULL,
DEFAULT_USE_RANDOM,
@ -156,6 +165,11 @@ gimp_dynamics_output_class_init (GimpDynamicsOutputClass *klass)
GIMP_TYPE_CURVE,
GIMP_CONFIG_PARAM_AGGREGATE);
GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_WHEEL_CURVE,
"wheel-curve", NULL,
GIMP_TYPE_CURVE,
GIMP_CONFIG_PARAM_AGGREGATE);
GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_RANDOM_CURVE,
"random-curve", NULL,
GIMP_TYPE_CURVE,
@ -179,6 +193,8 @@ gimp_dynamics_output_init (GimpDynamicsOutput *output)
"direction-curve");
output->tilt_curve = gimp_dynamics_output_create_curve (output,
"tilt-curve");
output->wheel_curve = gimp_dynamics_output_create_curve (output,
"wheel-curve");
output->random_curve = gimp_dynamics_output_create_curve (output,
"random-curve");
output->fade_curve = gimp_dynamics_output_create_curve (output,
@ -194,6 +210,7 @@ gimp_dynamics_output_finalize (GObject *object)
g_object_unref (output->velocity_curve);
g_object_unref (output->direction_curve);
g_object_unref (output->tilt_curve);
g_object_unref (output->wheel_curve);
g_object_unref (output->random_curve);
g_object_unref (output->fade_curve);
@ -230,6 +247,10 @@ gimp_dynamics_output_set_property (GObject *object,
output->use_tilt = g_value_get_boolean (value);
break;
case PROP_USE_WHEEL:
output->use_wheel = g_value_get_boolean (value);
break;
case PROP_USE_RANDOM:
output->use_random = g_value_get_boolean (value);
break;
@ -258,6 +279,11 @@ gimp_dynamics_output_set_property (GObject *object,
output->tilt_curve);
break;
case PROP_WHEEL_CURVE:
gimp_dynamics_output_copy_curve (g_value_get_object (value),
output->wheel_curve);
break;
case PROP_RANDOM_CURVE:
gimp_dynamics_output_copy_curve (g_value_get_object (value),
output->random_curve);
@ -304,6 +330,10 @@ gimp_dynamics_output_get_property (GObject *object,
g_value_set_boolean (value, output->use_tilt);
break;
case PROP_USE_WHEEL:
g_value_set_boolean (value, output->use_wheel);
break;
case PROP_USE_RANDOM:
g_value_set_boolean (value, output->use_random);
break;
@ -328,6 +358,10 @@ gimp_dynamics_output_get_property (GObject *object,
g_value_set_object (value, output->tilt_curve);
break;
case PROP_WHEEL_CURVE:
g_value_set_object (value, output->wheel_curve);
break;
case PROP_RANDOM_CURVE:
g_value_set_object (value, output->random_curve);
break;
@ -364,6 +398,7 @@ gimp_dynamics_output_is_enabled (GimpDynamicsOutput *output)
output->use_velocity ||
output->use_direction ||
output->use_tilt ||
output->use_wheel ||
output->use_random ||
output->use_fade);
}
@ -406,6 +441,18 @@ gimp_dynamics_output_get_linear_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_wheel)
{
gdouble wheel;
if (coords->wheel >= 0.5)
wheel = (coords->wheel - 0.5) * 2;
else
wheel = 1 - coords->wheel * 2;
total += gimp_curve_map_value (output->wheel_curve, wheel);
factors++;
}
if (output->use_random)
{
total += gimp_curve_map_value (output->random_curve,
@ -503,6 +550,14 @@ gimp_dynamics_output_get_angular_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_wheel)
{
gdouble angle = 1.0 - fmod(0.5 + coords->wheel, 1);
total += gimp_curve_map_value (output->wheel_curve, angle);
factors++;
}
if (output->use_random)
{
total += gimp_curve_map_value (output->random_curve,
@ -544,26 +599,26 @@ gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
if (output->use_pressure)
{
total += gimp_curve_map_value (output->pressure_curve, 2 * coords->pressure);
total += 2 * gimp_curve_map_value (output->pressure_curve, coords->pressure);
factors++;
}
if (output->use_velocity)
{
total += gimp_curve_map_value (output->velocity_curve, 2 * coords->velocity);
total += 2 * gimp_curve_map_value (output->velocity_curve, coords->velocity);
factors++;
}
if (output->use_direction)
{
gdouble direction = 0.0;
gdouble direction = gimp_curve_map_value (output->direction_curve, coords->direction);
direction = fmod (1 + coords->direction, 0.5) / 0.25;
direction = fmod (1 + direction, 0.5) / 0.25;
if ((coords->direction > 0.0) && (coords->direction < 0.5))
direction = 1 / direction;
total += gimp_curve_map_value (output->direction_curve, direction);
total += direction;
factors++;
}
@ -575,16 +630,23 @@ gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
factors++;
}
if (output->use_wheel)
{
total += 2 * gimp_curve_map_value (output->wheel_curve, coords->wheel);
factors++;
}
if (output->use_random)
{
gdouble random = g_random_double_range (0.0, 1.0);
gdouble random = gimp_curve_map_value (output->random_curve,
g_random_double_range (0.0, 1.0));
if (random <= 0.5)
random = 1 / (random / 0.5 * (2.0 - 1.0) + 1.0);
else
random = (random - 0.5) / (1.0 - 0.5) * (2.0 - 1.0) + 1.0;
total += gimp_curve_map_value (output->random_curve, random);
total += random;
factors++;
}
@ -606,6 +668,7 @@ gimp_dynamics_output_get_aspect_value (GimpDynamicsOutput *output,
g_printerr ("Dynamics queried(aspect). Result: %f, factors: %d, total: %f\n",
result, factors, total);
#endif
if (result < 0.25) result = 0.25;
return result;
}

View file

@ -42,6 +42,7 @@ struct _GimpDynamicsOutput
gboolean use_velocity;
gboolean use_direction;
gboolean use_tilt;
gboolean use_wheel;
gboolean use_random;
gboolean use_fade;
@ -49,6 +50,7 @@ struct _GimpDynamicsOutput
GimpCurve *velocity_curve;
GimpCurve *direction_curve;
GimpCurve *tilt_curve;
GimpCurve *wheel_curve;
GimpCurve *random_curve;
GimpCurve *fade_curve;
};

View file

@ -98,7 +98,7 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor);
GimpDynamics *dynamics;
GtkWidget *fixed;
GtkWidget *input_labels[6];
GtkWidget *input_labels[7];
GtkWidget *frame;
gint n_inputs = G_N_ELEMENTS (input_labels);
gint i;
@ -147,8 +147,9 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
input_labels[1] = gtk_label_new (_("Velocity"));
input_labels[2] = gtk_label_new (_("Direction"));
input_labels[3] = gtk_label_new (_("Tilt"));
input_labels[4] = gtk_label_new (_("Random"));
input_labels[5] = gtk_label_new (_("Fade"));
input_labels[4] = gtk_label_new (_("Wheel"));
input_labels[5] = gtk_label_new (_("Random"));
input_labels[6] = gtk_label_new (_("Fade"));
fixed = gtk_fixed_new ();
@ -320,6 +321,11 @@ gimp_dynamics_editor_add_output_row (GObject *config,
column++;
button = dynamics_check_button_new (config, "use-wheel",
table, column, row);
column++;
button = dynamics_check_button_new (config, "use-random",
table, column, row);

View file

@ -60,6 +60,7 @@ enum
INPUT_VELOCITY,
INPUT_DIRECTION,
INPUT_TILT,
INPUT_WHEEL,
INPUT_RANDOM,
INPUT_FADE,
N_INPUTS
@ -233,6 +234,13 @@ gimp_dynamics_output_editor_constructor (GType type,
INPUT_COLUMN_NAME, _("Tilt"),
-1);
gtk_list_store_insert_with_values (private->input_list,
NULL, INPUT_WHEEL,
INPUT_COLUMN_INDEX, INPUT_WHEEL,
INPUT_COLUMN_USE_INPUT, private->output->use_wheel,
INPUT_COLUMN_NAME, _("Wheel"),
-1);
gtk_list_store_insert_with_values (private->input_list,
NULL, INPUT_RANDOM,
INPUT_COLUMN_INDEX, INPUT_RANDOM,
@ -487,6 +495,19 @@ gimp_dynamics_output_editor_activate_input (gint input,
&bg_color);
}
if (input == INPUT_WHEEL)
{
gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view),
private->output->wheel_curve);
private->active_curve = private->output->wheel_curve;
}
else if (private->output->use_wheel)
{
gimp_curve_view_add_background (GIMP_CURVE_VIEW (private->curve_view),
private->output->wheel_curve,
&bg_color);
}
if (input == INPUT_RANDOM)
{
gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view),
@ -544,6 +565,11 @@ gimp_dynamics_output_editor_use_input (gint input,
private->output->use_tilt = value;
g_object_notify (G_OBJECT (private->output), "use-tilt");
}
if (input == INPUT_WHEEL)
{
private->output->use_wheel = value;
g_object_notify (G_OBJECT (private->output), "use-wheel");
}
if (input == INPUT_RANDOM)
{
private->output->use_random = value;
@ -600,6 +626,9 @@ gimp_dynamics_output_editor_notify_output (GimpDynamicsOutput *output,
case INPUT_TILT:
value = output->use_tilt;
break;
case INPUT_WHEEL:
value = output->use_wheel;
break;
case INPUT_RANDOM:
value = output->use_random;
break;