Inkscape
Vector Graphics Editor
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages Concepts
print.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
/*
5 * Authors: see git history
6 *
7 * Copyright (C) 2018 Authors
8 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
9 */
13/*
14 * Author:
15 * Lauris Kaplinski <lauris@kaplinski.com>
16 * Kees Cook <kees@outflux.net>
17 * Jon A. Cruz <jon@joncruz.org>
18 * Abhishek Sharma
19 *
20 * This code is in public domain
21 */
22
23#include "print.h"
24
25#include "document.h"
26
27#include "display/drawing.h"
28
29#include "extension/print.h"
30#include "extension/system.h"
31
32#include "object/sp-item.h"
33#include "object/sp-root.h"
34
35#include "ui/dialog/print.h"
36
37
38unsigned int
39SPPrintContext::bind(Geom::Affine const &transform, float opacity)
40{
41 return module->bind(transform, opacity);
42}
43
44unsigned int
46{
47 return module->release();
48}
49
50unsigned int
51SPPrintContext::fill(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style,
52 Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
53{
54 return module->fill(pathv, ctm, style, pbox, dbox, bbox);
55}
56
57unsigned int
58SPPrintContext::stroke(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style,
59 Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
60{
61 return module->stroke(pathv, ctm, style, pbox, dbox, bbox);
62}
63
64unsigned int
65SPPrintContext::image_R8G8B8A8_N(guchar *px, unsigned int w, unsigned int h, unsigned int rs,
66 Geom::Affine const &transform, SPStyle const *style)
67{
68 return module->image(px, w, h, rs, transform, style);
69}
70
71unsigned int SPPrintContext::text(char const *text, Geom::Point p,
72 SPStyle const *style)
73{
74 return module->text(text, p, style);
75}
76
77/* UI */
78
79void
80sp_print_document(Gtk::Window& parentWindow, SPDocument *doc)
81{
82 doc->ensureUpToDate();
83
84 // Build arena
85 SPItem *base = doc->getRoot();
86
87 // Run print dialog
88 Inkscape::UI::Dialog::Print printop(doc,base);
89 Gtk::PrintOperation::Result res = printop.run(Gtk::PrintOperation::Action::PRINT_DIALOG, parentWindow);
90 (void)res; // TODO handle this
91}
92
93void sp_print_document_to_file(SPDocument *doc, gchar const *filename)
94{
95 doc->ensureUpToDate();
96
98 SPPrintContext context;
99 gchar const *oldconst = mod->get_param_string("destination");
100 gchar *oldoutput = g_strdup(oldconst);
101
102 mod->set_param_string("destination", (gchar *)filename);
103
104/* Start */
105 context.module = mod;
106 /* fixme: This has to go into module constructor somehow */
107 /* Create new drawing */
108 mod->base = doc->getRoot();
109 Inkscape::Drawing drawing;
110 mod->dkey = SPItem::display_key_new(1);
111 mod->root = (mod->base)->invoke_show(drawing, mod->dkey, SP_ITEM_SHOW_DISPLAY);
112 drawing.setRoot(mod->root);
113 /* Print document */
114 mod->begin(doc);
115 (mod->base)->invoke_print(&context);
116 mod->finish();
117 /* Release drawing items */
118 (mod->base)->invoke_hide(mod->dkey);
119 mod->base = nullptr;
120 mod->root = nullptr; // should be deleted by invoke_hide
121/* end */
122
123 mod->set_param_string("destination", oldoutput);
124 g_free(oldoutput);
125}
126
127
128/*
129 Local Variables:
130 mode:c++
131 c-file-style:"stroustrup"
132 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
133 indent-tabs-mode:nil
134 fill-column:99
135 End:
136*/
137// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
3x3 matrix representing an affine transformation.
Definition affine.h:70
Axis-aligned rectangle that can be empty.
Definition rect.h:203
Sequence of subpaths.
Definition pathvector.h:122
Two-dimensional point that doubles as a vector.
Definition point.h:66
void setRoot(DrawingItem *root)
Definition drawing.cpp:64
Gtk::PrintOperation::Result run(Gtk::PrintOperation::Action, Gtk::Window &parent_window)
Definition print.cpp:272
Typed SVG document implementation.
Definition document.h:102
SPRoot * getRoot()
Returns our SPRoot.
Definition document.h:201
int ensureUpToDate(unsigned int object_modified_tag=0)
Repeatedly works on getting the document updated, since sometimes it takes more than one pass to get ...
Base class for visual SVG elements.
Definition sp-item.h:109
static unsigned int display_key_new(unsigned numkeys)
Allocates unique integer keys.
Definition sp-item.cpp:1233
An SVG style object.
Definition style.h:45
const double w
Definition conic-4.cpp:19
vector< vpsc::Rectangle * > rs
SVG drawing for display.
Print * get_print(gchar const *key)
Definition system.cpp:294
void sp_print_document_to_file(SPDocument *doc, gchar const *filename)
Definition print.cpp:93
void sp_print_document(Gtk::Window &parentWindow, SPDocument *doc)
Definition print.cpp:80
Some things pertinent to all visible shapes: SPItem, SPItemView, SPItemCtx.
SPRoot: SVG <svg> implementation.
unsigned int bind(Geom::Affine const &transform, float opacity)
Definition print.cpp:39
unsigned int image_R8G8B8A8_N(unsigned char *px, unsigned int w, unsigned int h, unsigned int rs, Geom::Affine const &transform, SPStyle const *style)
Definition print.cpp:65
unsigned int release()
Definition print.cpp:45
unsigned int fill(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style, Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
Definition print.cpp:51
unsigned int stroke(Geom::PathVector const &pathv, Geom::Affine const &ctm, SPStyle const *style, Geom::OptRect const &pbox, Geom::OptRect const &dbox, Geom::OptRect const &bbox)
Definition print.cpp:58
unsigned int text(char const *text, Geom::Point p, SPStyle const *style)
Definition print.cpp:71
Print dialog.