1 #ifndef EXTENSION_INTERNAL_PS_H_SEEN
2 #define EXTENSION_INTERNAL_PS_H_SEEN
4 /** \file
5 * Declaration of PrintPS, the internal module used to do Postscript Printing.
6 */
7 /*
8 * Authors:
9 * Lauris Kaplinski <lauris@kaplinski.com>
10 * Ted Gould <ted@gould.cx>
11 *
12 * Lauris' original code is in the public domain.
13 * Ted's changes are licensed under the GNU GPL.
14 */
16 #include <config.h>
17 #include "extension/extension.h"
18 #include "extension/implementation/implementation.h"
19 #include <set>
20 #include <string>
22 #include "libnr/nr-path.h"
24 #include "svg/stringstream.h"
26 namespace Inkscape {
27 namespace Extension {
28 namespace Internal {
30 class PrintPS : public Inkscape::Extension::Implementation::Implementation {
31 float _width;
32 float _height;
33 FILE *_stream;
34 unsigned short _dpi;
35 bool _bitmap;
36 std::set<std::string> _latin1_encoded_fonts;
37 bool _newlatin1font_proc_defined;
39 void print_bpath(SVGOStringStream &os, NArtBpath const *bp);
41 void print_fill_style(SVGOStringStream &os, SPStyle const *style, NRRect const *pbox);
42 void print_stroke_style(SVGOStringStream &os, SPStyle const *style);
44 char const *PSFontName(SPStyle const *style);
46 unsigned int print_image(FILE *ofp, guchar *px, unsigned int width, unsigned int height, unsigned int rs,
47 NRMatrix const *transform);
48 void compress_packbits(int nin, guchar *src, int *nout, guchar *dst);
50 /* ASCII 85 variables */
51 guint32 ascii85_buf;
52 int ascii85_len;
53 int ascii85_linewidth;
54 /* ASCII 85 Functions */
55 void ascii85_init(void);
56 void ascii85_flush(SVGOStringStream &os);
57 inline void ascii85_out(guchar byte, SVGOStringStream &os);
58 void ascii85_nout(int n, guchar *uptr, SVGOStringStream &os);
59 void ascii85_done(SVGOStringStream &os);
62 public:
63 PrintPS(void);
64 virtual ~PrintPS(void);
66 /* Print functions */
67 virtual unsigned int setup(Inkscape::Extension::Print *module);
68 /*
69 virtual unsigned int set_preview(Inkscape::Extension::Print *module);
70 */
72 virtual unsigned int begin(Inkscape::Extension::Print *module, SPDocument *doc);
73 virtual unsigned int finish(Inkscape::Extension::Print *module);
75 /* Rendering methods */
76 virtual unsigned int bind(Inkscape::Extension::Print *module, NRMatrix const *transform, float opacity);
77 virtual unsigned int release(Inkscape::Extension::Print *module);
78 virtual unsigned int comment(Inkscape::Extension::Print *module, char const *comment);
79 virtual unsigned int fill(Inkscape::Extension::Print *module, NRBPath const *bpath, NRMatrix const *ctm, SPStyle const *style,
80 NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
81 virtual unsigned int stroke(Inkscape::Extension::Print *module, NRBPath const *bpath, NRMatrix const *transform, SPStyle const *style,
82 NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
83 virtual unsigned int image(Inkscape::Extension::Print *module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,
84 NRMatrix const *transform, SPStyle const *style);
85 virtual unsigned int text(Inkscape::Extension::Print *module, char const *text,
86 NR::Point p, SPStyle const *style);
88 bool textToPath(Inkscape::Extension::Print *ext);
89 static void init(void);
90 };
92 } /* namespace Internal */
93 } /* namespace Extension */
94 } /* namespace Inkscape */
97 #endif /* !EXTENSION_INTERNAL_PS_H_SEEN */
99 /*
100 Local Variables:
101 mode:c++
102 c-file-style:"stroustrup"
103 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
104 indent-tabs-mode:nil
105 fill-column:99
106 End:
107 */
108 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :