Code

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