From c22515e0b70423eed459e1ea3f810425a24748a6 Mon Sep 17 00:00:00 2001 From: Jehan Date: Wed, 24 Apr 2024 01:12:01 +0200 Subject: [PATCH] plug-ins: port file-ps and file-svg to GimpVectorLoadProcedure. --- plug-ins/common/file-ps.c | 155 +++++++++++-------------------------- plug-ins/common/file-svg.c | 62 ++++++--------- 2 files changed, 66 insertions(+), 151 deletions(-) diff --git a/plug-ins/common/file-ps.c b/plug-ins/common/file-ps.c index ab11d8bff7..6e3e2d6f03 100644 --- a/plug-ins/common/file-ps.c +++ b/plug-ins/common/file-ps.c @@ -104,8 +104,6 @@ static const gchar dversion[] = "v1.17 19-Sep-2004"; #define PLUG_IN_ROLE "gimp-file-ps" #define STR_LENGTH 64 -#define MIN_RESOLUTION 5 -#define MAX_RESOLUTION 8192 typedef struct _PostScript PostScript; @@ -134,6 +132,10 @@ static GimpProcedure * ps_create_procedure (GimpPlugIn *plug_in, static GimpValueArray * ps_load (GimpProcedure *procedure, GimpRunMode run_mode, GFile *file, + gint width, + gint height, + gboolean preserve_ratio, + gboolean prefer_native_dimension, GimpMetadata *metadata, GimpMetadataLoadFlags *flags, GimpProcedureConfig *config, @@ -264,8 +266,6 @@ static gboolean load_dialog (GFile *file, GimpProcedure *procedure, GObject *config); -static gboolean resolution_change_callback (GtkWidget *adjustment, - gpointer data); typedef struct { @@ -330,9 +330,9 @@ ps_create_procedure (GimpPlugIn *plug_in, if (! strcmp (name, LOAD_PS_PROC) || ! strcmp (name, LOAD_EPS_PROC)) { - procedure = gimp_load_procedure_new (plug_in, name, - GIMP_PDB_PROC_TYPE_PLUGIN, - ps_load, NULL, NULL); + procedure = gimp_vector_load_procedure_new (plug_in, name, + GIMP_PDB_PROC_TYPE_PLUGIN, + ps_load, NULL, NULL); if (! strcmp (name, LOAD_PS_PROC)) { @@ -343,6 +343,8 @@ ps_create_procedure (GimpPlugIn *plug_in, "Load PostScript documents", name); + gimp_file_procedure_set_format_name (GIMP_FILE_PROCEDURE (procedure), + _("PostScript")); gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure), "application/postscript"); gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure), @@ -360,6 +362,8 @@ ps_create_procedure (GimpPlugIn *plug_in, "load Encapsulated PostScript images", name); + gimp_file_procedure_set_format_name (GIMP_FILE_PROCEDURE (procedure), + _("Encapsulated PostScript")); gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure), "image/x-eps"); gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure), @@ -376,24 +380,6 @@ ps_create_procedure (GimpPlugIn *plug_in, gimp_load_procedure_set_thumbnail_loader (GIMP_LOAD_PROCEDURE (procedure), LOAD_PS_THUMB_PROC); - GIMP_PROC_ARG_INT (procedure, "resolution", - _("Resol_ution"), - _("Resolution to interpret image (dpi)"), - MIN_RESOLUTION, MAX_RESOLUTION, 100, - GIMP_PARAM_READWRITE); - - GIMP_PROC_ARG_INT (procedure, "width", - _("_Width"), - _("Desired width"), - 1, GIMP_MAX_IMAGE_SIZE, 826, - GIMP_PARAM_READWRITE); - - GIMP_PROC_ARG_INT (procedure, "height", - _("_Height"), - _("Desired height"), - 1, GIMP_MAX_IMAGE_SIZE, 1170, - GIMP_PARAM_READWRITE); - GIMP_PROC_ARG_BOOLEAN (procedure, "check-bbox", _("Try _Bounding Box"), _("FALSE: Use width/height, TRUE: Use BoundingBox"), @@ -573,6 +559,10 @@ static GimpValueArray * ps_load (GimpProcedure *procedure, GimpRunMode run_mode, GFile *file, + gint width, + gint height, + gboolean preserve_ratio, + gboolean prefer_native_dimension, GimpMetadata *metadata, GimpMetadataLoadFlags *flags, GimpProcedureConfig *config, @@ -586,6 +576,14 @@ ps_load (GimpProcedure *procedure, l_run_mode = run_mode; + /* Why these values? No idea, they were the default until now, I just reuse + * them. XXX + */ + if (width == 0) + g_object_set (config, "width", 826, NULL); + if (height == 0) + g_object_set (config, "height", 1170, NULL); + switch (run_mode) { case GIMP_RUN_INTERACTIVE: @@ -1054,7 +1052,7 @@ load_image (GFile *file, const gchar *filename; gint width; gint height; - guint resolution; + gdouble resolution; gboolean use_bbox; gint pnm_type; gint text_alpha; @@ -1072,7 +1070,7 @@ load_image (GFile *file, if (config) { g_object_get (config, - "resolution", &resolution, + "pixel-density", &resolution, "width", &width, "height", &height, "pages", &pages, @@ -1088,7 +1086,7 @@ load_image (GFile *file, } #ifdef PS_DEBUG - g_print ("load_image:\n resolution = %d\n", resolution); + g_print ("load_image:\n resolution = %f\n", resolution); g_print (" %dx%d pixels\n", width, height); g_print (" BoundingBox: %d\n", use_bbox); g_print (" Coloring: %d\n", pnm_type); @@ -1163,9 +1161,7 @@ load_image (GFile *file, if (! image) break; - gimp_image_set_resolution (image, - (gdouble) resolution, - (gdouble) resolution); + gimp_image_set_resolution (image, resolution, resolution); if (n_images == max_images) { @@ -1389,9 +1385,9 @@ export_image (GFile *file, static void check_load_vals (GObject *config) { - gint resolution = MIN_RESOLUTION; - gdouble width = 2; - gdouble height = 2; + gdouble resolution = GIMP_MIN_RESOLUTION; + gint width = 2; + gint height = 2; gboolean use_bbox = FALSE; gint pnm_type = 6; gint text_alpha = 1; @@ -1401,7 +1397,7 @@ check_load_vals (GObject *config) if (config) { g_object_get (config, - "resolution", &resolution, + "pixel-density", &resolution, "width", &width, "height", &height, "check_bbox", &use_bbox, @@ -1412,10 +1408,10 @@ check_load_vals (GObject *config) NULL); } - if (resolution < MIN_RESOLUTION) - resolution = MIN_RESOLUTION; - else if (resolution > MAX_RESOLUTION) - resolution = MAX_RESOLUTION; + if (resolution < GIMP_MIN_RESOLUTION) + resolution = GIMP_MIN_RESOLUTION; + else if (resolution > GIMP_MAX_RESOLUTION) + resolution = GIMP_MAX_RESOLUTION; if (width < 2) width = 2; @@ -1436,7 +1432,7 @@ check_load_vals (GObject *config) if (config) { g_object_set (config, - "resolution", resolution, + "pixel-density", resolution, "width", width, "height", height, "check_bbox", use_bbox ? 1 : 0, @@ -1757,7 +1753,7 @@ ps_open (GFile *file, FILE *fd_popen = NULL; FILE *eps_file; gint width, height; - gint resolution; + gdouble resolution; gboolean use_bbox; gint pnm_type; gint text_alpha; @@ -1775,7 +1771,7 @@ ps_open (GFile *file, g_object_get (config, "width", &width, "height", &height, - "resolution", &resolution, + "pixel-density", &resolution, "check-bbox", &use_bbox, "coloring", &pnm_type, "text-alpha-bits", &text_alpha, @@ -1786,7 +1782,7 @@ ps_open (GFile *file, { width = 256; height = 256; - resolution = 256 / 4; + resolution = 256.0 / 4.0; } *llx = *lly = 0; @@ -1901,7 +1897,7 @@ ps_open (GFile *file, g_ptr_array_add (cmdA, g_strdup (g_get_prgname ())); g_ptr_array_add (cmdA, g_strdup_printf ("-sDEVICE=%s", driver)); - g_ptr_array_add (cmdA, g_strdup_printf ("-r%d", resolution)); + g_ptr_array_add (cmdA, g_strdup_printf ("-r%d", (gint) resolution)); if (is_pdf) { @@ -3648,7 +3644,6 @@ load_dialog (GFile *file, GtkListStore *store; GtkWidget *hbox; GtkWidget *vbox; - GtkWidget *spinbutton; GtkWidget *target = NULL; GtkWidget *selector = NULL; gint32 page_count; @@ -3659,9 +3654,9 @@ load_dialog (GFile *file, gimp_ui_init (PLUG_IN_BINARY); - dialog = gimp_procedure_dialog_new (GIMP_PROCEDURE (procedure), - GIMP_PROCEDURE_CONFIG (config), - NULL); + dialog = gimp_vector_load_procedure_dialog_new (GIMP_VECTOR_LOAD_PROCEDURE (procedure), + GIMP_PROCEDURE_CONFIG (config), + NULL); gimp_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, @@ -3687,35 +3682,6 @@ load_dialog (GFile *file, dialog); } - /* Rendering */ - /* Resolution / Width / Height */ - gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), - "rendering-options", - "resolution", - "width", - "height", - NULL); - - spinbutton = - gimp_procedure_dialog_get_scale_entry (GIMP_PROCEDURE_DIALOG (dialog), - "resolution", 1.0); - gimp_procedure_dialog_get_scale_entry (GIMP_PROCEDURE_DIALOG (dialog), - "width", 1.0); - gimp_procedure_dialog_get_scale_entry (GIMP_PROCEDURE_DIALOG (dialog), - "height", 1.0); - - g_signal_connect (spinbutton, "value-changed", - G_CALLBACK (resolution_change_callback), - config); - - gimp_procedure_dialog_get_label (GIMP_PROCEDURE_DIALOG (dialog), - "rendering-title", _("Rendering"), - FALSE, FALSE); - - gimp_procedure_dialog_fill_frame (GIMP_PROCEDURE_DIALOG (dialog), - "rendering-frame", "rendering-title", - FALSE, "rendering-options"); - /* Coloring */ store = gimp_int_store_new (_("B/W"), 4, _("Gray"), 5, @@ -3743,7 +3709,6 @@ load_dialog (GFile *file, vbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), "rendering-box", - "rendering-frame", "check-bbox", NULL); @@ -3780,7 +3745,6 @@ load_dialog (GFile *file, hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), "ps-top-row", "rendering-box", - "coloring", NULL); gtk_box_set_spacing (GTK_BOX (hbox), 12); gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE); @@ -3790,6 +3754,7 @@ load_dialog (GFile *file, hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), "ps-bottom-row", + "coloring", "text-alpha-bits", "graphoc-alpha-bits", NULL); @@ -3985,35 +3950,3 @@ save_unit_toggle_update (GtkWidget *widget, "y-offset", y_offset * factor, NULL); } - -static gboolean -resolution_change_callback (GtkWidget *adjustment, - gpointer data) -{ - GimpProcedureConfig *config = GIMP_PROCEDURE_CONFIG (data); - gdouble ratio = 1.0; - gint old_resolution; - gdouble resolution; - gint width; - gint height; - - g_object_get (config, - "resolution", &old_resolution, - "width", &width, - "height", &height, - NULL); - resolution = gimp_label_spin_get_value (GIMP_LABEL_SPIN (adjustment)); - - if (old_resolution) - ratio = resolution / old_resolution; - - width *= ratio; - height *= ratio; - - g_object_set (config, - "width", width, - "height", height, - NULL); - return TRUE; - -} diff --git a/plug-ins/common/file-svg.c b/plug-ins/common/file-svg.c index 6020f8b60d..290b16c170 100644 --- a/plug-ins/common/file-svg.c +++ b/plug-ins/common/file-svg.c @@ -78,6 +78,10 @@ static GimpProcedure * svg_create_procedure (GimpPlugIn *plug_in, static GimpValueArray * svg_load (GimpProcedure *procedure, GimpRunMode run_mode, GFile *file, + gint width, + gint height, + gboolean preserve_ratio, + gboolean prefer_native_dimension, GimpMetadata *metadata, GimpMetadataLoadFlags *flags, GimpProcedureConfig *config, @@ -156,9 +160,9 @@ svg_create_procedure (GimpPlugIn *plug_in, if (! strcmp (name, LOAD_PROC)) { - procedure = gimp_load_procedure_new (plug_in, name, - GIMP_PDB_PROC_TYPE_PLUGIN, - svg_load, NULL, NULL); + procedure = gimp_vector_load_procedure_new (plug_in, name, + GIMP_PDB_PROC_TYPE_PLUGIN, + svg_load, NULL, NULL); gimp_procedure_set_menu_label (procedure, _("SVG image")); @@ -172,6 +176,8 @@ svg_create_procedure (GimpPlugIn *plug_in, "Dom Lachowicz ", SVG_VERSION); + gimp_file_procedure_set_format_name (GIMP_FILE_PROCEDURE (procedure), + _("SVG")); gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure), "image/svg+xml"); gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure), @@ -182,28 +188,6 @@ svg_create_procedure (GimpPlugIn *plug_in, gimp_load_procedure_set_thumbnail_loader (GIMP_LOAD_PROCEDURE (procedure), LOAD_THUMB_PROC); - GIMP_PROC_ARG_DOUBLE (procedure, "resolution", - _("Resolu_tion"), - _("Resolution to use for rendering the SVG"), - GIMP_MIN_RESOLUTION, GIMP_MAX_RESOLUTION, 300, - GIMP_PARAM_READWRITE); - - GIMP_PROC_ARG_INT (procedure, "width", - _("_Width"), - _("Width (in pixels) to load the SVG in. " - "(0 for original width, a negative width to " - "specify a maximum width)"), - -GIMP_MAX_IMAGE_SIZE, GIMP_MAX_IMAGE_SIZE, 0, - GIMP_PARAM_READWRITE); - - GIMP_PROC_ARG_INT (procedure, "height", - _("_Height"), - _("Height (in pixels) to load the SVG in. " - "(0 for original height, a negative height to " - "specify a maximum height)"), - -GIMP_MAX_IMAGE_SIZE, GIMP_MAX_IMAGE_SIZE, 0, - GIMP_PARAM_READWRITE); - GIMP_PROC_ARG_CHOICE (procedure, "paths", _("_Paths"), _("Whether and how to import paths so that they can be used with the path tool"), @@ -237,6 +221,10 @@ static GimpValueArray * svg_load (GimpProcedure *procedure, GimpRunMode run_mode, GFile *file, + gint width, + gint height, + gboolean preserve_ratio, + gboolean prefer_native_dimension, GimpMetadata *metadata, GimpMetadataLoadFlags *flags, GimpProcedureConfig *config, @@ -248,8 +236,6 @@ svg_load (GimpProcedure *procedure, RsvgHandleFlags rsvg_flags = RSVG_HANDLE_FLAGS_NONE; GimpPDBStatusType status; gchar *import_paths; - gint width; - gint height; gdouble resolution; gegl_init (NULL, NULL); @@ -262,9 +248,9 @@ svg_load (GimpProcedure *procedure, } g_object_get (config, - "width", &width, - "height", &height, - "resolution", &resolution, + "width", &width, + "height", &height, + "pixel-density", &resolution, NULL); image = load_image (file, width, height, resolution, rsvg_flags, &error); @@ -815,16 +801,12 @@ load_dialog (GFile *file, } /* Scalable Vector Graphics is SVG, should perhaps not be translated */ - dialog = gimp_procedure_dialog_new (GIMP_PROCEDURE (procedure), - GIMP_PROCEDURE_CONFIG (config), - _("Render Scalable Vector Graphics")); + dialog = gimp_vector_load_procedure_dialog_new (GIMP_VECTOR_LOAD_PROCEDURE (procedure), + GIMP_PROCEDURE_CONFIG (config), + NULL); - gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), - "vbox-arguments", - "width", "height", "resolution", "paths", - NULL); - main_hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), "main-hbox", - "vbox-arguments", NULL); + main_hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), + "main-hbox", "paths", NULL); gtk_orientable_set_orientation (GTK_ORIENTABLE (main_hbox), GTK_ORIENTATION_HORIZONTAL); /* The SVG preview */ @@ -847,7 +829,7 @@ load_dialog (GFile *file, gtk_widget_show (size_label); /* query the initial size after the size label is created */ - g_object_get (config, "resolution", &vals.resolution, NULL); + g_object_get (config, "pixel-density", &vals.resolution, NULL); load_rsvg_size (file, &vals, *rsvg_flags, NULL); g_object_set (config,