diff --git a/app/core/gimpdynamics.c b/app/core/gimpdynamics.c index 8acc1cc0eb..d67c444d02 100644 --- a/app/core/gimpdynamics.c +++ b/app/core/gimpdynamics.c @@ -33,61 +33,7 @@ #include "gimp-intl.h" -#define DEFAULT_NAME "Nameless dynamics" - -#define DEFAULT_PRESSURE_OPACITY TRUE -#define DEFAULT_PRESSURE_HARDNESS FALSE -#define DEFAULT_PRESSURE_RATE FALSE -#define DEFAULT_PRESSURE_SIZE FALSE -#define DEFAULT_PRESSURE_ASPECT_RATIO FALSE -#define DEFAULT_PRESSURE_COLOR FALSE -#define DEFAULT_PRESSURE_ANGLE FALSE -#define DEFAULT_PRESSURE_JITTER FALSE - -#define DEFAULT_VELOCITY_OPACITY FALSE -#define DEFAULT_VELOCITY_HARDNESS FALSE -#define DEFAULT_VELOCITY_RATE FALSE -#define DEFAULT_VELOCITY_SIZE FALSE -#define DEFAULT_VELOCITY_ASPECT_RATIO FALSE -#define DEFAULT_VELOCITY_COLOR FALSE -#define DEFAULT_VELOCITY_ANGLE FALSE -#define DEFAULT_VELOCITY_JITTER TRUE - -#define DEFAULT_DIRECTION_OPACITY FALSE -#define DEFAULT_DIRECTION_HARDNESS FALSE -#define DEFAULT_DIRECTION_RATE FALSE -#define DEFAULT_DIRECTION_SIZE FALSE -#define DEFAULT_DIRECTION_ASPECT_RATIO FALSE -#define DEFAULT_DIRECTION_COLOR FALSE -#define DEFAULT_DIRECTION_ANGLE FALSE -#define DEFAULT_DIRECTION_JITTER FALSE - -#define DEFAULT_TILT_OPACITY FALSE -#define DEFAULT_TILT_HARDNESS FALSE -#define DEFAULT_TILT_RATE FALSE -#define DEFAULT_TILT_SIZE FALSE -#define DEFAULT_TILT_ASPECT_RATIO FALSE -#define DEFAULT_TILT_COLOR FALSE -#define DEFAULT_TILT_ANGLE FALSE -#define DEFAULT_TILT_JITTER FALSE - -#define DEFAULT_RANDOM_OPACITY FALSE -#define DEFAULT_RANDOM_HARDNESS FALSE -#define DEFAULT_RANDOM_RATE FALSE -#define DEFAULT_RANDOM_SIZE FALSE -#define DEFAULT_RANDOM_ASPECT_RATIO FALSE -#define DEFAULT_RANDOM_COLOR FALSE -#define DEFAULT_RANDOM_ANGLE FALSE -#define DEFAULT_RANDOM_JITTER FALSE - -#define DEFAULT_FADING_OPACITY FALSE -#define DEFAULT_FADING_HARDNESS FALSE -#define DEFAULT_FADING_RATE FALSE -#define DEFAULT_FADING_SIZE FALSE -#define DEFAULT_FADING_ASPECT_RATIO FALSE -#define DEFAULT_FADING_COLOR FALSE -#define DEFAULT_FADING_ANGLE FALSE -#define DEFAULT_FADING_JITTER FALSE +#define DEFAULT_NAME "Nameless dynamics" enum { @@ -95,59 +41,14 @@ enum PROP_NAME, - PROP_PRESSURE_OPACITY, - PROP_PRESSURE_HARDNESS, - PROP_PRESSURE_RATE, - PROP_PRESSURE_SIZE, - PROP_PRESSURE_ASPECT_RATIO, - PROP_PRESSURE_COLOR, - PROP_PRESSURE_ANGLE, - PROP_PRESSURE_JITTER, - - PROP_VELOCITY_OPACITY, - PROP_VELOCITY_HARDNESS, - PROP_VELOCITY_RATE, - PROP_VELOCITY_SIZE, - PROP_VELOCITY_ASPECT_RATIO, - PROP_VELOCITY_COLOR, - PROP_VELOCITY_ANGLE, - PROP_VELOCITY_JITTER, - - PROP_DIRECTION_OPACITY, - PROP_DIRECTION_HARDNESS, - PROP_DIRECTION_RATE, - PROP_DIRECTION_SIZE, - PROP_DIRECTION_ASPECT_RATIO, - PROP_DIRECTION_COLOR, - PROP_DIRECTION_ANGLE, - PROP_DIRECTION_JITTER, - - PROP_TILT_OPACITY, - PROP_TILT_HARDNESS, - PROP_TILT_RATE, - PROP_TILT_SIZE, - PROP_TILT_ASPECT_RATIO, - PROP_TILT_COLOR, - PROP_TILT_ANGLE, - PROP_TILT_JITTER, - - PROP_RANDOM_OPACITY, - PROP_RANDOM_HARDNESS, - PROP_RANDOM_RATE, - PROP_RANDOM_SIZE, - PROP_RANDOM_ASPECT_RATIO, - PROP_RANDOM_COLOR, - PROP_RANDOM_ANGLE, - PROP_RANDOM_JITTER, - - PROP_FADING_OPACITY, - PROP_FADING_HARDNESS, - PROP_FADING_RATE, - PROP_FADING_SIZE, - PROP_FADING_ASPECT_RATIO, - PROP_FADING_COLOR, - PROP_FADING_ANGLE, - PROP_FADING_JITTER + PROP_OPACITY_OUTPUT, + PROP_HARDNESS_OUTPUT, + PROP_RATE_OUTPUT, + PROP_SIZE_OUTPUT, + PROP_ASPECT_RATIO_OUTPUT, + PROP_COLOR_OUTPUT, + PROP_ANGLE_OUTPUT, + PROP_JITTER_OUTPUT }; @@ -163,19 +64,25 @@ static void gimp_dynamics_get_property (GObject *object, static const gchar * gimp_dynamics_get_extension (GimpData *data); +static GimpDynamicsOutput * + gimp_dynamics_create_output (GimpDynamics *dynamics, + const gchar *name); +static void gimp_dynamics_output_notify (GObject *output, + const GParamSpec *pspec, + GimpDynamics *dynamics); + G_DEFINE_TYPE (GimpDynamics, gimp_dynamics, GIMP_TYPE_DATA) - #define parent_class gimp_dynamics_parent_class static void gimp_dynamics_class_init (GimpDynamicsClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GimpDataClass *data_class = GIMP_DATA_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GimpDataClass *data_class = GIMP_DATA_CLASS (klass); object_class->finalize = gimp_dynamics_finalize; object_class->set_property = gimp_dynamics_set_property; @@ -189,220 +96,68 @@ gimp_dynamics_class_init (GimpDynamicsClass *klass) DEFAULT_NAME, GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_OPACITY, - "pressure-opacity", NULL, - DEFAULT_PRESSURE_OPACITY, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_HARDNESS, - "pressure-hardness", NULL, - DEFAULT_PRESSURE_HARDNESS, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_RATE, - "pressure-rate", NULL, - DEFAULT_PRESSURE_RATE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_SIZE, - "pressure-size", NULL, - DEFAULT_PRESSURE_SIZE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_COLOR, - "pressure-color", NULL, - DEFAULT_PRESSURE_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_ANGLE, - "pressure-angle", NULL, - DEFAULT_PRESSURE_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_ASPECT_RATIO, - "pressure-aspect-ratio", NULL, - DEFAULT_PRESSURE_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_PRESSURE_JITTER, - "pressure-jitter", NULL, - DEFAULT_PRESSURE_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_OPACITY_OUTPUT, + "opacity-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_OPACITY, - "velocity-opacity", NULL, - DEFAULT_VELOCITY_OPACITY, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_HARDNESS, - "velocity-hardness", NULL, - DEFAULT_VELOCITY_HARDNESS, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_RATE, - "velocity-rate", NULL, - DEFAULT_VELOCITY_RATE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_SIZE, - "velocity-size", NULL, - DEFAULT_VELOCITY_SIZE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_COLOR, - "velocity-color", NULL, - DEFAULT_VELOCITY_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_ANGLE, - "velocity-angle", NULL, - DEFAULT_VELOCITY_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_ASPECT_RATIO, - "velocity-aspect-ratio", NULL, - DEFAULT_VELOCITY_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_JITTER, - "velocity-jitter", NULL, - DEFAULT_VELOCITY_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_HARDNESS_OUTPUT, + "hardness-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_OPACITY, - "direction-opacity", NULL, - DEFAULT_DIRECTION_OPACITY, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_HARDNESS, - "direction-hardness", NULL, - DEFAULT_DIRECTION_HARDNESS, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_RATE, - "direction-rate", NULL, - DEFAULT_DIRECTION_RATE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_SIZE, - "direction-size", NULL, - DEFAULT_DIRECTION_SIZE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_COLOR, - "direction-color", NULL, - DEFAULT_DIRECTION_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_ANGLE, - "direction-angle", NULL, - DEFAULT_DIRECTION_ANGLE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_ASPECT_RATIO, - "direction-aspect-ratio", NULL, - DEFAULT_DIRECTION_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DIRECTION_JITTER, - "direction-jitter", NULL, - DEFAULT_DIRECTION_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_RATE_OUTPUT, + "rate-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_OPACITY, - "tilt-opacity", NULL, - DEFAULT_TILT_OPACITY, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_HARDNESS, - "tilt-hardness", NULL, - DEFAULT_TILT_HARDNESS, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_RATE, - "tilt-rate", NULL, - DEFAULT_TILT_RATE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_SIZE, - "tilt-size", NULL, - DEFAULT_TILT_SIZE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_COLOR, - "tilt-color", NULL, - DEFAULT_TILT_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_ANGLE, - "tilt-angle", NULL, - DEFAULT_TILT_ANGLE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_ASPECT_RATIO, - "tilt-aspect-ratio", NULL, - DEFAULT_TILT_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_TILT_JITTER, - "tilt-jitter", NULL, - DEFAULT_TILT_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_SIZE_OUTPUT, + "size-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_OPACITY, - "random-opacity", NULL, - DEFAULT_RANDOM_OPACITY, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_HARDNESS, - "random-hardness", NULL, - DEFAULT_RANDOM_HARDNESS, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_RATE, - "random-rate", NULL, - DEFAULT_RANDOM_RATE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_SIZE, - "random-size", NULL, - DEFAULT_RANDOM_SIZE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_COLOR, - "random-color", NULL, - DEFAULT_RANDOM_COLOR, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_ANGLE, - "random-angle", NULL, - DEFAULT_RANDOM_ANGLE, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_ASPECT_RATIO, - "random-aspect-ratio", NULL, - DEFAULT_RANDOM_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_JITTER, - "random-jitter", NULL, - DEFAULT_RANDOM_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_ASPECT_RATIO_OUTPUT, + "aspect-ratio-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); - 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_ASPECT_RATIO, - "fading-aspect-ratio", NULL, - DEFAULT_FADING_ASPECT_RATIO, - GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FADING_JITTER, - "fading-jitter", NULL, - DEFAULT_FADING_JITTER, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_COLOR_OUTPUT, + "color-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); + + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_ANGLE_OUTPUT, + "angle-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); + + GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, PROP_JITTER_OUTPUT, + "jitter-output", NULL, + GIMP_TYPE_DYNAMICS_OUTPUT, + GIMP_CONFIG_PARAM_AGGREGATE); } static void gimp_dynamics_init (GimpDynamics *dynamics) { - dynamics->opacity_dynamics = gimp_dynamics_output_new (""); - dynamics->hardness_dynamics = gimp_dynamics_output_new (""); - dynamics->rate_dynamics = gimp_dynamics_output_new (""); - dynamics->size_dynamics = gimp_dynamics_output_new (""); - dynamics->aspect_ratio_dynamics = gimp_dynamics_output_new (""); - dynamics->color_dynamics = gimp_dynamics_output_new (""); - dynamics->angle_dynamics = gimp_dynamics_output_new (""); - dynamics->jitter_dynamics = gimp_dynamics_output_new (""); - + dynamics->opacity_dynamics = gimp_dynamics_create_output (dynamics, + "opacity-output"); + dynamics->hardness_dynamics = gimp_dynamics_create_output (dynamics, + "hardness-output"); + dynamics->rate_dynamics = gimp_dynamics_create_output (dynamics, + "rate-output"); + dynamics->size_dynamics = gimp_dynamics_create_output (dynamics, + "size-output"); + dynamics->aspect_ratio_dynamics = gimp_dynamics_create_output (dynamics, + "aspect-ratio-output"); + dynamics->color_dynamics = gimp_dynamics_create_output (dynamics, + "color-output"); + dynamics->angle_dynamics = gimp_dynamics_create_output (dynamics, + "angle-output"); + dynamics->jitter_dynamics = gimp_dynamics_create_output (dynamics, + "jitter-output"); } - static void gimp_dynamics_finalize (GObject *object) { @@ -426,15 +181,9 @@ gimp_dynamics_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - GimpDynamics *dynamics = GIMP_DYNAMICS (object); - GimpDynamicsOutput *opacity_dynamics = dynamics->opacity_dynamics; - GimpDynamicsOutput *hardness_dynamics = dynamics->hardness_dynamics; - GimpDynamicsOutput *rate_dynamics = dynamics->rate_dynamics; - GimpDynamicsOutput *size_dynamics = dynamics->size_dynamics; - GimpDynamicsOutput *aspect_ratio_dynamics = dynamics->aspect_ratio_dynamics; - GimpDynamicsOutput *color_dynamics = dynamics->color_dynamics; - GimpDynamicsOutput *angle_dynamics = dynamics->angle_dynamics; - GimpDynamicsOutput *jitter_dynamics = dynamics->jitter_dynamics; + GimpDynamics *dynamics = GIMP_DYNAMICS (object); + GimpDynamicsOutput *src_output = NULL; + GimpDynamicsOutput *dest_output = NULL; switch (property_id) { @@ -442,203 +191,57 @@ gimp_dynamics_set_property (GObject *object, gimp_object_set_name (GIMP_OBJECT (dynamics), g_value_get_string (value)); break; - case PROP_PRESSURE_OPACITY: - opacity_dynamics->pressure = g_value_get_boolean (value); + case PROP_OPACITY_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->opacity_dynamics; break; - case PROP_PRESSURE_HARDNESS: - hardness_dynamics->pressure = g_value_get_boolean (value); + case PROP_HARDNESS_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->hardness_dynamics; break; - case PROP_PRESSURE_RATE: - rate_dynamics->pressure = g_value_get_boolean (value); + case PROP_RATE_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->rate_dynamics; break; - case PROP_PRESSURE_SIZE: - size_dynamics->pressure = g_value_get_boolean (value); + case PROP_SIZE_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->size_dynamics; break; - case PROP_PRESSURE_ASPECT_RATIO: - aspect_ratio_dynamics->pressure = g_value_get_boolean (value); + case PROP_ASPECT_RATIO_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->aspect_ratio_dynamics; break; - case PROP_PRESSURE_COLOR: - color_dynamics->pressure = g_value_get_boolean (value); + case PROP_COLOR_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->color_dynamics; break; - case PROP_PRESSURE_ANGLE: - angle_dynamics->pressure = g_value_get_boolean (value); + case PROP_ANGLE_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->angle_dynamics; break; - case PROP_PRESSURE_JITTER: - jitter_dynamics->pressure = g_value_get_boolean (value); + case PROP_JITTER_OUTPUT: + src_output = g_value_get_object (value); + dest_output = dynamics->jitter_dynamics; break; - case PROP_VELOCITY_OPACITY: - opacity_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_HARDNESS: - hardness_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_RATE: - rate_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_SIZE: - size_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_ASPECT_RATIO: - aspect_ratio_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_COLOR: - color_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_ANGLE: - angle_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_VELOCITY_JITTER: - jitter_dynamics->velocity = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_OPACITY: - opacity_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_HARDNESS: - hardness_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_RATE: - rate_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_SIZE: - size_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_ASPECT_RATIO: - aspect_ratio_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_COLOR: - color_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_ANGLE: - angle_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_DIRECTION_JITTER: - jitter_dynamics->direction = g_value_get_boolean (value); - break; - - case PROP_TILT_OPACITY: - opacity_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_HARDNESS: - hardness_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_RATE: - rate_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_SIZE: - size_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_ASPECT_RATIO: - aspect_ratio_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_COLOR: - color_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_ANGLE: - angle_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_TILT_JITTER: - jitter_dynamics->tilt = g_value_get_boolean (value); - break; - - case PROP_RANDOM_OPACITY: - opacity_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_HARDNESS: - hardness_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_RATE: - rate_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_SIZE: - size_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_ASPECT_RATIO: - aspect_ratio_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_COLOR: - color_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_ANGLE: - angle_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_RANDOM_JITTER: - jitter_dynamics->random = g_value_get_boolean (value); - break; - - case PROP_FADING_OPACITY: - opacity_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_HARDNESS: - hardness_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_RATE: - rate_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_SIZE: - size_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_ASPECT_RATIO: - aspect_ratio_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_COLOR: - color_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_ANGLE: - angle_dynamics->fade = g_value_get_boolean (value); - break; - - case PROP_FADING_JITTER: - jitter_dynamics->fade = g_value_get_boolean (value); - break; - - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } + + if (src_output && dest_output) + { + gimp_config_copy (GIMP_CONFIG (src_output), + GIMP_CONFIG (dest_output), + GIMP_CONFIG_PARAM_SERIALIZE); + } } static void @@ -647,15 +250,7 @@ gimp_dynamics_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - GimpDynamics *dynamics = GIMP_DYNAMICS (object); - GimpDynamicsOutput *opacity_dynamics = dynamics->opacity_dynamics; - GimpDynamicsOutput *hardness_dynamics = dynamics->hardness_dynamics; - GimpDynamicsOutput *rate_dynamics = dynamics->rate_dynamics; - GimpDynamicsOutput *size_dynamics = dynamics->size_dynamics; - GimpDynamicsOutput *aspect_ratio_dynamics = dynamics->aspect_ratio_dynamics; - GimpDynamicsOutput *color_dynamics = dynamics->color_dynamics; - GimpDynamicsOutput *angle_dynamics = dynamics->angle_dynamics; - GimpDynamicsOutput *jitter_dynamics = dynamics->jitter_dynamics; + GimpDynamics *dynamics = GIMP_DYNAMICS (object); switch (property_id) { @@ -663,199 +258,36 @@ gimp_dynamics_get_property (GObject *object, g_value_set_string (value, gimp_object_get_name (dynamics)); break; - case PROP_PRESSURE_OPACITY: - g_value_set_boolean (value, opacity_dynamics->pressure); + case PROP_OPACITY_OUTPUT: + g_value_set_object (value, dynamics->opacity_dynamics); break; - case PROP_PRESSURE_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->pressure); + case PROP_HARDNESS_OUTPUT: + g_value_set_object (value, dynamics->hardness_dynamics); break; - case PROP_PRESSURE_RATE: - g_value_set_boolean (value, rate_dynamics->pressure); + case PROP_RATE_OUTPUT: + g_value_set_object (value, dynamics->rate_dynamics); break; - case PROP_PRESSURE_SIZE: - g_value_set_boolean (value, size_dynamics->pressure); + case PROP_SIZE_OUTPUT: + g_value_set_object (value, dynamics->size_dynamics); break; - case PROP_PRESSURE_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->pressure); + case PROP_ASPECT_RATIO_OUTPUT: + g_value_set_object (value, dynamics->aspect_ratio_dynamics); break; - case PROP_PRESSURE_COLOR: - g_value_set_boolean (value, color_dynamics->pressure); + case PROP_COLOR_OUTPUT: + g_value_set_object (value, dynamics->color_dynamics); break; - case PROP_PRESSURE_ANGLE: - g_value_set_boolean (value, angle_dynamics->pressure); + case PROP_ANGLE_OUTPUT: + g_value_set_object (value, dynamics->angle_dynamics); break; - case PROP_PRESSURE_JITTER: - g_value_set_boolean (value, jitter_dynamics->pressure); - break; - - case PROP_VELOCITY_OPACITY: - g_value_set_boolean (value, opacity_dynamics->velocity); - break; - - case PROP_VELOCITY_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->velocity); - break; - - case PROP_VELOCITY_RATE: - g_value_set_boolean (value, rate_dynamics->velocity); - break; - - case PROP_VELOCITY_SIZE: - g_value_set_boolean (value, size_dynamics->velocity); - break; - - case PROP_VELOCITY_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->velocity); - break; - - case PROP_VELOCITY_COLOR: - g_value_set_boolean (value, color_dynamics->velocity); - break; - - case PROP_VELOCITY_ANGLE: - g_value_set_boolean (value, angle_dynamics->velocity); - break; - - case PROP_VELOCITY_JITTER: - g_value_set_boolean (value, jitter_dynamics->velocity); - break; - - case PROP_DIRECTION_OPACITY: - g_value_set_boolean (value, opacity_dynamics->direction); - break; - - case PROP_DIRECTION_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->direction); - break; - - case PROP_DIRECTION_RATE: - g_value_set_boolean (value, rate_dynamics->direction); - break; - - case PROP_DIRECTION_SIZE: - g_value_set_boolean (value, size_dynamics->direction); - break; - - case PROP_DIRECTION_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->direction); - break; - - case PROP_DIRECTION_COLOR: - g_value_set_boolean (value, color_dynamics->direction); - break; - - case PROP_DIRECTION_ANGLE: - g_value_set_boolean (value, angle_dynamics->direction); - break; - - case PROP_DIRECTION_JITTER: - g_value_set_boolean (value, jitter_dynamics->direction); - break; - - case PROP_TILT_OPACITY: - g_value_set_boolean (value, opacity_dynamics->tilt); - break; - - case PROP_TILT_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->tilt); - break; - - case PROP_TILT_RATE: - g_value_set_boolean (value, rate_dynamics->tilt); - break; - - case PROP_TILT_SIZE: - g_value_set_boolean (value, size_dynamics->tilt); - break; - - case PROP_TILT_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->tilt); - break; - - case PROP_TILT_COLOR: - g_value_set_boolean (value, color_dynamics->tilt); - break; - - case PROP_TILT_ANGLE: - g_value_set_boolean (value, angle_dynamics->tilt); - break; - - case PROP_TILT_JITTER: - g_value_set_boolean (value, jitter_dynamics->tilt); - break; - - case PROP_RANDOM_OPACITY: - g_value_set_boolean (value, opacity_dynamics->random); - break; - - case PROP_RANDOM_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->random); - break; - - case PROP_RANDOM_RATE: - g_value_set_boolean (value, rate_dynamics->random); - break; - - case PROP_RANDOM_SIZE: - g_value_set_boolean (value, size_dynamics->random); - break; - - case PROP_RANDOM_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->random); - break; - - case PROP_RANDOM_COLOR: - g_value_set_boolean (value, color_dynamics->random); - break; - - case PROP_RANDOM_ANGLE: - g_value_set_boolean (value, angle_dynamics->random); - break; - - case PROP_RANDOM_JITTER: - g_value_set_boolean (value, jitter_dynamics->random); - break; - - -/*fading*/ - - case PROP_FADING_OPACITY: - g_value_set_boolean (value, opacity_dynamics->fade); - break; - - case PROP_FADING_HARDNESS: - g_value_set_boolean (value, hardness_dynamics->fade); - break; - - case PROP_FADING_RATE: - g_value_set_boolean (value, rate_dynamics->fade); - break; - - case PROP_FADING_SIZE: - g_value_set_boolean (value, size_dynamics->fade); - break; - - case PROP_FADING_ASPECT_RATIO: - g_value_set_boolean (value, aspect_ratio_dynamics->fade); - break; - - case PROP_FADING_COLOR: - g_value_set_boolean (value, color_dynamics->fade); - break; - - case PROP_FADING_ANGLE: - g_value_set_boolean (value, angle_dynamics->fade); - break; - - case PROP_FADING_JITTER: - g_value_set_boolean (value, jitter_dynamics->fade); + case PROP_JITTER_OUTPUT: + g_value_set_object (value, dynamics->jitter_dynamics); break; default: @@ -864,6 +296,15 @@ gimp_dynamics_get_property (GObject *object, } } +static const gchar * +gimp_dynamics_get_extension (GimpData *data) +{ + return GIMP_DYNAMICS_FILE_EXTENSION; +} + + +/* public functions */ + GimpData * gimp_dynamics_new (const gchar *name) { @@ -891,12 +332,6 @@ gimp_dynamics_get_standard (void) return standard_dynamics; } -static const gchar * -gimp_dynamics_get_extension (GimpData *data) -{ - return GIMP_DYNAMICS_FILE_EXTENSION; -} - gboolean gimp_dynamics_input_fade_enabled (GimpDynamics *dynamics) { @@ -909,3 +344,27 @@ gimp_dynamics_input_fade_enabled (GimpDynamics *dynamics) dynamics->jitter_dynamics->fade || dynamics->angle_dynamics->fade); } + + +/* private functions */ + +static GimpDynamicsOutput * +gimp_dynamics_create_output (GimpDynamics *dynamics, + const gchar *name) +{ + GimpDynamicsOutput *output = gimp_dynamics_output_new (name); + + g_signal_connect (output, "notify", + G_CALLBACK (gimp_dynamics_output_notify), + dynamics); + + return output; +} + +static void +gimp_dynamics_output_notify (GObject *output, + const GParamSpec *pspec, + GimpDynamics *dynamics) +{ + g_object_notify (G_OBJECT (dynamics), gimp_object_get_name (output)); +} diff --git a/app/widgets/gimpdynamicseditor.c b/app/widgets/gimpdynamicseditor.c index 252c763228..58f9cb0c0a 100644 --- a/app/widgets/gimpdynamicseditor.c +++ b/app/widgets/gimpdynamicseditor.c @@ -70,8 +70,7 @@ static void gimp_dynamics_editor_notify_data (GimpDynamics *options, GimpDynamicsEditor *editor); static void dynamics_output_maping_row_gui (GObject *config, - const gchar *property_name_part, - const gchar *property_label, + const gchar *row_label, GtkTable *table, gint row, GtkWidget *labels[]); @@ -161,67 +160,59 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor) gtk_container_add (GTK_CONTAINER (vbox), inner_frame); gtk_widget_show (inner_frame); - table = gtk_table_new (9, n_dynamics + 2, FALSE); gtk_container_add (GTK_CONTAINER (inner_frame), table); gtk_widget_show (table); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "opacity", - _("Opacity"), - table, - 1, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->opacity_dynamics), + _("Opacity"), + GTK_TABLE (table), + 1, + dynamics_labels); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "hardness", - _("Hardness"), - table, - 2, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->hardness_dynamics), + _("Hardness"), + GTK_TABLE (table), + 2, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "rate", - _("Rate"), - table, - 3, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->rate_dynamics), + _("Rate"), + GTK_TABLE (table), + 3, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "size", - _("Size"), - table, - 4, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->size_dynamics), + _("Size"), + GTK_TABLE (table), + 4, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "aspect-ratio", - _("Aspect ratio"), - table, - 5, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->aspect_ratio_dynamics), + _("Aspect ratio"), + GTK_TABLE (table), + 5, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "color", - _("Color"), - table, - 6, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->color_dynamics), + _("Color"), + GTK_TABLE (table), + 6, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "angle", - _("Angle"), - table, - 7, - dynamics_labels); + dynamics_output_maping_row_gui (G_OBJECT (dynamics->angle_dynamics), + _("Angle"), + GTK_TABLE (table), + 7, + NULL); + + dynamics_output_maping_row_gui (G_OBJECT (dynamics->jitter_dynamics), + _("Jitter"), + GTK_TABLE (table), + 8, + NULL); - dynamics_output_maping_row_gui(G_OBJECT(editor->dynamics_model), - "jitter", - _("Jitter"), - table, - 8, - dynamics_labels); fixed = gtk_fixed_new (); gtk_table_attach (GTK_TABLE (table), fixed, 0, n_dynamics + 2, 0, 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); @@ -235,7 +226,6 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor) gtk_fixed_put (GTK_FIXED (fixed), dynamics_labels[i], 0, 0); gtk_widget_show (dynamics_labels[i]); } - } } @@ -297,7 +287,7 @@ gimp_dynamics_editor_set_data (GimpDataEditor *editor, gimp_config_copy (GIMP_CONFIG (editor->data), GIMP_CONFIG (dynamics_editor->dynamics_model), - 0); + GIMP_CONFIG_PARAM_SERIALIZE); g_signal_handlers_unblock_by_func (dynamics_editor->dynamics_model, gimp_dynamics_editor_notify_model, @@ -324,7 +314,7 @@ gimp_dynamics_editor_notify_model (GimpDynamics *options, gimp_config_copy (GIMP_CONFIG (editor->dynamics_model), GIMP_CONFIG (data_editor->data), - 0); + GIMP_CONFIG_PARAM_SERIALIZE); g_signal_handlers_unblock_by_func (data_editor->data, gimp_dynamics_editor_notify_data, @@ -345,7 +335,7 @@ gimp_dynamics_editor_notify_data (GimpDynamics *options, gimp_config_copy (GIMP_CONFIG (data_editor->data), GIMP_CONFIG (editor->dynamics_model), - 0); + GIMP_CONFIG_PARAM_SERIALIZE); g_signal_handlers_unblock_by_func (editor->dynamics_model, gimp_dynamics_editor_notify_model, @@ -385,73 +375,69 @@ gimp_dynamics_editor_new (GimpContext *context, /* private functions */ static void -dynamics_output_maping_row_gui(GObject *config, - const gchar *property_name_part, - const gchar *property_label, - GtkTable *table, - gint row, - GtkWidget *labels[]) +dynamics_output_maping_row_gui (GObject *config, + const gchar *row_label, + GtkTable *table, + gint row, + GtkWidget *labels[]) { - GtkWidget *label; - GtkWidget *button; - gint column=1; + GtkWidget *label; + GtkWidget *button; + gint column = 1; - label = gtk_label_new (property_label); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, - GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); + label = gtk_label_new (row_label); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, + GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); + gtk_widget_show (label); -/*gboolean pressure; - gboolean velocity; - gboolean direction; - gboolean tilt; - gboolean random; - gboolean fade; -*/ + button = dynamics_check_button_new (config, "pressure", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; - button = dynamics_check_button_new (config, g_strconcat("pressure-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; + button = dynamics_check_button_new (config, "velocity", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; - button = dynamics_check_button_new (config, g_strconcat("velocity-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; + button = dynamics_check_button_new (config, "direction", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; - button = dynamics_check_button_new (config, g_strconcat("direction-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; + button = dynamics_check_button_new (config, "tilt", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; - button = dynamics_check_button_new (config, g_strconcat("tilt-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; - - button = dynamics_check_button_new (config, g_strconcat("random-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; - - button = dynamics_check_button_new (config, g_strconcat("fading-", property_name_part, NULL), - table, column, row); - g_signal_connect (button, "size-allocate", - G_CALLBACK (dynamics_check_button_size_allocate), - labels[column - 1]); - column++; + button = dynamics_check_button_new (config, "random", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; + button = dynamics_check_button_new (config, "fade", + table, column, row); + if (labels) + g_signal_connect (button, "size-allocate", + G_CALLBACK (dynamics_check_button_size_allocate), + labels[column - 1]); + column++; } static GtkWidget *