1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
// SPDX-License-Identifier: GPL-2.0-or-later
/** @file
* TODO: insert short description here
*//*
* Authors: see git history
*
* Copyright (C) 2018 Authors
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
/** \file
* Frontend to printing
*/
/*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* Kees Cook <kees@outflux.net>
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
*
* This code is in public domain
*/
#include "print.h"
#include "desktop.h"
#include "document.h"
#include "inkscape.h"
#include "display/drawing-item.h"
#include "display/drawing.h"
#include "extension/print.h"
#include "extension/system.h"
#include "object/sp-item.h"
#include "object/sp-root.h"
#include "ui/dialog/print.h"
unsigned int
SPPrintContext::bind(Geom::Affine const &transform, float opacity)
{
return module->bind(transform, opacity);
}
unsigned int
SPPrintContext::release()
{
return module->release();
}
unsigned int
SPPrintContext::comment(char const *comment)
{
return module->comment(comment);
}
unsigned int
SPPrintContext::fill(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style,
Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
{
return module->fill(pathv, ctm, style, pbox, dbox, bbox);
}
unsigned int
SPPrintContext::stroke(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style,
Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
{
return module->stroke(pathv, ctm, style, pbox, dbox, bbox);
}
unsigned int
SPPrintContext::image_R8G8B8A8_N(guchar *px, unsigned int w, unsigned int h, unsigned int rs,
Geom::Affine const &transform, SPStyle const *style)
{
return module->image(px, w, h, rs, transform, style);
}
unsigned int SPPrintContext::text(char const *text, Geom::Point p,
SPStyle const *style)
{
return module->text(text, p, style);
}
/* UI */
void
sp_print_document(Gtk::Window& parentWindow, SPDocument *doc)
{
doc->ensureUpToDate();
// Build arena
SPItem *base = doc->getRoot();
// 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
}
void sp_print_document_to_file(SPDocument *doc, gchar const *filename)
{
doc->ensureUpToDate();
Inkscape::Extension::Print *mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_PS);
SPPrintContext context;
gchar const *oldconst = mod->get_param_string("destination");
gchar *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 drawing */
mod->base = doc->getRoot();
Inkscape::Drawing drawing;
mod->dkey = SPItem::display_key_new(1);
mod->root = (mod->base)->invoke_show(drawing, mod->dkey, SP_ITEM_SHOW_DISPLAY);
drawing.setRoot(mod->root);
/* Print document */
mod->begin(doc);
(mod->base)->invoke_print(&context);
mod->finish();
/* Release drawing items */
(mod->base)->invoke_hide(mod->dkey);
mod->base = nullptr;
mod->root = nullptr; // should be deleted by invoke_hide
/* end */
mod->set_param_string("destination", oldoutput);
g_free(oldoutput);
}
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|