38
38
#define DEFAULT_APPLICATION_MODE GIMP_PAINT_CONSTANT
39
39
#define DEFAULT_HARD FALSE
41
#define DEFAULT_PRESSURE_EXPANDED FALSE
41
#define DEFAULT_DYNAMICS_EXPANDED FALSE
42
43
#define DEFAULT_PRESSURE_OPACITY TRUE
43
44
#define DEFAULT_PRESSURE_HARDNESS FALSE
44
45
#define DEFAULT_PRESSURE_RATE FALSE
45
46
#define DEFAULT_PRESSURE_SIZE FALSE
46
47
#define DEFAULT_PRESSURE_INVERSE_SIZE FALSE
47
48
#define DEFAULT_PRESSURE_COLOR FALSE
49
#define DEFAULT_PRESSURE_PRESCALE 1.0
51
#define DEFAULT_VELOCITY_OPACITY FALSE
52
#define DEFAULT_VELOCITY_HARDNESS FALSE
53
#define DEFAULT_VELOCITY_RATE FALSE
54
#define DEFAULT_VELOCITY_SIZE FALSE
55
#define DEFAULT_VELOCITY_INVERSE_SIZE FALSE
56
#define DEFAULT_VELOCITY_COLOR FALSE
57
#define DEFAULT_VELOCITY_PRESCALE 1.0
59
#define DEFAULT_RANDOM_OPACITY FALSE
60
#define DEFAULT_RANDOM_HARDNESS FALSE
61
#define DEFAULT_RANDOM_RATE FALSE
62
#define DEFAULT_RANDOM_SIZE FALSE
63
#define DEFAULT_RANDOM_INVERSE_SIZE FALSE
64
#define DEFAULT_RANDOM_COLOR FALSE
65
#define DEFAULT_RANDOM_PRESCALE 1.0
49
67
#define DEFAULT_USE_FADE FALSE
50
68
#define DEFAULT_FADE_LENGTH 100.0
171
220
"pressure-inverse-size", NULL,
172
221
DEFAULT_PRESSURE_INVERSE_SIZE,
173
222
GIMP_PARAM_STATIC_STRINGS);
223
GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_PRESSURE_PRESCALE,
224
"pressure-prescale", NULL,
225
0.0, 1.0, DEFAULT_PRESSURE_PRESCALE,
226
GIMP_PARAM_STATIC_STRINGS);
228
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_OPACITY,
229
"velocity-opacity", NULL,
230
DEFAULT_VELOCITY_OPACITY,
231
GIMP_PARAM_STATIC_STRINGS);
232
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_HARDNESS,
233
"velocity-hardness", NULL,
234
DEFAULT_VELOCITY_HARDNESS,
235
GIMP_PARAM_STATIC_STRINGS);
236
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_RATE,
237
"velocity-rate", NULL,
238
DEFAULT_VELOCITY_RATE,
239
GIMP_PARAM_STATIC_STRINGS);
240
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_SIZE,
241
"velocity-size", NULL,
242
DEFAULT_VELOCITY_SIZE,
243
GIMP_PARAM_STATIC_STRINGS);
244
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_COLOR,
245
"velocity-color", NULL,
246
DEFAULT_VELOCITY_COLOR,
247
GIMP_PARAM_STATIC_STRINGS);
248
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_VELOCITY_INVERSE_SIZE,
249
"velocity-inverse-size", NULL,
250
DEFAULT_VELOCITY_INVERSE_SIZE,
251
GIMP_PARAM_STATIC_STRINGS);
252
GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_VELOCITY_PRESCALE,
253
"velocity-prescale", NULL,
254
0.0, 1.0, DEFAULT_VELOCITY_PRESCALE,
255
GIMP_PARAM_STATIC_STRINGS);
257
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_OPACITY,
258
"random-opacity", NULL,
259
DEFAULT_RANDOM_OPACITY,
260
GIMP_PARAM_STATIC_STRINGS);
261
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_HARDNESS,
262
"random-hardness", NULL,
263
DEFAULT_RANDOM_HARDNESS,
264
GIMP_PARAM_STATIC_STRINGS);
265
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_RATE,
268
GIMP_PARAM_STATIC_STRINGS);
269
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_SIZE,
272
GIMP_PARAM_STATIC_STRINGS);
273
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_COLOR,
274
"random-color", NULL,
275
DEFAULT_RANDOM_COLOR,
276
GIMP_PARAM_STATIC_STRINGS);
277
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_RANDOM_INVERSE_SIZE,
278
"random-inverse-size", NULL,
279
DEFAULT_RANDOM_INVERSE_SIZE,
280
GIMP_PARAM_STATIC_STRINGS);
281
GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_RANDOM_PRESCALE,
282
"random-prescale", NULL,
283
0.0, 1.0, DEFAULT_RANDOM_PRESCALE,
284
GIMP_PARAM_STATIC_STRINGS);
175
286
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_FADE,
176
287
"use-fade", NULL,
286
401
const GValue *value,
287
402
GParamSpec *pspec)
289
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
290
GimpPressureOptions *pressure_options;
291
GimpFadeOptions *fade_options;
292
GimpGradientOptions *gradient_options;
293
GimpJitterOptions *jitter_options;
295
pressure_options = options->pressure_options;
296
fade_options = options->fade_options;
297
gradient_options = options->gradient_options;
298
jitter_options = options->jitter_options;
404
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
405
GimpDynamicOptions *pressure_options = options->pressure_options;
406
GimpDynamicOptions *velocity_options = options->velocity_options;
407
GimpDynamicOptions *random_options = options->random_options;
408
GimpFadeOptions *fade_options = options->fade_options;
409
GimpJitterOptions *jitter_options = options->jitter_options;
410
GimpGradientOptions *gradient_options = options->gradient_options;
300
412
switch (property_id)
302
414
case PROP_PAINT_INFO:
303
options->paint_info = (GimpPaintInfo *) g_value_dup_object (value);
415
options->paint_info = g_value_dup_object (value);
306
418
case PROP_BRUSH_SCALE:
307
419
options->brush_scale = g_value_get_double (value);
309
422
case PROP_APPLICATION_MODE:
310
423
options->application_mode = g_value_get_enum (value);
313
427
options->hard = g_value_get_boolean (value);
316
case PROP_PRESSURE_EXPANDED:
317
pressure_options->expanded = g_value_get_boolean (value);
430
case PROP_DYNAMICS_EXPANDED:
431
options->dynamics_expanded = g_value_get_boolean (value);
319
434
case PROP_PRESSURE_OPACITY:
320
435
pressure_options->opacity = g_value_get_boolean (value);
322
438
case PROP_PRESSURE_HARDNESS:
323
439
pressure_options->hardness = g_value_get_boolean (value);
325
442
case PROP_PRESSURE_RATE:
326
443
pressure_options->rate = g_value_get_boolean (value);
328
446
case PROP_PRESSURE_SIZE:
329
447
pressure_options->size = g_value_get_boolean (value);
331
450
case PROP_PRESSURE_INVERSE_SIZE:
332
451
pressure_options->inverse_size = g_value_get_boolean (value);
334
454
case PROP_PRESSURE_COLOR:
335
455
pressure_options->color = g_value_get_boolean (value);
458
case PROP_PRESSURE_PRESCALE:
459
pressure_options->prescale = g_value_get_double (value);
462
case PROP_VELOCITY_OPACITY:
463
velocity_options->opacity = g_value_get_boolean (value);
466
case PROP_VELOCITY_HARDNESS:
467
velocity_options->hardness = g_value_get_boolean (value);
470
case PROP_VELOCITY_RATE:
471
velocity_options->rate = g_value_get_boolean (value);
474
case PROP_VELOCITY_SIZE:
475
velocity_options->size = g_value_get_boolean (value);
478
case PROP_VELOCITY_INVERSE_SIZE:
479
velocity_options->inverse_size = g_value_get_boolean (value);
482
case PROP_VELOCITY_COLOR:
483
velocity_options->color = g_value_get_boolean (value);
486
case PROP_VELOCITY_PRESCALE:
487
velocity_options->prescale = g_value_get_double (value);
490
case PROP_RANDOM_OPACITY:
491
random_options->opacity = g_value_get_boolean (value);
494
case PROP_RANDOM_HARDNESS:
495
random_options->hardness = g_value_get_boolean (value);
498
case PROP_RANDOM_RATE:
499
random_options->rate = g_value_get_boolean (value);
502
case PROP_RANDOM_SIZE:
503
random_options->size = g_value_get_boolean (value);
506
case PROP_RANDOM_INVERSE_SIZE:
507
random_options->inverse_size = g_value_get_boolean (value);
510
case PROP_RANDOM_COLOR:
511
random_options->color = g_value_get_boolean (value);
514
case PROP_RANDOM_PRESCALE:
515
random_options->prescale = g_value_get_double (value);
338
518
case PROP_USE_FADE:
339
519
fade_options->use_fade = g_value_get_boolean (value);
341
522
case PROP_FADE_LENGTH:
342
523
fade_options->fade_length = g_value_get_double (value);
344
526
case PROP_FADE_UNIT:
345
527
fade_options->fade_unit = g_value_get_int (value);
421
608
case PROP_BRUSH_SCALE:
422
609
g_value_set_double (value, options->brush_scale);
424
612
case PROP_APPLICATION_MODE:
425
613
g_value_set_enum (value, options->application_mode);
428
617
g_value_set_boolean (value, options->hard);
431
case PROP_PRESSURE_EXPANDED:
432
g_value_set_boolean (value, pressure_options->expanded);
620
case PROP_DYNAMICS_EXPANDED:
621
g_value_set_boolean (value, options->dynamics_expanded);
434
624
case PROP_PRESSURE_OPACITY:
435
625
g_value_set_boolean (value, pressure_options->opacity);
437
628
case PROP_PRESSURE_HARDNESS:
438
629
g_value_set_boolean (value, pressure_options->hardness);
440
632
case PROP_PRESSURE_RATE:
441
633
g_value_set_boolean (value, pressure_options->rate);
443
636
case PROP_PRESSURE_SIZE:
444
637
g_value_set_boolean (value, pressure_options->size);
446
640
case PROP_PRESSURE_INVERSE_SIZE:
447
641
g_value_set_boolean (value, pressure_options->inverse_size);
449
644
case PROP_PRESSURE_COLOR:
450
645
g_value_set_boolean (value, pressure_options->color);
648
case PROP_PRESSURE_PRESCALE:
649
g_value_set_double (value, pressure_options->prescale);
652
case PROP_VELOCITY_OPACITY:
653
g_value_set_boolean (value, velocity_options->opacity);
656
case PROP_VELOCITY_HARDNESS:
657
g_value_set_boolean (value, velocity_options->hardness);
660
case PROP_VELOCITY_RATE:
661
g_value_set_boolean (value, velocity_options->rate);
664
case PROP_VELOCITY_SIZE:
665
g_value_set_boolean (value, velocity_options->size);
668
case PROP_VELOCITY_INVERSE_SIZE:
669
g_value_set_boolean (value, velocity_options->inverse_size);
672
case PROP_VELOCITY_COLOR:
673
g_value_set_boolean (value, velocity_options->color);
676
case PROP_VELOCITY_PRESCALE:
677
g_value_set_double (value, velocity_options->prescale);
680
case PROP_RANDOM_OPACITY:
681
g_value_set_boolean (value, random_options->opacity);
684
case PROP_RANDOM_HARDNESS:
685
g_value_set_boolean (value, random_options->hardness);
688
case PROP_RANDOM_RATE:
689
g_value_set_boolean (value, random_options->rate);
692
case PROP_RANDOM_SIZE:
693
g_value_set_boolean (value, random_options->size);
696
case PROP_RANDOM_INVERSE_SIZE:
697
g_value_set_boolean (value, random_options->inverse_size);
700
case PROP_RANDOM_COLOR:
701
g_value_set_boolean (value, random_options->color);
704
case PROP_RANDOM_PRESCALE:
705
g_value_set_double (value, random_options->prescale);
453
708
case PROP_USE_FADE:
454
709
g_value_set_boolean (value, fade_options->use_fade);
456
712
case PROP_FADE_LENGTH:
457
713
g_value_set_double (value, fade_options->fade_length);
459
716
case PROP_FADE_UNIT:
460
717
g_value_set_int (value, fade_options->fade_unit);
703
984
if (paint_options->hard)
704
985
return GIMP_BRUSH_HARD;
706
if (paint_options->pressure_options->hardness)
987
if (paint_options->pressure_options->hardness ||
988
paint_options->velocity_options->hardness ||
989
paint_options->random_options->hardness)
707
990
return GIMP_BRUSH_PRESSURE;
709
992
return GIMP_BRUSH_SOFT;
996
/* Calculates dynamics mix to be used for same parameter
997
* (velocity/pressure/random) mix Needed in may places and tools.
1000
gimp_paint_options_get_dynamics_mix (gdouble mix1,
1007
gdouble scale_sum = 0.0;
1008
gdouble result = 1.0;
1012
scale_sum += fabs (mix1_scale);
1018
scale_sum += fabs (mix2_scale);
1024
scale_sum += fabs (mix3_scale);
1028
if (scale_sum > 0.0)
1030
result = (mix1 * mix1_scale) / scale_sum +
1031
(mix2 * mix2_scale) / scale_sum +
1032
(mix3 * mix3_scale) / scale_sum;
1036
result = 1.0 + result;
1038
return MAX (0.0, result);
1042
gimp_paint_options_get_dynamic_opacity (GimpPaintOptions *paint_options,
1043
const GimpCoords *coords)
1045
gdouble opacity = 1.0;
1047
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), 1.0);
1048
g_return_val_if_fail (coords != NULL, 1.0);
1050
if (paint_options->pressure_options->opacity ||
1051
paint_options->velocity_options->opacity ||
1052
paint_options->random_options->opacity)
1054
gdouble pressure = -1.0;
1055
gdouble velocity = -1.0;
1056
gdouble random = -1.0;
1058
if (paint_options->pressure_options->opacity)
1059
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
1061
if (paint_options->velocity_options->opacity)
1062
velocity = GIMP_PAINT_VELOCITY_SCALE * (1 - coords->velocity);
1064
if (paint_options->random_options->opacity)
1065
random = g_random_double_range (0.0, 1.0);
1067
opacity = gimp_paint_options_get_dynamics_mix (pressure,
1068
paint_options->pressure_options->prescale,
1070
paint_options->velocity_options->prescale,
1072
paint_options->random_options->prescale);
1079
gimp_paint_options_get_dynamic_size (GimpPaintOptions *paint_options,
1080
const GimpCoords *coords,
1081
gboolean use_dynamics)
1083
gdouble scale = 1.0;
1087
gdouble pressure = -1.0;
1088
gdouble velocity = -1.0;
1089
gdouble random = -1.0;
1091
if (paint_options->pressure_options->size)
1093
pressure = coords->pressure;
1095
else if (paint_options->pressure_options->inverse_size)
1097
pressure = 1.0 - 0.9 * coords->pressure;
1100
if (paint_options->velocity_options->size)
1102
velocity = 1.0 - sqrt (coords->velocity);
1104
else if (paint_options->velocity_options->inverse_size)
1106
velocity = sqrt (coords->velocity);
1109
if (paint_options->random_options->size)
1111
random = 1.0 - g_random_double_range (0.0, 1.0);
1113
else if (paint_options->random_options->inverse_size)
1115
random = g_random_double_range (0.0, 1.0);
1118
scale = gimp_paint_options_get_dynamics_mix (pressure,
1119
paint_options->pressure_options->prescale,
1121
paint_options->velocity_options->prescale,
1123
paint_options->random_options->prescale);
1125
if (scale < 1 / 64.0)
1128
scale = sqrt (scale);
1131
scale *= paint_options->brush_scale;
1138
gimp_paint_options_get_dynamic_rate (GimpPaintOptions *paint_options,
1139
const GimpCoords *coords)
1143
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), 1.0);
1144
g_return_val_if_fail (coords != NULL, 1.0);
1146
if (paint_options->pressure_options->rate ||
1147
paint_options->velocity_options->rate ||
1148
paint_options->random_options->rate)
1150
gdouble pressure = -1.0;
1151
gdouble velocity = -1.0;
1152
gdouble random = -1.0;
1154
if (paint_options->pressure_options->rate)
1155
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
1157
if (paint_options->velocity_options->rate)
1158
velocity = GIMP_PAINT_VELOCITY_SCALE * (1 - coords->velocity);
1160
if (paint_options->random_options->rate)
1161
random = g_random_double_range (0.0, 1.0);
1163
rate = gimp_paint_options_get_dynamics_mix (pressure,
1164
paint_options->pressure_options->prescale,
1166
paint_options->velocity_options->prescale,
1168
paint_options->random_options->prescale);
1176
gimp_paint_options_get_dynamic_color (GimpPaintOptions *paint_options,
1177
const GimpCoords *coords)
1179
gdouble color = 1.0;
1181
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), 1.0);
1182
g_return_val_if_fail (coords != NULL, 1.0);
1184
if (paint_options->pressure_options->color ||
1185
paint_options->velocity_options->color ||
1186
paint_options->random_options->color)
1188
gdouble pressure = -1.0;
1189
gdouble velocity = -1.0;
1190
gdouble random = -1.0;
1192
if (paint_options->pressure_options->color)
1193
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
1195
if (paint_options->velocity_options->color)
1196
velocity = GIMP_PAINT_VELOCITY_SCALE * coords->velocity;
1198
if (paint_options->random_options->color)
1199
random = g_random_double_range (0.0, 1.0);
1201
color = gimp_paint_options_get_dynamics_mix (pressure,
1202
paint_options->pressure_options->prescale,
1204
paint_options->velocity_options->prescale,
1206
paint_options->random_options->prescale);
1213
gimp_paint_options_get_dynamic_hardness (GimpPaintOptions *paint_options,
1214
const GimpCoords *coords)
1216
gdouble hardness = 1.0;
1218
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), 1.0);
1219
g_return_val_if_fail (coords != NULL, 1.0);
1221
if (paint_options->pressure_options->hardness ||
1222
paint_options->velocity_options->hardness ||
1223
paint_options->random_options->hardness)
1225
gdouble pressure = -1.0;
1226
gdouble velocity = -1.0;
1227
gdouble random = -1.0;
1229
if (paint_options->pressure_options->hardness)
1230
pressure = GIMP_PAINT_PRESSURE_SCALE * coords->pressure;
1232
if (paint_options->velocity_options->hardness)
1233
velocity = GIMP_PAINT_VELOCITY_SCALE * (1 - coords->velocity);
1235
if (paint_options->random_options->hardness)
1236
random = g_random_double_range (0.0, 1.0);
1238
hardness = gimp_paint_options_get_dynamics_mix (pressure,
1239
paint_options->pressure_options->prescale,
1241
paint_options->velocity_options->prescale,
1243
paint_options->random_options->prescale);