00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00032 #ifndef Fl_Paged_Device_H
00033 #define Fl_Paged_Device_H
00034
00035 #include <FL/Fl_Device.H>
00036
00038 #define NO_PAGE_FORMATS 30
00039
00046 class Fl_Paged_Device : public Fl_Surface_Device {
00047 public:
00053 enum Page_Format {
00054 A0 = 0,
00055 A1,
00056 A2,
00057 A3,
00058 A4,
00059 A5,
00060 A6,
00061 A7,
00062 A8,
00063 A9,
00064 B0,
00065 B1,
00066 B2,
00067 B3,
00068 B4,
00069 B5,
00070 B6,
00071 B7,
00072 B8,
00073 B9,
00074 B10,
00075 C5E,
00076 DLE,
00077 EXECUTIVE,
00078 FOLIO,
00079 LEDGER,
00080 LEGAL,
00081 LETTER,
00082 TABLOID,
00083 ENVELOPE,
00084 MEDIA = 0x1000
00085 };
00089 enum Page_Layout {
00090 PORTRAIT = 0,
00091 LANDSCAPE = 0x100,
00092 REVERSED = 0x200,
00093 ORIENTATION = 0x300
00094 };
00095
00098 typedef struct {
00100 int width;
00102 int height;
00104 const char *name;
00105 } page_format;
00108 static const page_format page_formats[NO_PAGE_FORMATS];
00109
00110 private:
00111 #ifdef __APPLE__
00112 struct chain_elt {
00113 Fl_Image *image;
00114 const uchar *data;
00115 struct chain_elt *next;
00116 };
00117 void add_image(Fl_Image *image, const uchar *data);
00118 #endif
00119 void traverse(Fl_Widget *widget);
00120 protected:
00122 int x_offset;
00124 int y_offset;
00126 struct chain_elt *image_list_;
00127 #ifdef __APPLE__
00128
00129 void delete_image_list();
00130 #endif
00131
00132 Fl_Paged_Device() : Fl_Surface_Device(NULL) {type_ = device_type;};
00134 virtual ~Fl_Paged_Device() {};
00135 public:
00136 static const char *device_type;
00137 virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
00138 virtual int start_page(void);
00139 virtual int printable_rect(int *w, int *h);
00140 virtual void margins(int *left, int *top, int *right, int *bottom);
00141 virtual void origin(int x, int y);
00142 void origin(int *x, int *y);
00143 virtual void scale(float scale_x, float scale_y);
00144 virtual void rotate(float angle);
00145 virtual void translate(int x, int y);
00146 virtual void untranslate(void);
00147 void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
00148 void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
00149 virtual int end_page (void);
00150 virtual void end_job (void);
00151 };
00152
00153 #endif // Fl_Paged_Device_H
00154
00155
00156
00157
00158