static GimpPDBStatusType page_setup (gint32 image_ID) { GtkPrintOperation *operation; GimpParam *return_vals; gchar *name; gint n_return_vals; gimp_ui_init (PLUG_IN_BINARY, FALSE); operation = gtk_print_operation_new (); print_page_setup_load (operation, image_ID); print_page_setup_dialog (operation); print_page_setup_save (operation, image_ID); g_object_unref (operation); /* now notify a running print procedure about this change */ name = print_temp_proc_name (image_ID); /* we don't want the core to show an error message if the * temporary procedure does not exist */ gimp_plugin_set_pdb_error_handler (GIMP_PDB_ERROR_HANDLER_PLUGIN); return_vals = gimp_run_procedure (name, &n_return_vals, GIMP_PDB_IMAGE, image_ID, GIMP_PDB_END); gimp_destroy_params (return_vals, n_return_vals); g_free (name); return GIMP_PDB_SUCCESS; }
static GimpPDBStatusType print_image (gint32 image_ID, gboolean interactive, GError **error) { GtkPrintOperation *operation; GtkPrintOperationResult result; gint32 layer; PrintData data; /* create a print layer from the projection */ layer = gimp_layer_new_from_visible (image_ID, image_ID, PRINT_PROC_NAME); operation = gtk_print_operation_new (); gtk_print_operation_set_n_pages (operation, 1); print_operation_set_name (operation, image_ID); print_page_setup_load (operation, image_ID); /* fill in the PrintData struct */ data.image_id = image_ID; data.drawable_id = layer; data.unit = gimp_get_default_unit (); data.image_unit = gimp_image_get_unit (image_ID); data.offset_x = 0; data.offset_y = 0; data.center = CENTER_BOTH; data.use_full_page = FALSE; data.draw_crop_marks = FALSE; data.operation = operation; gimp_image_get_resolution (image_ID, &data.xres, &data.yres); print_settings_load (&data); gtk_print_operation_set_unit (operation, GTK_UNIT_PIXEL); g_signal_connect (operation, "begin-print", G_CALLBACK (begin_print), &data); g_signal_connect (operation, "draw-page", G_CALLBACK (draw_page), &data); g_signal_connect (operation, "end-print", G_CALLBACK (end_print), &layer); if (interactive) { gimp_ui_init (PLUG_IN_BINARY, FALSE); g_signal_connect_swapped (operation, "end-print", G_CALLBACK (print_settings_save), &data); g_signal_connect (operation, "create-custom-widget", G_CALLBACK (create_custom_widget), &data); gtk_print_operation_set_custom_tab_label (operation, _("Image Settings")); gtk_print_operation_set_embed_page_setup (operation, TRUE); result = gtk_print_operation_run (operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, NULL, error); if (result == GTK_PRINT_OPERATION_RESULT_APPLY || result == GTK_PRINT_OPERATION_RESULT_IN_PROGRESS) { print_page_setup_save (operation, image_ID); } } else { result = gtk_print_operation_run (operation, GTK_PRINT_OPERATION_ACTION_PRINT, NULL, error); } g_object_unref (operation); if (gimp_item_is_valid (layer)) gimp_item_delete (layer); switch (result) { case GTK_PRINT_OPERATION_RESULT_APPLY: case GTK_PRINT_OPERATION_RESULT_IN_PROGRESS: return GIMP_PDB_SUCCESS; case GTK_PRINT_OPERATION_RESULT_CANCEL: return GIMP_PDB_CANCEL; case GTK_PRINT_OPERATION_RESULT_ERROR: return GIMP_PDB_EXECUTION_ERROR; } return GIMP_PDB_EXECUTION_ERROR; }