X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fprint.cpp;h=e0601aa339eb930a9568868011416e79f08e9533;hb=42382dfb4164b919ffcdf03766da9f8be4e43b42;hp=624021c9a38291c728448fb5c0ef5a210abb4801;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/print.cpp b/src/print.cpp index 624021c9a..e0601aa33 100644 --- a/src/print.cpp +++ b/src/print.cpp @@ -1,11 +1,12 @@ -#define __SP_PRINT_C__ - /** \file * Frontend to printing */ /* * Author: * Lauris Kaplinski + * Kees Cook + * Jon A. Cruz + * Abhishek Sharma * * This code is in public domain */ @@ -14,35 +15,26 @@ # include "config.h" #endif - - +#include "inkscape.h" +#include "desktop.h" #include "sp-item.h" #include "extension/print.h" #include "extension/system.h" #include "print.h" -#if 0 -# include - -# ifdef WIN32 -# include -# endif +#include "ui/dialog/print.h" -# ifdef WITH_GNOME_PRINT -# include -# endif -#endif /* Identity typedef */ -unsigned int sp_print_bind(SPPrintContext *ctx, NR::Matrix const &transform, float opacity) +unsigned int sp_print_bind(SPPrintContext *ctx, Geom::Matrix const &transform, float opacity) { - NRMatrix const ntransform(transform); + Geom::Matrix const ntransform(transform); return sp_print_bind(ctx, &ntransform, opacity); } unsigned int -sp_print_bind(SPPrintContext *ctx, NRMatrix const *transform, float opacity) +sp_print_bind(SPPrintContext *ctx, Geom::Matrix const *transform, float opacity) { return ctx->module->bind(transform, opacity); } @@ -60,28 +52,28 @@ sp_print_comment(SPPrintContext *ctx, char const *comment) } unsigned int -sp_print_fill(SPPrintContext *ctx, NRBPath const *bpath, NRMatrix const *ctm, SPStyle const *style, +sp_print_fill(SPPrintContext *ctx, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style, NRRect const *pbox, NRRect const *dbox, NRRect const *bbox) { - return ctx->module->fill(bpath, ctm, style, pbox, dbox, bbox); + return ctx->module->fill(pathv, ctm, style, pbox, dbox, bbox); } unsigned int -sp_print_stroke(SPPrintContext *ctx, NRBPath const *bpath, NRMatrix const *ctm, SPStyle const *style, +sp_print_stroke(SPPrintContext *ctx, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style, NRRect const *pbox, NRRect const *dbox, NRRect const *bbox) { - return ctx->module->stroke(bpath, ctm, style, pbox, dbox, bbox); + return ctx->module->stroke(pathv, ctm, style, pbox, dbox, bbox); } unsigned int sp_print_image_R8G8B8A8_N(SPPrintContext *ctx, guchar *px, unsigned int w, unsigned int h, unsigned int rs, - NRMatrix const *transform, SPStyle const *style) + Geom::Matrix const *transform, SPStyle const *style) { return ctx->module->image(px, w, h, rs, transform, style); } -unsigned int sp_print_text(SPPrintContext *ctx, char const *text, NR::Point p, +unsigned int sp_print_text(SPPrintContext *ctx, char const *text, Geom::Point p, SPStyle const *style) { return ctx->module->text(text, p, style); @@ -98,7 +90,7 @@ sp_print_preview_document(SPDocument *doc) Inkscape::Extension::Print *mod; unsigned int ret; - sp_document_ensure_up_to_date(doc); + doc->ensureUpToDate(); mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_DEFAULT); @@ -110,18 +102,17 @@ sp_print_preview_document(SPDocument *doc) /* fixme: This has to go into module constructor somehow */ /* Create new arena */ - mod->base = SP_ITEM(sp_document_root(doc)); + mod->base = SP_ITEM(doc->getRoot()); 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); + mod->dkey = SPItem::display_key_new(1); + mod->root = (mod->base)->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY); /* Print document */ ret = mod->begin(doc); - sp_item_invoke_print(mod->base, &context); + (mod->base)->invoke_print(&context); ret = mod->finish(); /* Release arena */ - sp_item_invoke_hide(mod->base, mod->dkey); + (mod->base)->invoke_hide(mod->dkey); mod->base = NULL; - nr_arena_item_unref(mod->root); mod->root = NULL; nr_object_unref((NRObject *) mod->arena); mod->arena = NULL; @@ -131,45 +122,25 @@ sp_print_preview_document(SPDocument *doc) } void -sp_print_document(SPDocument *doc, unsigned int direct) +sp_print_document(Gtk::Window& parentWindow, SPDocument *doc) { - Inkscape::Extension::Print *mod; - unsigned int ret; - - sp_document_ensure_up_to_date(doc); - - if (direct) { - mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_PS); - } else { - mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_DEFAULT); - } - - ret = mod->setup(); - - if (ret) { - SPPrintContext context; - 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); - 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; - } - - return; + doc->ensureUpToDate(); + + // Build arena + SPItem *base = SP_ITEM(doc->getRoot()); + NRArena *arena = NRArena::create(); + unsigned int dkey = SPItem::display_key_new(1); + // TODO investigate why we are grabbing root and then ignoring it. + NRArenaItem *root = base->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY); + + // Run print dialog + Inkscape::UI::Dialog::Print printop(doc,base); + Gtk::PrintOperationResult res = printop.run(Gtk::PRINT_OPERATION_ACTION_PRINT_DIALOG, parentWindow); + (void)res; // TODO handle this + + // Release arena + base->invoke_hide(dkey); + nr_object_unref((NRObject *) arena); } void @@ -181,7 +152,7 @@ sp_print_document_to_file(SPDocument *doc, gchar const *filename) gchar *oldoutput; unsigned int ret; - sp_document_ensure_up_to_date(doc); + doc->ensureUpToDate(); mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_PS); oldconst = mod->get_param_string("destination"); @@ -192,18 +163,17 @@ sp_print_document_to_file(SPDocument *doc, gchar const *filename) context.module = mod; /* fixme: This has to go into module constructor somehow */ /* Create new arena */ - mod->base = SP_ITEM(sp_document_root(doc)); + mod->base = SP_ITEM(doc->getRoot()); 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); + mod->dkey = SPItem::display_key_new(1); + mod->root = (mod->base)->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY); /* Print document */ ret = mod->begin(doc); - sp_item_invoke_print(mod->base, &context); + (mod->base)->invoke_print(&context); ret = mod->finish(); /* Release arena */ - sp_item_invoke_hide(mod->base, mod->dkey); + (mod->base)->invoke_hide(mod->dkey); mod->base = NULL; - nr_arena_item_unref(mod->root); mod->root = NULL; nr_object_unref((NRObject *) mod->arena); mod->arena = NULL; @@ -225,4 +195,4 @@ sp_print_document_to_file(SPDocument *doc, gchar const *filename) fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :