dashpattern 0/0 now makes lines invisible
[swftools.git] / lib / pdf / CharOutputDev.h
blobd22dd536d8572a36e70d72e483685210c727e12a
1 #ifndef __charoutputdev_h__
2 #define __charoutputdev_h__
4 #include "../gfxdevice.h"
5 #include "../gfxsource.h"
6 #include "../gfxtools.h"
7 #include "../kdtree.h"
9 #include "InfoOutputDev.h"
10 #include "PDFDoc.h"
11 #include "GlobalParams.h"
12 #include "CommonOutputDev.h"
14 extern void addGlobalFont(const char*filename);
15 extern void addGlobalLanguageDir(const char*dir);
16 extern void addGlobalFontDir(const char*dirname);
18 class GFXLink;
20 class CharOutputDev: public CommonOutputDev {
21 public:
22 gfxdevice_t* device;
24 CharOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2);
25 virtual ~CharOutputDev();
27 virtual void setDevice(gfxdevice_t*dev);
28 virtual void setParameter(const char*key, const char*value);
30 virtual void beginPage(GfxState *state, int pageNum);
31 virtual void endPage();
33 virtual GBool upsideDown();
34 virtual GBool useDrawChar();
36 virtual void processLink(Link *link, Catalog *catalog);
37 virtual void saveState(GfxState *state) ;
38 virtual void restoreState(GfxState *state) ;
40 //----- update graphics state
41 virtual void updateFont(GfxState *state);
42 virtual void updateTextMat(GfxState *state);
44 //----- text drawing
45 virtual void beginString(GfxState *state, GString *s) ;
46 virtual void endString(GfxState *state) ;
47 virtual void endTextObject(GfxState *state);
48 virtual void drawChar(GfxState *state, double x, double y,
49 double dx, double dy,
50 double originX, double originY,
51 CharCode code, int nBytes, Unicode *u, int uLen);
53 //----- type 3 chars
54 virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen);
55 virtual void endType3Char(GfxState *state);
57 virtual void type3D0(GfxState *state, double wx, double wy);
58 virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury);
60 virtual GBool needNonText();
62 private:
64 int currentpage;
65 int type3active; // are we between beginType3()/endType3()?
67 gfxline_t* current_text_stroke;
68 gfxline_t* current_text_clip;
70 // state variables for space char detection
71 int last_char;
72 double last_char_x;
73 double last_char_y;
74 double last_char_x_fontsize;
75 double last_char_y_fontsize;
76 double last_char_advance;
77 double last_average_advance;
78 double last_ascent;
79 double last_descent;
80 char last_char_was_space;
82 GFXLink*last_link;
83 GFXLink*previous_link;
84 kdtree_t*links;
86 /* config */
87 int config_use_fontconfig;
88 int config_remapunicode;
89 int config_extrafontdata;
90 int config_bigchar;
91 int config_detectspaces;
92 int config_space_between_lines;
93 double config_fontquality;
94 char* config_linkdatafile;
97 class GFXLink {
98 double x1,y1,x2,y2;
99 int size;
100 int buf_size;
101 char*text;
102 public:
103 const char*action;
104 GFXLink*last;
105 void draw(CharOutputDev*out, gfxdevice_t*dev);
106 void addchar(int unicode);
107 GFXLink(GFXLink*last, const char*action, double x1, double y1, double x2, double y2);
108 ~GFXLink();
111 class GFXGlobalParams: public GlobalParams {
112 public:
113 GFXGlobalParams();
114 ~GFXGlobalParams();
115 virtual DisplayFontParam *getDisplayFont(GString *fontName);
118 #endif //__charoutputdev_h__