[gimp] plug-ins: create file-pdf-save2 with the additional parameter.



commit c8550c95819007d7475a4340dd54242dfa64c07e
Author: Jehan <jehan girinstud io>
Date:   Thu Jun 15 00:22:25 2017 +0200

    plug-ins: create file-pdf-save2 with the additional parameter.
    
    And revert file-pdf-save to its previous signature before commit
    d03de52. For compatibility reason, we can't change the signature of a
    procedure available in previous stable releases.
    Also revert file-pdf-save-multi for the same reason. I don't create a
    file-pdf-save-multi2 though even though layers-as-pages could still be
    meaningful there (creating a multi-page PDF from several multi-layers
    images) but that's likely a special case which can be dealt with later.
    Obviously the interactive export will use file-pdf-save2.

 plug-ins/common/file-pdf-save.c |   71 ++++++++++++++++++++++++--------------
 1 files changed, 45 insertions(+), 26 deletions(-)
---
diff --git a/plug-ins/common/file-pdf-save.c b/plug-ins/common/file-pdf-save.c
index 4621be1..589e254 100644
--- a/plug-ins/common/file-pdf-save.c
+++ b/plug-ins/common/file-pdf-save.c
@@ -115,6 +115,7 @@
 
 
 #define SAVE_PROC               "file-pdf-save"
+#define SAVE2_PROC              "file-pdf-save2"
 #define SAVE_MULTI_PROC         "file-pdf-save-multi"
 #define PLUG_IN_BINARY          "file-pdf-save"
 #define PLUG_IN_ROLE            "gimp-file-pdf-save"
@@ -152,8 +153,6 @@ typedef enum
   SA_ARG_COUNT
 } SaveArgs;
 
-#define SA_ARG_COUNT_DEFAULT 5
-
 typedef enum
 {
   SMA_RUN_MODE,
@@ -162,7 +161,6 @@ typedef enum
   SMA_VECTORIZE,
   SMA_IGNORE_HIDDEN,
   SMA_APPLY_MASKS,
-  SMA_LAYERS_AS_PAGES,
   SMA_FILENAME,
   SMA_RAWFILENAME,
   SMA_ARG_COUNT
@@ -288,6 +286,18 @@ query (void)
 {
   static GimpParamDef save_args[] =
   {
+    { GIMP_PDB_INT32,    "run-mode",      "Run mode" },
+    { GIMP_PDB_IMAGE,    "image",         "Input image" },
+    { GIMP_PDB_DRAWABLE, "drawable",      "Input drawable" },
+    { GIMP_PDB_STRING,   "filename",      "The name of the file to save the image in" },
+    { GIMP_PDB_STRING,   "raw-filename",  "The name of the file to save the image in" },
+    { GIMP_PDB_INT32,    "vectorize",     "Convert bitmaps to vector graphics where possible. TRUE or FALSE" 
},
+    { GIMP_PDB_INT32,    "ignore-hidden", "Omit hidden layers and layers with zero opacity. TRUE or FALSE" },
+    { GIMP_PDB_INT32,    "apply-masks",   "Apply layer masks before saving. TRUE or FALSE (Keeping them will 
not change the output)" }
+  };
+
+  static GimpParamDef save2_args[] =
+  {
     { GIMP_PDB_INT32,    "run-mode",        "Run mode" },
     { GIMP_PDB_IMAGE,    "image",           "Input image" },
     { GIMP_PDB_DRAWABLE, "drawable",        "Input drawable" },
@@ -296,7 +306,7 @@ query (void)
     { GIMP_PDB_INT32,    "vectorize",       "Convert bitmaps to vector graphics where possible. TRUE or 
FALSE" },
     { GIMP_PDB_INT32,    "ignore-hidden",   "Omit hidden layers and layers with zero opacity. TRUE or FALSE" 
},
     { GIMP_PDB_INT32,    "apply-masks",     "Apply layer masks before saving. TRUE or FALSE (Keeping them 
will not change the output)" },
-    { GIMP_PDB_INT32,    "layers_as_pages", "Layers as pages" }
+    { GIMP_PDB_INT32,    "layers-as-pages", "Layers as pages. TRUE or FALSE" }
   };
 
   static GimpParamDef save_multi_args[] =
@@ -307,7 +317,6 @@ query (void)
     { GIMP_PDB_INT32,      "vectorize",       "Convert bitmaps to vector graphics where possible. TRUE or 
FALSE" },
     { GIMP_PDB_INT32,      "ignore-hidden",   "Omit hidden layers and layers with zero opacity. TRUE or 
FALSE" },
     { GIMP_PDB_INT32,      "apply-masks",     "Apply layer masks before saving. TRUE or FALSE (Keeping them 
will not change the output)" },
-    { GIMP_PDB_INT32,      "layers_as_pages", "Layers as pages" },
     { GIMP_PDB_STRING,     "filename",        "The name of the file to save the image in" },
     { GIMP_PDB_STRING,     "raw-filename",    "The name of the file to save the image in" }
   };
@@ -327,6 +336,23 @@ query (void)
                           G_N_ELEMENTS (save_args), 0,
                           save_args, NULL);
 
+  gimp_install_procedure (SAVE2_PROC,
+                          "Save files in PDF format",
+                          "Saves files in Adobe's Portable Document Format. "
+                          "PDF is designed to be easily processed by a variety "
+                          "of different platforms, and is a distant cousin of "
+                          "PostScript.\n"
+                          "This procedure adds an extra parameter to "
+                          "file-pdf-save to save layers as pages.",
+                          "Barak Itkin, Lionel N., Jehan",
+                          "Copyright Barak Itkin, Lionel N., Jehan",
+                          "August 2009, 2017",
+                          N_("Portable Document Format"),
+                          "RGB*, GRAY*, INDEXED*",
+                          GIMP_PLUGIN,
+                          G_N_ELEMENTS (save2_args), 0,
+                          save2_args, NULL);
+
   gimp_install_procedure (SAVE_MULTI_PROC,
                           "Save files in PDF format",
                           "Saves files in Adobe's Portable Document Format. "
@@ -347,8 +373,8 @@ query (void)
                              "<Image>/File/Create/PDF");
 #endif
 
-  gimp_register_file_handler_mime (SAVE_PROC, "application/pdf");
-  gimp_register_save_handler (SAVE_PROC, "pdf", "");
+  gimp_register_file_handler_mime (SAVE2_PROC, "application/pdf");
+  gimp_register_save_handler (SAVE2_PROC, "pdf", "");
 }
 
 static cairo_status_t
@@ -649,7 +675,8 @@ run (const gchar      *name,
                   drawText (layer_ID, opacity, cr, x_res, y_res);
                 }
               /* draw new page if "layers as pages" option is checked */
-              if (optimize.layers_as_pages)
+              if (optimize.layers_as_pages &&
+                  g_strcmp0 (name, SAVE2_PROC) == 0)
                 cairo_show_page (cr);
             }
           /* We are done with the layer - time to free some resources */
@@ -660,7 +687,8 @@ run (const gchar      *name,
       /* We are done with this image - Show it!
        * Unless that's a multi-page to avoid blank page at the end
        */
-      if (! optimize.layers_as_pages)
+      if (g_strcmp0 (name, SAVE2_PROC) != 0 ||
+          ! optimize.layers_as_pages)
         cairo_show_page (cr);
       cairo_restore (cr);
 
@@ -704,23 +732,21 @@ init_vals (const gchar      *name,
   gint32   i;
   gint32   image;
 
-  if (g_str_equal (name, SAVE_PROC))
+  if ((g_str_equal (name, SAVE_PROC) && nparams == SA_ARG_COUNT - 1) ||
+      (g_str_equal (name, SAVE2_PROC) && nparams == SA_ARG_COUNT))
     {
       single = TRUE;
-      if (nparams != SA_ARG_COUNT && nparams != SA_ARG_COUNT_DEFAULT)
-        return FALSE;
-
       *run_mode = param[SA_RUN_MODE].data.d_int32;
       image = param[SA_IMAGE].data.d_int32;
       file_name = param[SA_FILENAME].data.d_string;
 
-      if (*run_mode == GIMP_RUN_NONINTERACTIVE &&
-          nparams == SA_ARG_COUNT)
+      if (*run_mode == GIMP_RUN_NONINTERACTIVE)
         {
           optimize.apply_masks = param[SA_APPLY_MASKS].data.d_int32;
           optimize.vectorize = param[SA_VECTORIZE].data.d_int32;
           optimize.ignore_hidden = param[SA_IGNORE_HIDDEN].data.d_int32;
-          optimize.layers_as_pages = param[SA_LAYERS_AS_PAGES].data.d_int32;
+          if (nparams == SA_ARG_COUNT)
+            optimize.layers_as_pages = param[SA_LAYERS_AS_PAGES].data.d_int32;
         }
       else
         defaults = TRUE;
@@ -738,10 +764,11 @@ init_vals (const gchar      *name,
       optimize.apply_masks = param[SMA_APPLY_MASKS].data.d_int32;
       optimize.vectorize = param[SMA_VECTORIZE].data.d_int32;
       optimize.ignore_hidden = param[SMA_IGNORE_HIDDEN].data.d_int32;
-      optimize.layers_as_pages = param[SMA_LAYERS_AS_PAGES].data.d_int32;
     }
   else
-    return FALSE;
+    {
+      return FALSE;
+    }
 
   switch (*run_mode)
     {
@@ -916,7 +943,6 @@ gui_multi (void)
   GtkWidget   *vectorize_c;
   GtkWidget   *ignore_hidden_c;
   GtkWidget   *apply_c;
-  GtkWidget   *layers_as_pages_c;
   GtkWidget   *scroll;
   GtkWidget   *page_view;
   GtkWidget   *h_but_box;
@@ -1010,11 +1036,6 @@ gui_multi (void)
   gtk_box_pack_end (GTK_BOX (vbox), apply_c, FALSE, FALSE, 0);
   gimp_help_set_help_data (apply_c, _("Keeping the masks will not change the output"), NULL);
 
-  layers_as_pages_c = gtk_check_button_new_with_label (_("Layers as pages"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (layers_as_pages_c),
-                                optimize.layers_as_pages);
-  gtk_box_pack_end (GTK_BOX (vbox), layers_as_pages_c, FALSE, FALSE, 0);
-
   gtk_widget_show_all (window);
 
   g_signal_connect (G_OBJECT (file_browse), "clicked",
@@ -1046,8 +1067,6 @@ gui_multi (void)
     gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (vectorize_c));
   optimize.apply_masks =
     gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (apply_c));
-  optimize.layers_as_pages =
-    gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (layers_as_pages_c));
 
   gtk_widget_destroy (window);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]