157
static GimpParamDef args[] =
159
static const GimpParamDef args[] =
159
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
161
{ GIMP_PDB_INT32, "run-mode", "Interactive, non-interactive" },
160
162
{ GIMP_PDB_IMAGE, "image", "Input image (unused)" },
161
163
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
162
{ GIMP_PDB_FLOAT, "lum_threshold", "Luminosity threshold (0.0 - 1.0)" },
163
{ GIMP_PDB_FLOAT, "flare_inten", "Flare intensity (0.0 - 1.0)" },
164
{ GIMP_PDB_INT32, "spike_len", "Spike length (in pixels)" },
165
{ GIMP_PDB_INT32, "spike_pts", "# of spike points" },
166
{ GIMP_PDB_INT32, "spike_angle", "Spike angle (0-360 degrees, -1: random)" },
164
{ GIMP_PDB_FLOAT, "lum-threshold", "Luminosity threshold (0.0 - 1.0)" },
165
{ GIMP_PDB_FLOAT, "flare-inten", "Flare intensity (0.0 - 1.0)" },
166
{ GIMP_PDB_INT32, "spike-len", "Spike length (in pixels)" },
167
{ GIMP_PDB_INT32, "spike-pts", "# of spike points" },
168
{ GIMP_PDB_INT32, "spike-angle", "Spike angle (0-360 degrees, -1: random)" },
167
169
{ GIMP_PDB_FLOAT, "density", "Spike density (0.0 - 1.0)" },
168
{ GIMP_PDB_FLOAT, "opacity", "Opacity (0.0 - 1.0)" },
169
{ GIMP_PDB_FLOAT, "random_hue", "Random hue (0.0 - 1.0)" },
170
{ GIMP_PDB_FLOAT, "random_saturation", "Random saturation (0.0 - 1.0)" },
171
{ GIMP_PDB_INT32, "preserve_luminosity", "Preserve luminosity (TRUE/FALSE)" },
170
{ GIMP_PDB_FLOAT, "transparency", "Transparency (0.0 - 1.0)" },
171
{ GIMP_PDB_FLOAT, "random-hue", "Random hue (0.0 - 1.0)" },
172
{ GIMP_PDB_FLOAT, "random-saturation", "Random saturation (0.0 - 1.0)" },
173
{ GIMP_PDB_INT32, "preserve-luminosity", "Preserve luminosity (TRUE/FALSE)" },
172
174
{ GIMP_PDB_INT32, "inverse", "Inverse (TRUE/FALSE)" },
173
175
{ GIMP_PDB_INT32, "border", "Add border (TRUE/FALSE)" },
174
{ GIMP_PDB_INT32, "colortype", "Color of sparkles: { NATURAL (0), FOREGROUND (1), BACKGROUND (2) }" }
176
{ GIMP_PDB_INT32, "color-type", "Color of sparkles: { NATURAL (0), FOREGROUND (1), BACKGROUND (2) }" }
177
gimp_install_procedure ("plug_in_sparkle",
178
"Simulates pixel bloom and diffraction effects",
179
gimp_install_procedure (PLUG_IN_PROC,
180
N_("Turn bright spots into starry sparkles"),
179
181
"Uses a percentage based luminoisty threhsold to find "
180
182
"candidate pixels for adding some sparkles (spikes). ",
181
183
"John Beale, & (ported to GIMP v0.54) Michael "
338
334
GtkObject *scale_data;
341
gimp_ui_init ("sparkle", FALSE);
343
dlg = gimp_dialog_new (_("Sparkle"), "sparkle",
345
gimp_standard_help_func, "plug-in-sparkle",
347
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
348
GTK_STOCK_OK, GTK_RESPONSE_OK,
337
gimp_ui_init (PLUG_IN_BINARY, FALSE);
339
dialog = gimp_dialog_new (_("Sparkle"), PLUG_IN_BINARY,
341
gimp_standard_help_func, PLUG_IN_PROC,
343
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
344
GTK_STOCK_OK, GTK_RESPONSE_OK,
348
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
353
gimp_window_set_transient (GTK_WINDOW (dialog));
352
355
main_vbox = gtk_vbox_new (FALSE, 12);
353
356
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
354
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_vbox,
357
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox);
356
358
gtk_widget_show (main_vbox);
360
preview = gimp_drawable_preview_new (drawable, &svals.update_preview);
361
gtk_box_pack_start_defaults (GTK_BOX (main_vbox), preview);
362
gtk_widget_show (preview);
363
g_signal_connect_swapped (preview, "invalidated",
364
G_CALLBACK (sparkle),
358
367
table = gtk_table_new (9, 3, FALSE);
359
368
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
360
369
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
365
374
gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
366
_("Luminosity _Threshold:"), SCALE_WIDTH, ENTRY_WIDTH,
375
_("Luminosity _threshold:"), SCALE_WIDTH, ENTRY_WIDTH,
367
376
svals.lum_threshold, 0.0, 0.1, 0.001, 0.01, 3,
369
_("Adjust the Luminosity Threshold"), NULL);
370
g_signal_connect (scale_data, "value_changed",
378
_("Adjust the luminosity threshold"), NULL);
379
g_signal_connect (scale_data, "value-changed",
371
380
G_CALLBACK (gimp_double_adjustment_update),
372
381
&svals.lum_threshold);
382
g_signal_connect_swapped (scale_data, "value-changed",
383
G_CALLBACK (gimp_preview_invalidate),
375
387
gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
376
388
_("F_lare intensity:"), SCALE_WIDTH, ENTRY_WIDTH,
377
389
svals.flare_inten, 0.0, 1.0, 0.01, 0.1, 2,
379
_("Adjust the Flare Intensity"), NULL);
380
g_signal_connect (scale_data, "value_changed",
391
_("Adjust the flare intensity"), NULL);
392
g_signal_connect (scale_data, "value-changed",
381
393
G_CALLBACK (gimp_double_adjustment_update),
382
394
&svals.flare_inten);
395
g_signal_connect_swapped (scale_data, "value-changed",
396
G_CALLBACK (gimp_preview_invalidate),
385
400
gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
386
401
_("_Spike length:"), SCALE_WIDTH, ENTRY_WIDTH,
387
402
svals.spike_len, 1, 100, 1, 10, 0,
389
_("Adjust the Spike Length"), NULL);
390
g_signal_connect (scale_data, "value_changed",
404
_("Adjust the spike length"), NULL);
405
g_signal_connect (scale_data, "value-changed",
391
406
G_CALLBACK (gimp_double_adjustment_update),
392
407
&svals.spike_len);
408
g_signal_connect_swapped (scale_data, "value-changed",
409
G_CALLBACK (gimp_preview_invalidate),
395
413
gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
396
414
_("Sp_ike points:"), SCALE_WIDTH, ENTRY_WIDTH,
397
415
svals.spike_pts, 0, 16, 1, 4, 0,
399
_("Adjust the Number of Spikes"), NULL);
400
g_signal_connect (scale_data, "value_changed",
417
_("Adjust the number of spikes"), NULL);
418
g_signal_connect (scale_data, "value-changed",
401
419
G_CALLBACK (gimp_double_adjustment_update),
402
420
&svals.spike_pts);
421
g_signal_connect_swapped (scale_data, "value-changed",
422
G_CALLBACK (gimp_preview_invalidate),
405
426
gimp_scale_entry_new (GTK_TABLE (table), 0, 4,
406
427
_("Spi_ke angle (-1: random):"), SCALE_WIDTH, ENTRY_WIDTH,
407
428
svals.spike_angle, -1, 360, 1, 15, 0,
409
_("Adjust the Spike Angle "
410
"(-1 means a Random Angle is chosen)"), NULL);
411
g_signal_connect (scale_data, "value_changed",
430
_("Adjust the spike angle "
431
"(-1 causes a random angle to be chosen)"), NULL);
432
g_signal_connect (scale_data, "value-changed",
412
433
G_CALLBACK (gimp_double_adjustment_update),
413
434
&svals.spike_angle);
435
g_signal_connect_swapped (scale_data, "value-changed",
436
G_CALLBACK (gimp_preview_invalidate),
416
440
gimp_scale_entry_new (GTK_TABLE (table), 0, 5,
417
441
_("Spik_e density:"), SCALE_WIDTH, ENTRY_WIDTH,
418
442
svals.density, 0.0, 1.0, 0.01, 0.1, 2,
420
_("Adjust the Spike Density"), NULL);
421
g_signal_connect (scale_data, "value_changed",
444
_("Adjust the spike density"), NULL);
445
g_signal_connect (scale_data, "value-changed",
422
446
G_CALLBACK (gimp_double_adjustment_update),
448
g_signal_connect_swapped (scale_data, "value-changed",
449
G_CALLBACK (gimp_preview_invalidate),
426
453
gimp_scale_entry_new (GTK_TABLE (table), 0, 6,
427
_("Op_acity:"), SCALE_WIDTH, ENTRY_WIDTH,
428
svals.opacity, 0.0, 1.0, 0.01, 0.1, 2,
454
_("Tr_ansparency:"), SCALE_WIDTH, ENTRY_WIDTH,
455
svals.transparency, 0.0, 1.0, 0.01, 0.1, 2,
430
_("Adjust the Opacity of the Spikes"), NULL);
431
g_signal_connect (scale_data, "value_changed",
457
_("Adjust the opacity of the spikes"), NULL);
458
g_signal_connect (scale_data, "value-changed",
432
459
G_CALLBACK (gimp_double_adjustment_update),
460
&svals.transparency);
461
g_signal_connect_swapped (scale_data, "value-changed",
462
G_CALLBACK (gimp_preview_invalidate),
436
466
gimp_scale_entry_new (GTK_TABLE (table), 0, 7,
437
467
_("_Random hue:"), SCALE_WIDTH, ENTRY_WIDTH,
438
468
svals.random_hue, 0.0, 1.0, 0.01, 0.1, 2,
440
_("Adjust the Value how much the Hue should "
441
"be changed randomly"), NULL);
442
g_signal_connect (scale_data, "value_changed",
470
_("Adjust how much the hue should be changed randomly"), NULL);
471
g_signal_connect (scale_data, "value-changed",
443
472
G_CALLBACK (gimp_double_adjustment_update),
444
473
&svals.random_hue);
474
g_signal_connect_swapped (scale_data, "value-changed",
475
G_CALLBACK (gimp_preview_invalidate),
447
479
gimp_scale_entry_new (GTK_TABLE (table), 0, 8,
448
480
_("Rando_m saturation:"), SCALE_WIDTH, ENTRY_WIDTH,
449
481
svals.random_saturation, 0.0, 1.0, 0.01, 0.1, 2,
451
_("Adjust the Value how much the Saturation should "
452
"be changed randomly"), NULL);
453
g_signal_connect (scale_data, "value_changed",
483
_("Adjust how much the saturation should be changed randomly"),
485
g_signal_connect (scale_data, "value-changed",
454
486
G_CALLBACK (gimp_double_adjustment_update),
455
487
&svals.random_saturation);
488
g_signal_connect_swapped (scale_data, "value-changed",
489
G_CALLBACK (gimp_preview_invalidate),
457
492
hbox = gtk_hbox_new (FALSE, 12);
458
493
gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
1020
1127
tile = rpnt (dest_rgn->drawable, tile, x1, y1, x2, y2,
1021
1128
xrt, yrt, tile_width, tile_height,
1022
&row, &col, bytes, in, color);
1129
&row, &col, bytes, in, color, dest_buf);
1023
1130
tile = rpnt (dest_rgn->drawable, tile, x1, y1, x2, y2,
1024
1131
xrt + 1.0, yrt, tile_width, tile_height,
1025
&row, &col, bytes, in, color);
1132
&row, &col, bytes, in, color, dest_buf);
1026
1133
tile = rpnt (dest_rgn->drawable, tile, x1, y1, x2, y2,
1027
1134
xrt + 1.0, yrt + 1.0, tile_width, tile_height,
1028
&row, &col, bytes, in, color);
1135
&row, &col, bytes, in, color, dest_buf);
1029
1136
tile = rpnt (dest_rgn->drawable, tile, x1, y1, x2, y2,
1030
1137
xrt, yrt + 1.0, tile_width, tile_height,
1031
&row, &col, bytes, in, color);
1138
&row, &col, bytes, in, color, dest_buf);