48
48
#include <string.h>
52
50
#include <libgimp/gimp.h>
53
51
#include <libgimp/gimpui.h>
55
53
#include "libgimp/stdplugins-intl.h"
56
#define PLUG_IN_PROC "plug-in-flarefx"
57
#define PLUG_IN_BINARY "flarefx"
58
59
/* --- Typedefs --- */
66
66
typedef struct REFLECT
158
158
static FlareValues fvals =
160
128, 128, /* posx, posy */
160
128, 128 /* posx, posy */
164
163
static gfloat scolor, sglow, sinner, souter; /* size */
179
static GimpParamDef args[] =
178
static const GimpParamDef args[] =
181
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
180
{ GIMP_PDB_INT32, "run-mode", "Interactive, non-interactive" },
182
181
{ GIMP_PDB_IMAGE, "image", "Input image (unused)" },
183
182
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
184
{ GIMP_PDB_INT32, "posx", "X-position" },
185
{ GIMP_PDB_INT32, "posy", "Y-position" }
183
{ GIMP_PDB_INT32, "pos-x", "X-position" },
184
{ GIMP_PDB_INT32, "pos-y", "Y-position" }
188
gimp_install_procedure ("plug_in_flarefx",
189
"Add lens flare effects",
187
gimp_install_procedure (PLUG_IN_PROC,
188
N_("Add a lens flare effect"),
190
189
"Adds a lens flare effects. Makes your image look "
191
190
"like it was snapped with a cheap camera with a lot "
193
192
"Karl-Johan Andersson", /* Author */
194
193
"Karl-Johan Andersson", /* Copyright */
195
N_("Lens _Flare..."),
199
198
G_N_ELEMENTS (args), 0,
202
gimp_plugin_menu_register ("plug_in_flarefx",
203
"<Image>/Filters/Light Effects");
201
gimp_plugin_menu_register (PLUG_IN_PROC,
202
"<Image>/Filters/Light and Shadow/Light");
233
232
case GIMP_RUN_INTERACTIVE:
234
233
/* Possibly retrieve data */
235
gimp_get_data ("plug_in_flarefx", &fvals);
234
gimp_get_data (PLUG_IN_PROC, &fvals);
237
236
/* First acquire information with a dialog */
238
237
if (! flare_dialog (drawable))
256
255
case GIMP_RUN_WITH_LAST_VALS:
257
256
/* Possibly retrieve data */
258
gimp_get_data ("plug_in_flarefx", &fvals);
257
gimp_get_data (PLUG_IN_PROC, &fvals);
268
267
if (gimp_drawable_is_rgb (drawable->drawable_id) ||
269
268
gimp_drawable_is_gray (drawable->drawable_id))
271
gimp_progress_init (_("Render Flare..."));
270
gimp_progress_init (_("Render lens flare"));
272
271
gimp_tile_cache_ntiles (2 *
273
272
(drawable->width / gimp_tile_width () + 1));
281
280
if (run_mode == GIMP_RUN_INTERACTIVE)
282
gimp_set_data ("plug_in_flarefx", &fvals, sizeof (FlareValues));
281
gimp_set_data (PLUG_IN_PROC, &fvals, sizeof (FlareValues));
286
/* gimp_message ("FlareFX: cannot operate on indexed color images"); */
287
285
status = GIMP_PDB_EXECUTION_ERROR;
303
301
GtkWidget *frame;
306
gimp_ui_init ("flarefx", TRUE);
304
gimp_ui_init (PLUG_IN_BINARY, TRUE);
308
dialog = gimp_dialog_new (_("FlareFX"), "flarefx",
306
dialog = gimp_dialog_new (_("Lens Flare"), PLUG_IN_BINARY,
310
gimp_standard_help_func, "plug-in-flarefx",
308
gimp_standard_help_func, PLUG_IN_PROC,
312
310
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
313
311
GTK_STOCK_OK, GTK_RESPONSE_OK,
315
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
320
gimp_window_set_transient (GTK_WINDOW (dialog));
317
322
main_vbox = gtk_vbox_new (FALSE, 12);
318
323
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
319
324
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox);
320
325
gtk_widget_show (main_vbox);
322
preview = gimp_aspect_preview_new (drawable, &fvals.preview);
327
preview = gimp_zoom_preview_new (drawable);
323
328
gtk_widget_add_events (GIMP_PREVIEW (preview)->area,
324
329
GDK_POINTER_MOTION_MASK);
325
330
gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0);
361
366
bytes = drawable->bpp;
364
gimp_preview_get_size (preview, &width, &height);
365
src = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
366
&width, &height, &bytes);
369
src = gimp_zoom_preview_get_source (GIMP_ZOOM_PREVIEW (preview),
370
&width, &height, &bytes);
368
372
xs = (gdouble)fvals.posx * width / drawable->width;
369
373
ys = (gdouble)fvals.posy * height / drawable->height;
746
751
G_CALLBACK (g_free),
754
hbox = gtk_hbox_new (FALSE, 0);
755
gtk_container_add (GTK_CONTAINER (frame), hbox);
756
gtk_widget_show (hbox);
749
758
image_ID = gimp_drawable_get_image (drawable->drawable_id);
750
759
gimp_image_get_resolution (image_ID, &res_x, &res_y);
764
773
0, drawable->height);
766
775
gtk_table_set_row_spacing (GTK_TABLE (center->coords), 1, 12);
767
gtk_container_add (GTK_CONTAINER (frame), center->coords);
776
gtk_box_pack_start (GTK_BOX (hbox), center->coords, FALSE, FALSE, 0);
768
777
gtk_widget_show (center->coords);
770
g_signal_connect (center->coords, "value_changed",
779
g_signal_connect (center->coords, "value-changed",
771
780
G_CALLBACK (flare_center_coords_update),
773
g_signal_connect (center->coords, "refval_changed",
782
g_signal_connect (center->coords, "refval-changed",
774
783
G_CALLBACK (flare_center_coords_update),
777
check = gtk_check_button_new_with_mnemonic (_("_Show cursor"));
786
check = gtk_check_button_new_with_mnemonic (_("Show _position"));
778
787
gtk_table_attach (GTK_TABLE (center->coords), check, 0, 5, 2, 3,
779
788
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
780
789
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), show_cursor);
790
799
g_signal_connect (preview->area, "realize",
791
800
G_CALLBACK (flare_center_preview_realize),
793
g_signal_connect_after (preview->area, "expose_event",
802
g_signal_connect_after (preview->area, "expose-event",
794
803
G_CALLBACK (flare_center_preview_expose),
796
805
g_signal_connect (preview->area, "event",