27
27
#include "actions-types.h"
29
29
#include "core/gimp.h"
30
#include "core/gimp-utils.h"
30
31
#include "core/gimpchannel.h"
31
32
#include "core/gimpchannel-select.h"
32
#include "core/gimpcontainer.h"
33
33
#include "core/gimpcontext.h"
34
34
#include "core/gimpimage.h"
35
35
#include "core/gimpimage-merge.h"
36
36
#include "core/gimpimage-undo.h"
37
37
#include "core/gimpitemundo.h"
38
#include "core/gimpparamspecs.h"
38
39
#include "core/gimpprogress.h"
39
40
#include "core/gimpstrokedesc.h"
40
41
#include "core/gimptoolinfo.h"
42
#include "pdb/procedural_db.h"
44
#include "plug-in/plug-in-run.h"
43
#include "pdb/gimppdb.h"
44
#include "pdb/gimpprocedure.h"
46
46
#include "vectors/gimpvectors.h"
47
47
#include "vectors/gimpvectors-export.h"
48
48
#include "vectors/gimpvectors-import.h"
50
50
#include "widgets/gimpaction.h"
51
#include "widgets/gimpclipboard.h"
51
52
#include "widgets/gimphelp-ids.h"
53
54
#include "display/gimpdisplay.h"
96
97
vectors_vectors_tool_cmd_callback (GtkAction *action,
100
101
GimpVectors *vectors;
101
102
GimpTool *active_tool;
102
return_if_no_vectors (gimage, vectors, data);
103
return_if_no_vectors (image, vectors, data);
104
active_tool = tool_manager_get_active (gimage->gimp);
105
active_tool = tool_manager_get_active (image->gimp);
106
107
if (! GIMP_IS_VECTOR_TOOL (active_tool))
108
GimpToolInfo *tool_info;
110
tool_info = (GimpToolInfo *)
111
gimp_container_get_child_by_name (gimage->gimp->tool_info_list,
109
GimpToolInfo *tool_info = gimp_get_tool_info (image->gimp,
114
112
if (GIMP_IS_TOOL_INFO (tool_info))
116
114
gimp_context_set_tool (action_data_get_context (data), tool_info);
117
active_tool = tool_manager_get_active (gimage->gimp);
115
active_tool = tool_manager_get_active (image->gimp);
182
180
vectors_new_last_vals_cmd_callback (GtkAction *action,
186
184
GimpVectors *new_vectors;
187
return_if_no_image (gimage, data);
185
return_if_no_image (image, data);
189
new_vectors = gimp_vectors_new (gimage,
187
new_vectors = gimp_vectors_new (image,
190
188
vectors_name ? vectors_name : _("New Path"));
192
gimp_image_add_vectors (gimage, new_vectors, -1);
190
gimp_image_add_vectors (image, new_vectors, -1);
194
gimp_image_flush (gimage);
192
gimp_image_flush (image);
198
196
vectors_raise_cmd_callback (GtkAction *action,
202
200
GimpVectors *vectors;
203
return_if_no_vectors (gimage, vectors, data);
201
return_if_no_vectors (image, vectors, data);
205
gimp_image_raise_vectors (gimage, vectors);
206
gimp_image_flush (gimage);
203
gimp_image_raise_vectors (image, vectors);
204
gimp_image_flush (image);
210
208
vectors_raise_to_top_cmd_callback (GtkAction *action,
214
212
GimpVectors *vectors;
215
return_if_no_vectors (gimage, vectors, data);
213
return_if_no_vectors (image, vectors, data);
217
gimp_image_raise_vectors_to_top (gimage, vectors);
218
gimp_image_flush (gimage);
215
gimp_image_raise_vectors_to_top (image, vectors);
216
gimp_image_flush (image);
222
220
vectors_lower_cmd_callback (GtkAction *action,
226
224
GimpVectors *vectors;
227
return_if_no_vectors (gimage, vectors, data);
225
return_if_no_vectors (image, vectors, data);
229
gimp_image_lower_vectors (gimage, vectors);
230
gimp_image_flush (gimage);
227
gimp_image_lower_vectors (image, vectors);
228
gimp_image_flush (image);
234
232
vectors_lower_to_bottom_cmd_callback (GtkAction *action,
238
236
GimpVectors *vectors;
239
return_if_no_vectors (gimage, vectors, data);
237
return_if_no_vectors (image, vectors, data);
241
gimp_image_lower_vectors_to_bottom (gimage, vectors);
242
gimp_image_flush (gimage);
239
gimp_image_lower_vectors_to_bottom (image, vectors);
240
gimp_image_flush (image);
246
244
vectors_duplicate_cmd_callback (GtkAction *action,
250
248
GimpVectors *vectors;
251
249
GimpVectors *new_vectors;
252
return_if_no_vectors (gimage, vectors, data);
250
return_if_no_vectors (image, vectors, data);
255
253
GIMP_VECTORS (gimp_item_duplicate (GIMP_ITEM (vectors),
256
254
G_TYPE_FROM_INSTANCE (vectors),
258
gimp_image_add_vectors (gimage, new_vectors, -1);
259
gimp_image_flush (gimage);
256
gimp_image_add_vectors (image, new_vectors, -1);
257
gimp_image_flush (image);
263
261
vectors_delete_cmd_callback (GtkAction *action,
267
265
GimpVectors *vectors;
268
return_if_no_vectors (gimage, vectors, data);
266
return_if_no_vectors (image, vectors, data);
270
gimp_image_remove_vectors (gimage, vectors);
271
gimp_image_flush (gimage);
268
gimp_image_remove_vectors (image, vectors);
269
gimp_image_flush (image);
275
273
vectors_merge_visible_cmd_callback (GtkAction *action,
279
277
GimpVectors *vectors;
280
return_if_no_vectors (gimage, vectors, data);
278
return_if_no_vectors (image, vectors, data);
282
gimp_image_merge_visible_vectors (gimage);
283
gimp_image_flush (gimage);
280
gimp_image_merge_visible_vectors (image);
281
gimp_image_flush (image);
311
ProcRecord *proc_rec;
314
return_if_no_image (gimage, data);
310
GimpProcedure *procedure;
312
GimpDisplay *display;
313
return_if_no_image (image, data);
314
return_if_no_widget (widget, data);
317
proc_rec = procedural_db_lookup (gimage->gimp,
318
"plug_in_sel2path_advanced");
317
procedure = gimp_pdb_lookup_procedure (image->gimp->pdb,
318
"plug-in-sel2path-advanced");
320
proc_rec = procedural_db_lookup (gimage->gimp,
320
procedure = gimp_pdb_lookup_procedure (image->gimp->pdb,
325
g_message ("Selection to path procedure lookup failed.");
325
gimp_message (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_ERROR,
326
"Selection to path procedure lookup failed.");
329
gdisp = gimp_context_get_display (action_data_get_context (data));
331
/* plug-in arguments as if called by <Image>/Filters/... */
332
args = g_new (Argument, 3);
334
args[0].arg_type = GIMP_PDB_INT32;
335
args[0].value.pdb_int = GIMP_RUN_INTERACTIVE;
336
args[1].arg_type = GIMP_PDB_IMAGE;
337
args[1].value.pdb_int = (gint32) gimp_image_get_ID (gimage);
338
args[2].arg_type = GIMP_PDB_DRAWABLE;
339
args[2].value.pdb_int = -1; /* unused */
341
plug_in_run (gimage->gimp, action_data_get_context (data),
342
gdisp ? GIMP_PROGRESS (gdisp) : NULL,
343
proc_rec, args, 3, FALSE, TRUE,
344
gdisp ? gimp_display_get_ID (gdisp) : 0);
330
display = gimp_context_get_display (action_data_get_context (data));
332
args = gimp_procedure_get_arguments (procedure);
333
gimp_value_array_truncate (args, 2);
335
g_value_set_int (&args->values[0], GIMP_RUN_INTERACTIVE);
336
gimp_value_set_image (&args->values[1], image);
338
gimp_procedure_execute_async (procedure, image->gimp,
339
action_data_get_context (data),
340
GIMP_PROGRESS (display), args,
341
GIMP_OBJECT (display));
343
g_value_array_free (args);
350
347
vectors_stroke_cmd_callback (GtkAction *action,
354
351
GimpVectors *vectors;
355
352
GimpDrawable *drawable;
356
353
GtkWidget *widget;
357
354
GtkWidget *dialog;
358
return_if_no_vectors (gimage, vectors, data);
355
return_if_no_vectors (image, vectors, data);
359
356
return_if_no_widget (widget, data);
361
drawable = gimp_image_active_drawable (gimage);
358
drawable = gimp_image_active_drawable (image);
365
g_message (_("There is no active layer or channel to stroke to."));
362
gimp_message (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_WARNING,
363
_("There is no active layer or channel to stroke to."));
369
367
dialog = stroke_dialog_new (GIMP_ITEM (vectors),
368
action_data_get_context (data),
370
369
_("Stroke Path"),
371
370
GIMP_STOCK_PATH_STROKE,
372
371
GIMP_HELP_PATH_STROKE,
382
381
GimpVectors *vectors;
383
382
GimpDrawable *drawable;
384
383
GimpContext *context;
385
385
GimpStrokeDesc *desc;
386
386
return_if_no_vectors (image, vectors, data);
387
return_if_no_context (context, data);
388
return_if_no_widget (widget, data);
388
390
drawable = gimp_image_active_drawable (image);
392
g_message (_("There is no active layer or channel to stroke to."));
394
gimp_message (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_WARNING,
395
_("There is no active layer or channel to stroke to."));
396
context = gimp_get_user_context (image->gimp);
398
desc = g_object_get_data (G_OBJECT (context), "saved-stroke-desc");
400
desc = g_object_get_data (G_OBJECT (image->gimp), "saved-stroke-desc");
401
403
g_object_ref (desc);
413
415
vectors_copy_cmd_callback (GtkAction *action,
417
419
GimpVectors *vectors;
418
return_if_no_vectors (gimage, vectors, data);
421
#warning FIXME: need vectors clipboard
421
return_if_no_vectors (image, vectors, data);
423
svg = gimp_vectors_export_string (image, vectors);
427
gimp_clipboard_set_svg (image->gimp, svg);
426
433
vectors_paste_cmd_callback (GtkAction *action,
430
return_if_no_image (gimage, data);
433
#warning FIXME: need vectors clipboard
440
return_if_no_image (image, data);
441
return_if_no_widget (widget, data);
443
svg = gimp_clipboard_get_svg (image->gimp, &svg_size);
447
GError *error = NULL;
449
if (! gimp_vectors_import_buffer (image, svg, svg_size,
450
TRUE, TRUE, -1, NULL, &error))
452
gimp_message (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_ERROR,
453
"%s", error->message);
454
g_clear_error (&error);
458
gimp_image_flush (image);
466
vectors_export_cmd_callback (GtkAction *action,
469
VectorsExportDialog *dialog;
471
GimpVectors *vectors;
473
return_if_no_vectors (image, vectors, data);
474
return_if_no_widget (widget, data);
476
dialog = vectors_export_dialog_new (image, widget,
477
vectors_export_active_only);
479
g_signal_connect (dialog->dialog, "response",
480
G_CALLBACK (vectors_export_response),
483
gtk_widget_show (dialog->dialog);
459
vectors_export_cmd_callback (GtkAction *action,
462
VectorsExportDialog *dialog;
464
GimpVectors *vectors;
466
return_if_no_vectors (gimage, vectors, data);
467
return_if_no_widget (widget, data);
469
dialog = vectors_export_dialog_new (gimage, widget,
470
vectors_export_active_only);
472
g_signal_connect (dialog->dialog, "response",
473
G_CALLBACK (vectors_export_response),
476
gtk_widget_show (dialog->dialog);
480
508
vectors_visible_cmd_callback (GtkAction *action,
484
512
GimpVectors *vectors;
485
513
gboolean visible;
486
return_if_no_vectors (gimage, vectors, data);
514
return_if_no_vectors (image, vectors, data);
488
516
visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));