X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fextension%2Finternal%2Fcairo-png-out.cpp;h=6fd45d0d5a7afbcb31bda2f7eb90bdcfadad77c8;hb=5422ba934bd17d7f2578fda78ddc61df933a8113;hp=34c4258dfb6e793800cbe9662d0332e23c11e707;hpb=915f222e72a35382120e42ff1d204a99b16644b6;p=inkscape.git diff --git a/src/extension/internal/cairo-png-out.cpp b/src/extension/internal/cairo-png-out.cpp index 34c4258df..6fd45d0d5 100644 --- a/src/extension/internal/cairo-png-out.cpp +++ b/src/extension/internal/cairo-png-out.cpp @@ -1,128 +1,133 @@ -/* - * A quick hack to use the Cairo renderer to write out a file. This - * then makes 'save as...' PNG. - * - * Authors: - * Ted Gould - * Ulf Erikson - * - * Copyright (C) 2004-2006 Authors - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include "cairo-png-out.h" -#include "cairo-render-context.h" -#include "cairo-renderer.h" -#include -#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 - -#include "display/curve.h" -#include "display/canvas-bpath.h" -#include "sp-item.h" -#include "style.h" -#include "sp-root.h" -#include "sp-shape.h" - -#include "io/sys.h" - -namespace Inkscape { -namespace Extension { -namespace Internal { - -bool -CairoRendererOutput::check (Inkscape::Extension::Extension * module) -{ - return TRUE; -} - -static bool -png_render_document_to_file(SPDocument *doc, gchar const *filename) -{ - CairoRenderer *renderer; - CairoRenderContext *ctx; - - sp_document_ensure_up_to_date(doc); - -/* Start */ - /* Create new arena */ - SPItem *base = SP_ITEM(sp_document_root(doc)); - NRArena *arena = NRArena::create(); - unsigned dkey = sp_item_display_key_new(1); - NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY); - - /* Create renderer and context */ - renderer = new CairoRenderer(); - ctx = renderer->createContext(); - - /* Render document */ - bool ret = renderer->setupDocument(ctx, doc); - if (ret) { - renderer->renderItem(ctx, base); - ctx->saveAsPng(filename); - ret = ctx->finish(); - } - renderer->destroyContext(ctx); - - /* Release arena */ - sp_item_invoke_hide(base, dkey); - nr_arena_item_unref(root); - nr_object_unref((NRObject *) arena); -/* end */ - delete renderer; - - return ret; -} - - -/** - \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 .png) -*/ -void -CairoRendererOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri) -{ - if (!png_render_document_to_file(doc, uri)) - throw Inkscape::Extension::Output::save_failed(); - - return; -} - -/** - \brief A function allocate a copy of this function. - - This is the definition of Cairo PNG out. This function just - calls the extension system with the memory allocated XML that - describes the data. -*/ -void -CairoRendererOutput::init (void) -{ - Inkscape::Extension::build_from_mem( - "\n" - "Cairo PNG Output\n" - "org.inkscape.output.png.cairo\n" - "\n" - ".png\n" - "image/png\n" - "Cairo PNG (*.png)\n" - "PNG File\n" - "\n" - "", new CairoRendererOutput()); - - return; -} - -} } } /* namespace Inkscape, Extension, Implementation */ +/* + * A quick hack to use the Cairo renderer to write out a file. This + * then makes 'save as...' PNG. + * + * Authors: + * Ted Gould + * Ulf Erikson + * + * Copyright (C) 2004-2006 Authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifdef HAVE_CAIRO_PDF + +#include "cairo-png-out.h" +#include "cairo-render-context.h" +#include "cairo-renderer.h" +#include +#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 + +#include "display/curve.h" +#include "display/canvas-bpath.h" +#include "sp-item.h" +#include "style.h" +#include "sp-root.h" +#include "sp-shape.h" + +#include "io/sys.h" + +namespace Inkscape { +namespace Extension { +namespace Internal { + +bool +CairoRendererOutput::check (Inkscape::Extension::Extension * module) +{ + return TRUE; +} + +static bool +png_render_document_to_file(SPDocument *doc, gchar const *filename) +{ + CairoRenderer *renderer; + CairoRenderContext *ctx; + + sp_document_ensure_up_to_date(doc); + +/* Start */ + /* Create new arena */ + SPItem *base = SP_ITEM(sp_document_root(doc)); + NRArena *arena = NRArena::create(); + unsigned dkey = sp_item_display_key_new(1); + NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY); + + /* Create renderer and context */ + renderer = new CairoRenderer(); + ctx = renderer->createContext(); + + /* Render document */ + bool ret = renderer->setupDocument(ctx, doc); + if (ret) { + renderer->renderItem(ctx, base); + ctx->saveAsPng(filename); + ret = ctx->finish(); + } + renderer->destroyContext(ctx); + + /* Release arena */ + sp_item_invoke_hide(base, dkey); + nr_arena_item_unref(root); + nr_object_unref((NRObject *) arena); +/* end */ + delete renderer; + + return ret; +} + + +/** + \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 .png) +*/ +void +CairoRendererOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri) +{ + if (!png_render_document_to_file(doc, uri)) + throw Inkscape::Extension::Output::save_failed(); + + return; +} + +/** + \brief A function allocate a copy of this function. + + This is the definition of Cairo PNG out. This function just + calls the extension system with the memory allocated XML that + describes the data. +*/ +void +CairoRendererOutput::init (void) +{ + Inkscape::Extension::build_from_mem( + "\n" + "Cairo PNG Output\n" + "org.inkscape.output.png.cairo\n" + "\n" + ".png\n" + "image/png\n" + "Cairo PNG (*.png)\n" + "PNG File\n" + "\n" + "", new CairoRendererOutput()); + + return; +} + +} } } /* namespace Inkscape, Extension, Implementation */ + +#endif /* HAVE_CAIRO_PDF */