static void gimp_vectors_tree_view_drop_svg (GimpContainerTreeView *tree_view, const gchar *svg_data, gsize svg_data_len, GimpViewable *dest_viewable, GtkTreeViewDropPosition drop_pos) { GimpItemTreeView *item_view = GIMP_ITEM_TREE_VIEW (tree_view); GimpImage *image = gimp_item_tree_view_get_image (item_view); GimpVectors *parent; gint index; GError *error = NULL; if (image->gimp->be_verbose) g_print ("%s: SVG dropped (len = %d)\n", G_STRFUNC, (gint) svg_data_len); index = gimp_item_tree_view_get_drop_index (item_view, dest_viewable, drop_pos, (GimpViewable **) &parent); if (! gimp_vectors_import_buffer (image, svg_data, svg_data_len, TRUE, FALSE, parent, index, NULL, &error)) { gimp_message_literal (image->gimp, G_OBJECT (tree_view), GIMP_MESSAGE_ERROR, error->message); g_clear_error (&error); } else { gimp_image_flush (image); } }
void vectors_paste_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GtkWidget *widget; gchar *svg; gsize svg_size; return_if_no_image (image, data); return_if_no_widget (widget, data); svg = gimp_clipboard_get_svg (image->gimp, &svg_size); if (svg) { GError *error = NULL; if (! gimp_vectors_import_buffer (image, svg, svg_size, TRUE, FALSE, GIMP_IMAGE_ACTIVE_PARENT, -1, NULL, &error)) { gimp_message (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_ERROR, "%s", error->message); g_clear_error (&error); } else { gimp_image_flush (image); } g_free (svg); } }
static void gimp_display_shell_drop_svg (GtkWidget *widget, gint x, gint y, const guchar *svg_data, gsize svg_data_len, gpointer data) { GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (data); GimpImage *image = shell->display->image; GError *error = NULL; GIMP_LOG (DND, NULL); if (shell->display->gimp->busy) return; if (! image) return; if (! gimp_vectors_import_buffer (image, (const gchar *) svg_data, svg_data_len, TRUE, TRUE, -1, NULL, &error)) { gimp_message (shell->display->gimp, G_OBJECT (shell->display), GIMP_MESSAGE_ERROR, "%s", error->message); g_clear_error (&error); } else { gimp_display_shell_dnd_flush (shell, image); } }
static void edit_paste (GimpDisplay *display, gboolean paste_into) { GimpImage *image = gimp_display_get_image (display); gchar *svg; gsize svg_size; svg = gimp_clipboard_get_svg (display->gimp, &svg_size); if (svg) { if (gimp_vectors_import_buffer (image, svg, svg_size, TRUE, FALSE, GIMP_IMAGE_ACTIVE_PARENT, -1, NULL, NULL)) { gimp_image_flush (image); } g_free (svg); } else { GimpBuffer *buffer; buffer = gimp_clipboard_get_buffer (display->gimp); if (buffer) { GimpDisplayShell *shell = gimp_display_get_shell (display); gint x, y; gint width, height; gimp_display_shell_untransform_viewport (shell, &x, &y, &width, &height); if (gimp_edit_paste (image, gimp_image_get_active_drawable (image), buffer, paste_into, x, y, width, height)) { gimp_image_flush (image); } g_object_unref (buffer); } else { gimp_message_literal (display->gimp, G_OBJECT (display), GIMP_MESSAGE_WARNING, _("There is no image data in the clipboard to paste.")); } } }
static void gimp_vectors_tree_view_drop_svg (GimpContainerTreeView *tree_view, const gchar *svg_data, gsize svg_data_len, GimpViewable *dest_viewable, GtkTreeViewDropPosition drop_pos) { GimpItemTreeView *view = GIMP_ITEM_TREE_VIEW (tree_view); GimpImage *image = view->image; gint index = -1; GError *error = NULL; if (image->gimp->be_verbose) g_print ("%s: SVG dropped (len = %d)\n", G_STRFUNC, (gint) svg_data_len); if (dest_viewable) { index = gimp_image_get_vectors_index (image, GIMP_VECTORS (dest_viewable)); if (drop_pos == GTK_TREE_VIEW_DROP_AFTER) index++; } if (! gimp_vectors_import_buffer (image, svg_data, svg_data_len, TRUE, TRUE, index, NULL, &error)) { gimp_message (image->gimp, G_OBJECT (tree_view), GIMP_MESSAGE_ERROR, "%s", error->message); g_clear_error (&error); } else { gimp_image_flush (image); } }