diff options
Diffstat (limited to 'src/extension/internal/cairo-ps-out.cpp')
| -rw-r--r-- | src/extension/internal/cairo-ps-out.cpp | 158 |
1 files changed, 156 insertions, 2 deletions
diff --git a/src/extension/internal/cairo-ps-out.cpp b/src/extension/internal/cairo-ps-out.cpp index 61273b784..9776dafca 100644 --- a/src/extension/internal/cairo-ps-out.cpp +++ b/src/extension/internal/cairo-ps-out.cpp @@ -48,10 +48,20 @@ CairoPsOutput::check (Inkscape::Extension::Extension * module) if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PS)) return FALSE; - return TRUE;} + return TRUE; +} + +bool +CairoEpsOutput::check (Inkscape::Extension::Extension * module) +{ + if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_EPS)) + return FALSE; + + return TRUE; +} static bool -ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int level, bool texttopath, bool filtertobitmap, int resolution) +ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int level, bool texttopath, bool filtertobitmap, int resolution, bool eps = false) { CairoRenderer *renderer; CairoRenderContext *ctx; @@ -69,6 +79,7 @@ ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int l renderer = new CairoRenderer(); ctx = renderer->createContext(); ctx->setPSLevel(level); + ctx->setEPS(eps); ctx->setTextToPath(texttopath); ctx->setFilterToBitmap(filtertobitmap); ctx->setBitmapResolution(resolution); @@ -197,12 +208,121 @@ CairoPsOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gc } + +/** + \brief This function calls the output module with the filename + \param mod unused + \param doc Document to be saved + \param uri Filename to save to (probably will end in .ps) +*/ +void +CairoEpsOutput::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_PS); + if (ext == NULL) + return; + + const gchar *old_level = NULL; + const gchar *new_level = NULL; + int level = 1; + try { + old_level = ext->get_param_enum("PSlevel"); + new_level = mod->get_param_enum("PSlevel"); + if((new_level != NULL) && (g_ascii_strcasecmp("PS2", new_level) == 0)) + level = 0; +// ext->set_param_enum("PSlevel", new_level); + } + catch(...) { + g_warning("Parameter <PSlevel> might not exists"); + } + + bool old_textToPath = FALSE; + bool new_textToPath = FALSE; + try { + old_textToPath = ext->get_param_bool("textToPath"); + new_textToPath = mod->get_param_bool("textToPath"); + ext->set_param_bool("textToPath", new_textToPath); + } + catch(...) { + g_warning("Parameter <textToPath> might not exists"); + } + + bool old_blurToBitmap = FALSE; + bool new_blurToBitmap = FALSE; + try { + old_blurToBitmap = ext->get_param_bool("blurToBitmap"); + new_blurToBitmap = mod->get_param_bool("blurToBitmap"); + ext->set_param_bool("blurToBitmap", new_blurToBitmap); + } + catch(...) { + g_warning("Parameter <blurToBitmap> might not exists"); + } + + int old_bitmapResolution = 72; + int new_bitmapResolution = 72; + try { + old_bitmapResolution = ext->get_param_int("resolution"); + new_bitmapResolution = mod->get_param_int("resolution"); + ext->set_param_int("resolution", new_bitmapResolution); + } + catch(...) { + g_warning("Parameter <resolution> might not exists"); + } + + gchar * final_name; + final_name = g_strdup_printf("> %s", uri); + ret = ps_print_document_to_file(doc, final_name, level, new_textToPath, new_blurToBitmap, new_bitmapResolution, true); + g_free(final_name); + + try { + ext->set_param_int("resolution", old_bitmapResolution); + } + catch(...) { + g_warning("Parameter <resolution> might not exists"); + } + try { + ext->set_param_bool("blurToBitmap", old_blurToBitmap); + } + catch(...) { + g_warning("Parameter <blurToBitmap> might not exists"); + } + try { + ext->set_param_bool("textToPath", old_textToPath); + } + catch(...) { + g_warning("Parameter <textToPath> might not exists"); + } + try { +// ext->set_param_enum("PSlevel", old_level); + } + catch(...) { + g_warning("Parameter <PSlevel> might not exists"); + } + + + if (!ret) + throw Inkscape::Extension::Output::save_failed(); + + return; + +} + + bool CairoPsOutput::textToPath(Inkscape::Extension::Print * ext) { return ext->get_param_bool("textToPath"); } +bool +CairoEpsOutput::textToPath(Inkscape::Extension::Print * ext) +{ + return ext->get_param_bool("textToPath"); +} + #include "clear-n_.h" /** @@ -239,6 +359,40 @@ CairoPsOutput::init (void) return; } +/** + \brief A function allocate a copy of this function. + + This is the definition of Cairo EPS out. This function just + calls the extension system with the memory allocated XML that + describes the data. +*/ +void +CairoEpsOutput::init (void) +{ + Inkscape::Extension::build_from_mem( + "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n" + "<name>" N_("Encapsulated PostScript") "</name>\n" + "<id>" SP_MODULE_KEY_PRINT_CAIRO_EPS "</id>\n" + "<param name=\"PSlevel\" gui-text=\"" N_("Restrict to PS level") "\" type=\"enum\" >\n" + "<_item value='PS3'>" N_("PostScript level 3") "</_item>\n" +#if (CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 5, 2)) + "<_item value='PS2'>" N_("PostScript level 2") "</_item>\n" +#endif + "</param>\n" + "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n" + "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">false</param>\n" + "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n" + "<output>\n" + "<extension>.eps</extension>\n" + "<mimetype>image/x-e-postscript</mimetype>\n" + "<filetypename>" N_("Encapsulated PostScript (*.eps)") "</filetypename>\n" + "<filetypetooltip>" N_("Encapsulated PostScript File") "</filetypetooltip>\n" + "</output>\n" + "</inkscape-extension>", new CairoEpsOutput()); + + return; +} + } } } /* namespace Inkscape, Extension, Implementation */ #endif /* HAVE_CAIRO_PDF */ |
