1 //
2 // "$Id$"
3 //
4 // Encompasses platform-specific printing-support code and
5 // PostScript output code for the Fast Light Tool Kit (FLTK).
6 //
7 // Copyright 2010 by Bill Spitzak and others.
8 //
9 // This library is free software. Distribution and use rights are outlined in
10 // the file "COPYING" which should have been included with this file. If this
11 // file is missing or damaged, see the license at:
12 //
13 // http://www.fltk.org/COPYING.php
14 //
15 // Please report all bugs and problems to:
16 //
17 // http://www.fltk.org/str.php
18 //
19
20 #include <FL/Fl_Printer.H>
21
22 #if defined(WIN32)
23 #include "Fl_GDI_Printer.cxx"
24 #endif
25
26 // print dialog customization strings
27 /** [this text may be customized at run-time] */
28 const char *Fl_Printer::dialog_title = "Print";
29 /** [this text may be customized at run-time] */
30 const char *Fl_Printer::dialog_printer = "Printer:";
31 /** [this text may be customized at run-time] */
32 const char *Fl_Printer::dialog_range = "Print Range";
33 /** [this text may be customized at run-time] */
34 const char *Fl_Printer::dialog_copies = "Copies";
35 /** [this text may be customized at run-time] */
36 const char *Fl_Printer::dialog_all = "All";
37 /** [this text may be customized at run-time] */
38 const char *Fl_Printer::dialog_pages = "Pages";
39 /** [this text may be customized at run-time] */
40 const char *Fl_Printer::dialog_from = "From:";
41 /** [this text may be customized at run-time] */
42 const char *Fl_Printer::dialog_to = "To:";
43 /** [this text may be customized at run-time] */
44 const char *Fl_Printer::dialog_properties = "Properties...";
45 /** [this text may be customized at run-time] */
46 const char *Fl_Printer::dialog_copyNo = "# Copies:";
47 /** [this text may be customized at run-time] */
48 const char *Fl_Printer::dialog_print_button = "Print";
49 /** [this text may be customized at run-time] */
50 const char *Fl_Printer::dialog_cancel_button = "Cancel";
51 /** [this text may be customized at run-time] */
52 const char *Fl_Printer::dialog_print_to_file = "Print To File";
53 /** [this text may be customized at run-time] */
54 const char *Fl_Printer::property_title = "Printer Properties";
55 /** [this text may be customized at run-time] */
56 const char *Fl_Printer::property_pagesize = "Page Size:";
57 /** [this text may be customized at run-time] */
58 const char *Fl_Printer::property_mode = "Output Mode:";
59 /** [this text may be customized at run-time] */
60 const char *Fl_Printer::property_use = "Use";
61 /** [this text may be customized at run-time] */
62 const char *Fl_Printer::property_save = "Save";
63 /** [this text may be customized at run-time] */
64 const char *Fl_Printer::property_cancel = "Cancel";
65
66 const char *Fl_Printer::class_id = "Fl_Printer";
67 #if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
68 const char *Fl_System_Printer::class_id = Fl_Printer::class_id;
69 #endif
70 #if !( defined(__APPLE__) || defined(WIN32) )
71 const char *Fl_PostScript_Printer::class_id = Fl_Printer::class_id;
72 #endif
73
74 #if defined(__APPLE__) || defined(WIN32)
set_current(void)75 void Fl_System_Printer::set_current(void)
76 {
77 #ifdef __APPLE__
78 fl_gc = (CGContextRef)gc;
79 #elif defined(WIN32)
80 fl_gc = (HDC)gc;
81 #endif
82 this->Fl_Surface_Device::set_current();
83 }
84
origin(int * x,int * y)85 void Fl_System_Printer::origin(int *x, int *y)
86 {
87 Fl_Paged_Device::origin(x, y);
88 }
89
90 #endif
91
Fl_Printer(void)92 Fl_Printer::Fl_Printer(void) {
93 #if defined(WIN32) || defined(__APPLE__)
94 printer = new Fl_System_Printer();
95 #else
96 printer = new Fl_PostScript_Printer();
97 #endif
98 Fl_Surface_Device::driver(printer->driver());
99 }
100
101 /**
102 Starts a print job.
103 Opens a platform-specific dialog window allowing the user to set several options including
104 the desired printer and the page orientation. Optionally, the user can also select a range of pages to be
105 printed. This range is returned to the caller that is in charge of sending only these pages
106 for printing.
107
108 @param[in] pagecount the total number of pages of the job (or 0 if you don't know the number of pages)
109 @param[out] frompage if non-null, *frompage is set to the first page the user wants printed
110 @param[out] topage if non-null, *topage is set to the last page the user wants printed
111 @return 0 if OK, non-zero if any error occurred or if the user cancelled the print request.
112 */
start_job(int pagecount,int * frompage,int * topage)113 int Fl_Printer::start_job(int pagecount, int *frompage, int *topage)
114 {
115 return printer->start_job(pagecount, frompage, topage);
116 }
117
start_page(void)118 int Fl_Printer::start_page(void)
119 {
120 return printer->start_page();
121 }
122
printable_rect(int * w,int * h)123 int Fl_Printer::printable_rect(int *w, int *h)
124 {
125 return printer->printable_rect(w, h);
126 }
127
margins(int * left,int * top,int * right,int * bottom)128 void Fl_Printer::margins(int *left, int *top, int *right, int *bottom)
129 {
130 printer->margins(left, top, right, bottom);
131 }
132
origin(int * x,int * y)133 void Fl_Printer::origin(int *x, int *y)
134 {
135 printer->origin(x, y);
136 }
137
origin(int x,int y)138 void Fl_Printer::origin(int x, int y)
139 {
140 printer->origin(x, y);
141 }
142
scale(float scale_x,float scale_y)143 void Fl_Printer::scale(float scale_x, float scale_y)
144 {
145 printer->scale(scale_x, scale_y);
146 }
147
rotate(float angle)148 void Fl_Printer::rotate(float angle)
149 {
150 printer->rotate(angle);
151 }
152
translate(int x,int y)153 void Fl_Printer::translate(int x, int y)
154 {
155 printer->translate(x, y);
156 }
157
untranslate(void)158 void Fl_Printer::untranslate(void)
159 {
160 printer->untranslate();
161 }
162
end_page(void)163 int Fl_Printer::end_page (void)
164 {
165 return printer->end_page();
166 }
167
end_job(void)168 void Fl_Printer::end_job (void)
169 {
170 printer->end_job();
171 }
172
print_widget(Fl_Widget * widget,int delta_x,int delta_y)173 void Fl_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_y)
174 {
175 printer->print_widget(widget, delta_x, delta_y);
176 }
177
print_window_part(Fl_Window * win,int x,int y,int w,int h,int delta_x,int delta_y)178 void Fl_Printer::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
179 {
180 printer->print_window_part(win, x, y, w, h, delta_x, delta_y);
181 }
182
set_current(void)183 void Fl_Printer::set_current(void)
184 {
185 printer->set_current();
186 }
187
driver(void)188 Fl_Graphics_Driver* Fl_Printer::driver(void)
189 {
190 return printer->driver();
191 }
192
~Fl_Printer(void)193 Fl_Printer::~Fl_Printer(void)
194 {
195 delete printer;
196 }
197
198
199 //
200 // End of "$Id$".
201 //
202