index c73faaef60d7372717a53cb6a1b54cc9ffa597e8..88010e686a7e0c1110384c65a3765026a7e20ed9 100644 (file)
-/*\r
- * A quick hack to use the print output to write out a file. This\r
- * then makes 'save as...' PDF.\r
- *\r
- * Authors:\r
- * Ted Gould <ted@gould.cx>\r
- * Ulf Erikson <ulferikson@users.sf.net>\r
- *\r
- * Copyright (C) 2004-2006 Authors\r
- *\r
- * Released under GNU GPL, read the file 'COPYING' for more information\r
- */\r
-\r
-#ifdef HAVE_CONFIG_H\r
-# include <config.h>\r
-#endif\r
-#include "cairo-pdf-out.h"\r
-#include <print.h>\r
-#include "extension/system.h"\r
-#include "extension/print.h"\r
-#include "extension/db.h"\r
-#include "extension/output.h"\r
-#include "display/nr-arena.h"\r
-#include "display/nr-arena-item.h"\r
-#include "sp-path.h"\r
-\r
-namespace Inkscape {\r
-namespace Extension {\r
-namespace Internal {\r
-\r
-bool\r
-CairoPdfOutput::check (Inkscape::Extension::Extension * module)\r
-{\r
- if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF))\r
- return FALSE;\r
-\r
- return TRUE;\r
-}\r
-\r
-\r
-static unsigned int\r
-pdf_print_document_to_file(SPDocument *doc, gchar const *filename)\r
-{\r
- Inkscape::Extension::Print *mod;\r
- SPPrintContext context;\r
- gchar const *oldconst;\r
- gchar *oldoutput;\r
- unsigned int ret;\r
-\r
- sp_document_ensure_up_to_date(doc);\r
-\r
- mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_CAIRO_PDF);\r
- oldconst = mod->get_param_string("destination");\r
- oldoutput = g_strdup(oldconst);\r
- mod->set_param_string("destination", (gchar *)filename);\r
-\r
-/* Start */\r
- context.module = mod;\r
- /* fixme: This has to go into module constructor somehow */\r
- /* Create new arena */\r
- mod->base = SP_ITEM(sp_document_root(doc));\r
- mod->arena = NRArena::create();\r
- mod->dkey = sp_item_display_key_new(1);\r
- mod->root = sp_item_invoke_show(mod->base, mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);\r
- \r
- /* Print document */\r
- ret = mod->begin(doc);\r
- if (ret) {\r
- sp_item_invoke_print(mod->base, &context);\r
- ret = mod->finish();\r
- }\r
- \r
- /* Release arena */\r
- sp_item_invoke_hide(mod->base, mod->dkey);\r
- mod->base = NULL;\r
- nr_arena_item_unref(mod->root);\r
- mod->root = NULL;\r
- nr_object_unref((NRObject *) mod->arena);\r
- mod->arena = NULL;\r
-/* end */\r
-\r
- mod->set_param_string("destination", oldoutput);\r
- g_free(oldoutput);\r
-\r
- return ret;\r
-}\r
-\r
-\r
-/**\r
- \brief This function calls the print system with the filename\r
- \param mod unused\r
- \param doc Document to be saved\r
- \param uri Filename to save to (probably will end in .pdf)\r
-\r
- The most interesting thing that this function does is just attach\r
- an '>' on the front of the filename. This is the syntax used to\r
- tell the printing system to save to file.\r
-*/\r
-void\r
-CairoPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)\r
-{\r
- Inkscape::Extension::Extension * ext;\r
- unsigned int ret;\r
-\r
- ext = Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF);\r
- if (ext == NULL)\r
- return;\r
-\r
- gchar * final_name;\r
- final_name = g_strdup_printf("> %s", uri);\r
- ret = pdf_print_document_to_file(doc, final_name);\r
- g_free(final_name);\r
- \r
- if (!ret)\r
- throw Inkscape::Extension::Output::save_failed();\r
-\r
- return;\r
-}\r
-\r
-/**\r
- \brief A function allocate a copy of this function.\r
-\r
- This is the definition of PDF out. This function just\r
- calls the extension system with the memory allocated XML that\r
- describes the data.\r
-*/\r
-void\r
-CairoPdfOutput::init (void)\r
-{\r
- Inkscape::Extension::build_from_mem(\r
- "<inkscape-extension>\n"\r
- "<name>Cairo PDF Output</name>\n"\r
- "<id>org.inkscape.output.pdf.cairo</id>\n"\r
- "<output>\n"\r
- "<extension>.pdf</extension>\n"\r
- "<mimetype>application/pdf</mimetype>\n"\r
- "<filetypename>Cairo PDF (*.pdf)</filetypename>\n"\r
- "<filetypetooltip>PDF File</filetypetooltip>\n"\r
- "</output>\n"\r
- "</inkscape-extension>", new CairoPdfOutput());\r
-\r
- return;\r
-}\r
-\r
-} } } /* namespace Inkscape, Extension, Implementation */\r
+/*
+ * A quick hack to use the print output to write out a file. This
+ * then makes 'save as...' PDF.
+ *
+ * Authors:
+ * Ted Gould <ted@gould.cx>
+ * Ulf Erikson <ulferikson@users.sf.net>
+ *
+ * Copyright (C) 2004-2006 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_CAIRO_PDF
+
+#include "cairo-pdf-out.h"
+#include <print.h>
+#include "extension/system.h"
+#include "extension/print.h"
+#include "extension/db.h"
+#include "extension/output.h"
+#include "display/nr-arena.h"
+#include "display/nr-arena-item.h"
+#include "sp-path.h"
+
+namespace Inkscape {
+namespace Extension {
+namespace Internal {
+
+bool
+CairoPdfOutput::check (Inkscape::Extension::Extension * module)
+{
+ if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF))
+ return FALSE;
+
+ return TRUE;
+}
+
+
+static unsigned int
+pdf_print_document_to_file(SPDocument *doc, gchar const *filename)
+{
+ Inkscape::Extension::Print *mod;
+ SPPrintContext context;
+ gchar const *oldconst;
+ gchar *oldoutput;
+ unsigned int ret;
+
+ sp_document_ensure_up_to_date(doc);
+
+ mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_CAIRO_PDF);
+ oldconst = mod->get_param_string("destination");
+ oldoutput = g_strdup(oldconst);
+ mod->set_param_string("destination", (gchar *)filename);
+
+/* Start */
+ context.module = mod;
+ /* fixme: This has to go into module constructor somehow */
+ /* Create new arena */
+ mod->base = SP_ITEM(sp_document_root(doc));
+ mod->arena = NRArena::create();
+ mod->dkey = sp_item_display_key_new(1);
+ mod->root = sp_item_invoke_show(mod->base, mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
+
+ /* Print document */
+ ret = mod->begin(doc);
+ if (ret) {
+ sp_item_invoke_print(mod->base, &context);
+ ret = mod->finish();
+ }
+
+ /* Release arena */
+ sp_item_invoke_hide(mod->base, mod->dkey);
+ mod->base = NULL;
+ nr_arena_item_unref(mod->root);
+ mod->root = NULL;
+ nr_object_unref((NRObject *) mod->arena);
+ mod->arena = NULL;
+/* end */
+
+ mod->set_param_string("destination", oldoutput);
+ g_free(oldoutput);
+
+ return ret;
+}
+
+
+/**
+ \brief This function calls the print system with the filename
+ \param mod unused
+ \param doc Document to be saved
+ \param uri Filename to save to (probably will end in .pdf)
+
+ The most interesting thing that this function does is just attach
+ an '>' on the front of the filename. This is the syntax used to
+ tell the printing system to save to file.
+*/
+void
+CairoPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)
+{
+ Inkscape::Extension::Extension * ext;
+ unsigned int ret;
+
+ ext = Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF);
+ if (ext == NULL)
+ return;
+
+ gchar * final_name;
+ final_name = g_strdup_printf("> %s", uri);
+ ret = pdf_print_document_to_file(doc, final_name);
+ g_free(final_name);
+
+ if (!ret)
+ throw Inkscape::Extension::Output::save_failed();
+
+ return;
+}
+
+/**
+ \brief A function allocate a copy of this function.
+
+ This is the definition of PDF out. This function just
+ calls the extension system with the memory allocated XML that
+ describes the data.
+*/
+void
+CairoPdfOutput::init (void)
+{
+ Inkscape::Extension::build_from_mem(
+ "<inkscape-extension>\n"
+ "<name>Cairo PDF Output</name>\n"
+ "<id>org.inkscape.output.pdf.cairo</id>\n"
+ "<output>\n"
+ "<extension>.pdf</extension>\n"
+ "<mimetype>application/pdf</mimetype>\n"
+ "<filetypename>Cairo PDF (*.pdf)</filetypename>\n"
+ "<filetypetooltip>PDF File</filetypetooltip>\n"
+ "</output>\n"
+ "</inkscape-extension>", new CairoPdfOutput());
+
+ return;
+}
+
+} } } /* namespace Inkscape, Extension, Implementation */
+
+#endif /* HAVE_CAIRO_PDF */