FLTK 1.3.8
Fl_PostScript.H
Go to the documentation of this file.
1 //
2 // "$Id$"
3 //
4 // Support for graphics output to PostScript file for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 2010-2011 by Bill Spitzak and others.
7 //
8 // This library is free software. Distribution and use rights are outlined in
9 // the file "COPYING" which should have been included with this file. If this
10 // file is missing or damaged, see the license at:
11 //
12 // http://www.fltk.org/COPYING.php
13 //
14 // Please report all bugs and problems on the following page:
15 //
16 // http://www.fltk.org/str.php
17 //
18 
23 #ifndef Fl_PostScript_H
24 #define Fl_PostScript_H
25 
26 #include <FL/Fl_Paged_Device.H>
27 #include <FL/fl_draw.H>
28 #include <stdarg.h>
29 
30 /* Signature of Fl_PostScript::close_command() functions passed as parameters. */
31 extern "C" {
32  typedef int (Fl_PostScript_Close_Command)(FILE *);
33 }
34 
62 private:
63  void transformed_draw_extra(const char* str, int n, double x, double y, int w, bool rtl);
64  void *prepare_rle85();
65  void write_rle85(uchar b, void *data);
66  void close_rle85(void *data);
67  void *prepare85();
68  void write85(void *data, const uchar *p, int len);
69  void close85(void *data);
70 public:
71  static const char *class_id;
72  const char *class_name() {return class_id;};
74 #ifndef FL_DOXYGEN
75  enum SHAPE{NONE=0, LINE, LOOP, POLYGON, POINTS};
76 
77 class Clip {
78  public:
79  int x, y, w, h;
80  Clip *prev;
81  };
82  Clip * clip_;
83 
84  int lang_level_;
85  int gap_;
86  int pages_;
87 
88  double width_;
89  double height_;
90 
91  int shape_;
92  int linewidth_;// need for clipping, lang level 1-2
93  int linestyle_;//
94  int interpolate_; //interpolation of images
95  unsigned char cr_,cg_,cb_;
96  char linedash_[256];//should be enough
97  void concat(); // transform ror scalable dradings...
98  void reconcat(); //invert
99  void recover(); //recovers the state after grestore (such as line styles...)
100  void reset();
101 
102  uchar * mask;
103  int mx; // width of mask;
104  int my; // mask lines
105  //Fl_Color bg_;
106  Fl_PostScript_Close_Command* close_cmd_;
107  int page_policy_;
108  int nPages;
109  int orientation_;
110 
111  float scale_x;
112  float scale_y;
113  float angle;
114  int left_margin;
115  int top_margin;
116 
117  FILE *output;
118  double pw_, ph_;
119 
120  uchar bg_r, bg_g, bg_b;
121  int start_postscript (int pagecount, enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout);
122  /* int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
123  */
124  void transformed_draw(const char* s, int n, double x, double y); //precise text placing
125  void transformed_draw(const char* s, double x, double y);
126  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
127 
128  enum Fl_Paged_Device::Page_Format page_format_;
129  char *ps_filename_;
130 
131  void page_policy(int p);
132  int page_policy(){return page_policy_;};
133  void close_command(Fl_PostScript_Close_Command* cmd){close_cmd_=cmd;};
134  FILE * file() {return output;};
135  //void orientation (int o);
136  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int pages = 0); // ps (also multi-page) constructor
137  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int x, int y, int w, int h); //eps constructor
138  void interpolate(int i){interpolate_=i;};
139  int interpolate(){return interpolate_;}
140 
141  void page(double pw, double ph, int media = 0);
142  void page(int format);
143 #endif // FL_DOXYGEN
144 
145  // implementation of drawing methods
146  void color(Fl_Color c);
147  void color(uchar r, uchar g, uchar b);
148 
149  void push_clip(int x, int y, int w, int h);
150  int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
151  int not_clipped(int x, int y, int w, int h);
152  void push_no_clip();
153  void pop_clip();
154 
155  void line_style(int style, int width=0, char* dashes=0);
156 
157  void rect(int x, int y, int w, int h);
158  void rectf(int x, int y, int w, int h);
159 
160  void xyline(int x, int y, int x1);
161  void xyline(int x, int y, int x1, int y2);
162  void xyline(int x, int y, int x1, int y2, int x3);
163 
164  void yxline(int x, int y, int y1);
165  void yxline(int x, int y, int y1, int x2);
166  void yxline(int x, int y, int y1, int x2, int y3);
167 
168  void line(int x1, int y1, int x2, int y2);
169  void line(int x1, int y1, int x2, int y2, int x3, int y3);
170 
171  void loop(int x0, int y0, int x1, int y1, int x2, int y2);
172  void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
173  void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
174  void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
175  void point(int x, int y);
176 
177  void begin_points();
178  void begin_line();
179  void begin_loop();
181  void vertex(double x, double y);
182  void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3);
183  void circle(double x, double y, double r);
184  void arc(double x, double y, double r, double start, double a);
185  void arc(int x, int y, int w, int h, double a1, double a2);
186  void pie(int x, int y, int w, int h, double a1, double a2);
187  void end_points();
188  void end_line();
189  void end_loop();
190  void end_polygon();
192  void gap(){gap_=1;};
194  void transformed_vertex(double x, double y);
195 
196  void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0);
197  void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0);
198  void draw_image(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=3);
199  void draw_image_mono(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=1);
200 
201  void draw(const char* s, int nBytes, int x, int y) {transformed_draw(s,nBytes,x,y); };
202 #ifdef __APPLE__
203  void draw(const char* s, int nBytes, float x, float y) {transformed_draw(s,nBytes,x,y); };
204 #endif
205  void draw(int angle, const char *str, int n, int x, int y);
206  void rtl_draw(const char* s, int n, int x, int y);
207  void font(int face, int size);
208  double width(const char *, int);
209  double width(unsigned int u);
210  void text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h);
211  int height();
212  int descent();
213  void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
214  void draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy);
215  void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
216  int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
217  int clocale_printf(const char *format, ...);
219 };
220 
226 class FL_EXPORT Fl_PostScript_File_Device : public Fl_Paged_Device {
227 #ifdef __APPLE__
228  CGContextRef gc;
229 #endif
230 protected:
232 public:
233  static const char *class_id;
234  const char *class_name() {return class_id;};
237  int start_job(int pagecount, int* from, int* to);
238  int start_job(int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4,
240  int start_job(FILE *ps_output, int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4,
242  int start_page (void);
243  int printable_rect(int *w, int *h);
244  void margins(int *left, int *top, int *right, int *bottom);
245  void origin(int *x, int *y);
246  void origin(int x, int y);
247  void scale (float scale_x, float scale_y = 0.);
248  void rotate(float angle);
249  void translate(int x, int y);
250  void untranslate(void);
251  int end_page (void);
252  void end_job(void);
253 #ifdef __APPLE__
254  void set_current() { fl_gc = gc; Fl_Paged_Device::set_current(); }
255 #endif
256 
257  static const char *file_chooser_title;
258 };
259 
260 #endif // Fl_PostScript_H
261 
262 //
263 // End of "$Id$"
264 //
unsigned int Fl_Color
An FLTK color value; see also Colors
Definition: Enumerations.H:932
void(* Fl_Draw_Image_Cb)(void *data, int x, int y, int w, uchar *buf)
signature of image generation callback function.
Definition: Fl_Device.H:49
declaration of class Fl_Paged_Device.
The Fl_Bitmap class supports caching and drawing of mono-color (bitmap) images.
Definition: Fl_Bitmap.H:33
A virtual class subclassed for each graphics driver FLTK uses.
Definition: Fl_Device.H:110
virtual void begin_polygon()
see fl_begin_polygon().
Definition: fl_vertex.cxx:81
virtual void draw(const char *str, int n, int x, int y)
see fl_draw(const char *str, int n, int x, int y).
Definition: Fl_Device.H:251
virtual void end_polygon()
see fl_end_polygon().
Definition: fl_vertex.cxx:163
Base class for image caching and drawing.
Definition: Fl_Image.H:55
Represents page-structured drawing surfaces.
Definition: Fl_Paged_Device.H:38
Page_Layout
Possible page layouts.
Definition: Fl_Paged_Device.H:86
@ PORTRAIT
Portrait orientation.
Definition: Fl_Paged_Device.H:87
Page_Format
Possible page formats.
Definition: Fl_Paged_Device.H:50
@ A4
A4 format.
Definition: Fl_Paged_Device.H:55
The Fl_Pixmap class supports caching and drawing of colormap (pixmap) images, including transparency.
Definition: Fl_Pixmap.H:41
To send graphical output to a PostScript file.
Definition: Fl_PostScript.H:226
void translate(int x, int y)
Translates the current graphics origin accounting for the current rotation.
void untranslate(void)
Undoes the effect of a previous translate() call.
static const char * file_chooser_title
Label of the PostScript file chooser window.
Definition: Fl_PostScript.H:257
int end_page(void)
To be called at the end of each page.
void origin(int x, int y)
Sets the position in page coordinates of the origin of graphics functions.
void rotate(float angle)
Rotates the graphics operations relatively to paper.
void margins(int *left, int *top, int *right, int *bottom)
Computes the dimensions of margins that lie between the printable page area and the full page.
void scale(float scale_x, float scale_y=0.)
Changes the scaling of page coordinates.
void end_job(void)
To be called at the end of a print job.
int start_page(void)
Starts a new printed page.
void origin(int *x, int *y)
Computes the page coordinates of the current origin of graphics functions.
const char * class_name()
Returns the name of the class of this object.
Definition: Fl_PostScript.H:234
int printable_rect(int *w, int *h)
Computes the width and height of the printable area of the page.
PostScript graphical backend.
Definition: Fl_PostScript.H:61
void draw(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy)
Draws an Fl_RGB_Image object to the device.
void draw(Fl_Bitmap *bitmap, int XP, int YP, int WP, int HP, int cx, int cy)
Draws an Fl_Bitmap object to the device.
void begin_polygon()
see fl_begin_polygon().
int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H)
see fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H).
void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3).
void begin_complex_polygon()
see fl_begin_complex_polygon().
Definition: Fl_PostScript.H:191
void rect(int x, int y, int w, int h)
see fl_rect(int x, int y, int w, int h).
void color(uchar r, uchar g, uchar b)
see fl_color(uchar r, uchar g, uchar b).
void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3).
void arc(double x, double y, double r, double start, double a)
see fl_arc(double x, double y, double r, double start, double end).
void line_style(int style, int width=0, char *dashes=0)
see fl_line_style(int style, int width, char* dashes).
void begin_line()
see fl_begin_line().
void pie(int x, int y, int w, int h, double a1, double a2)
see fl_pie(int x, int y, int w, int h, double a1, double a2).
void begin_loop()
see fl_begin_loop().
void xyline(int x, int y, int x1, int y2, int x3)
see fl_xyline(int x, int y, int x1, int y2, int x3).
void pop_clip()
see fl_pop_clip().
void begin_points()
see fl_begin_points().
void gap()
see fl_gap().
Definition: Fl_PostScript.H:192
void end_points()
see fl_end_points().
void draw_image(Fl_Draw_Image_Cb call, void *data, int x, int y, int w, int h, int delta=3)
see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D).
void rtl_draw(const char *s, int n, int x, int y)
see fl_rtl_draw(const char *str, int n, int x, int y).
void transformed_vertex(double x, double y)
see fl_transformed_vertex(double xf, double yf).
void end_polygon()
see fl_end_polygon().
void xyline(int x, int y, int x1, int y2)
see fl_xyline(int x, int y, int x1, int y2).
void draw_image_mono(const uchar *d, int x, int y, int w, int h, int delta=1, int ld=0)
see fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L).
void xyline(int x, int y, int x1)
see fl_xyline(int x, int y, int x1).
double width(const char *, int)
see fl_width(const char *str, int n).
void polygon(int x0, int y0, int x1, int y1, int x2, int y2)
see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2).
void color(Fl_Color c)
see fl_color(Fl_Color c).
void loop(int x0, int y0, int x1, int y1, int x2, int y2)
see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2).
void circle(double x, double y, double r)
see fl_circle(double x, double y, double r).
void font(int face, int size)
see fl_font(Fl_Font face, Fl_Fontsize size).
void line(int x1, int y1, int x2, int y2)
see fl_line(int x, int y, int x1, int y1).
void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3)
see fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3,...
void rectf(int x, int y, int w, int h)
see fl_rectf(int x, int y, int w, int h).
void end_loop()
see fl_end_loop().
void draw(const char *s, int nBytes, int x, int y)
see fl_draw(const char *str, int n, int x, int y).
Definition: Fl_PostScript.H:201
void push_no_clip()
see fl_push_no_clip().
double width(unsigned int u)
see fl_width(unsigned int n).
void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy)
Draws an Fl_Pixmap object to the device.
void end_complex_polygon()
see fl_end_complex_polygon().
Definition: Fl_PostScript.H:193
void yxline(int x, int y, int y1, int x2, int y3)
see fl_yxline(int x, int y, int y1, int x2, int y3).
void arc(int x, int y, int w, int h, double a1, double a2)
see fl_arc(int x, int y, int w, int h, double a1, double a2).
void point(int x, int y)
see fl_point(int x, int y).
void yxline(int x, int y, int y1, int x2)
see fl_yxline(int x, int y, int y1, int x2).
const char * class_name()
Returns the name of the class of this object.
Definition: Fl_PostScript.H:72
void vertex(double x, double y)
see fl_vertex(double x, double y).
void yxline(int x, int y, int y1)
see fl_yxline(int x, int y, int y1).
void push_clip(int x, int y, int w, int h)
see fl_push_clip(int x, int y, int w, int h).
void line(int x1, int y1, int x2, int y2, int x3, int y3)
see fl_line(int x, int y, int x1, int y1, int x2, int y2).
void draw_image_mono(Fl_Draw_Image_Cb call, void *data, int x, int y, int w, int h, int delta=1)
see fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D).
void text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h)
see fl_text_extents(const char*, int n, int& dx, int& dy, int& w, int& h).
int not_clipped(int x, int y, int w, int h)
see fl_not_clipped(int x, int y, int w, int h).
int height()
see fl_height().
int descent()
see fl_descent().
void draw_image(const uchar *d, int x, int y, int w, int h, int delta=3, int ldelta=0)
see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L).
int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP)
Draws an Fl_Image scaled to width W & height H with top-left corner at X,Y.
void draw(int angle, const char *str, int n, int x, int y)
see fl_draw(int angle, const char *str, int n, int x, int y).
void end_line()
see fl_end_line().
The Fl_RGB_Image class supports caching and drawing of full-color images with 1 to 4 channels of colo...
Definition: Fl_Image.H:202
virtual void set_current(void)
Make this surface the current drawing surface.
Definition: Fl_Device.cxx:44
utility header to pull drawing functions together
unsigned char uchar
unsigned char
Definition: fl_types.h:30