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