]>
Commit | Line | Data |
---|---|---|
72e7876b SC |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: dcprint.cpp | |
3 | // Purpose: wxPrinterDC class | |
4 | // Author: Julian Smart | |
5 | // Modified by: | |
6 | // Created: 01/02/97 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Julian Smart and Markus Holzem | |
9 | // Licence: wxWindows licence | |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | #ifdef __GNUG__ | |
13 | #pragma implementation "dcprint.h" | |
14 | #endif | |
15 | ||
16 | // For compilers that support precompilation, includes "wx.h". | |
17 | #include "wx/wxprec.h" | |
18 | ||
19 | #ifdef __BORLANDC__ | |
20 | #pragma hdrstop | |
21 | #endif | |
22 | ||
23 | #ifndef WX_PRECOMP | |
24 | #endif | |
25 | ||
26 | #include "wx/dcprint.h" | |
03e11df5 GD |
27 | #include "wx/msgdlg.h" |
28 | #include <math.h> | |
2f1ae414 | 29 | #include "wx/mac/uma.h" |
66a09d47 SC |
30 | #ifndef __DARWIN__ |
31 | #include "Printing.h" | |
32 | #endif | |
72e7876b | 33 | |
a3d3d3bf GD |
34 | #if defined(TARGET_CARBON) && !defined(__DARWIN__) |
35 | # if PM_USE_SESSION_APIS | |
36 | # include <PMCore.h> | |
37 | # endif | |
38 | # include <PMApplication.h> | |
39 | #endif | |
40 | ||
2f1ae414 | 41 | #if !USE_SHARED_LIBRARY |
72e7876b | 42 | IMPLEMENT_CLASS(wxPrinterDC, wxDC) |
2f1ae414 | 43 | #endif |
72e7876b SC |
44 | |
45 | GrafPtr macPrintFormerPort = NULL ; | |
46 | ||
47 | wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) | |
48 | { | |
5b781a67 | 49 | OSStatus err ; |
72e7876b SC |
50 | wxString message ; |
51 | ||
52 | m_printData = printdata ; | |
53 | m_printData.ConvertToNative() ; | |
a689a4d0 | 54 | |
f520d381 | 55 | #if TARGET_CARBON && PM_USE_SESSION_APIS |
a3d3d3bf | 56 | err = UMAPrOpen(&m_macPrintSessionPort) ; |
1d78308f | 57 | if ( err != noErr || m_macPrintSessionPort == kPMNoData ) |
87df17a1 | 58 | #else |
a3d3d3bf | 59 | err = UMAPrOpen(NULL) ; |
f520d381 | 60 | if ( err != noErr ) |
a689a4d0 | 61 | #endif |
72e7876b | 62 | { |
595f3eef | 63 | message.Printf( "Print Error %ld", err ) ; |
72e7876b | 64 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 GD |
65 | dialog.ShowModal(); |
66 | #if TARGET_CARBON && PM_USE_SESSION_APIS | |
a3d3d3bf | 67 | UMAPrClose(&m_macPrintSessionPort) ; |
87df17a1 | 68 | #else |
a3d3d3bf | 69 | UMAPrClose(NULL) ; |
a689a4d0 | 70 | #endif |
f520d381 GD |
71 | m_ok = FALSE; |
72 | return; | |
72e7876b SC |
73 | } |
74 | ||
5b781a67 | 75 | #if !TARGET_CARBON |
1d78308f | 76 | if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) ) |
72e7876b | 77 | { |
1d78308f | 78 | ::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ; |
72e7876b SC |
79 | // the driver has changed in the mean time, should we pop up a page setup dialog ? |
80 | } | |
81 | err = PrError() ; | |
f520d381 | 82 | if ( err != noErr ) |
72e7876b | 83 | { |
595f3eef | 84 | message.Printf( "Print Error %ld", err ) ; |
72e7876b | 85 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 86 | dialog.ShowModal(); |
a3d3d3bf | 87 | UMAPrClose(NULL) ; |
f520d381 GD |
88 | m_ok = FALSE; |
89 | return; | |
72e7876b SC |
90 | } |
91 | ::GetPort( &macPrintFormerPort ) ; | |
1d78308f | 92 | m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ; |
2f1ae414 SC |
93 | err = PrError() ; |
94 | if ( err ) | |
95 | { | |
595f3eef | 96 | message.Printf( "Print Error %ld", err ) ; |
2f1ae414 | 97 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 98 | dialog.ShowModal(); |
a3d3d3bf | 99 | UMAPrClose(NULL) ; |
f520d381 GD |
100 | m_ok = FALSE; |
101 | return; | |
2f1ae414 | 102 | } |
72e7876b | 103 | // sets current port |
1d78308f | 104 | m_macPort = (GrafPtr ) m_macPrintSessionPort ; |
5b781a67 | 105 | #else |
a689a4d0 | 106 | #if PM_USE_SESSION_APIS |
1d78308f | 107 | err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort, |
962cbf2e GD |
108 | (PMPrintSettings)m_printData.m_macPrintSettings, |
109 | (PMPageFormat)m_printData.m_macPageFormat); | |
f520d381 | 110 | if ( err != noErr ) |
a689a4d0 | 111 | #else |
1d78308f | 112 | m_macPrintSessionPort = kPMNoReference ; |
5b781a67 | 113 | err = PMBeginDocument( |
f520d381 GD |
114 | m_printData.m_macPrintSettings, |
115 | m_printData.m_macPageFormat, | |
1d78308f GD |
116 | &m_macPrintSessionPort); |
117 | if ( err != noErr || m_macPrintSessionPort == kPMNoReference ) | |
f520d381 | 118 | #endif |
5b781a67 | 119 | { |
595f3eef | 120 | message.Printf( "Print Error %ld", err ) ; |
5b781a67 | 121 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 GD |
122 | dialog.ShowModal(); |
123 | #if TARGET_CARBON && PM_USE_SESSION_APIS | |
a3d3d3bf | 124 | UMAPrClose(&m_macPrintSessionPort) ; |
87df17a1 | 125 | #else |
a3d3d3bf | 126 | UMAPrClose(NULL) ; |
87df17a1 | 127 | #endif |
f520d381 GD |
128 | m_ok = FALSE; |
129 | return; | |
5b781a67 SC |
130 | } |
131 | // sets current port | |
962cbf2e | 132 | ::GetPort( (GrafPtr *)&m_macPort ) ; |
5b781a67 | 133 | #endif |
72e7876b SC |
134 | m_ok = TRUE ; |
135 | m_minY = m_minX = 0 ; | |
5b781a67 | 136 | #if TARGET_CARBON |
f520d381 GD |
137 | PMRect rPaper; |
138 | ||
962cbf2e | 139 | err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); |
f520d381 GD |
140 | if ( err != noErr ) |
141 | { | |
595f3eef | 142 | message.Printf( "Print Error %ld", err ) ; |
f520d381 GD |
143 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
144 | dialog.ShowModal(); | |
145 | #if TARGET_CARBON && PM_USE_SESSION_APIS | |
a3d3d3bf | 146 | UMAPrClose(&m_macPrintSessionPort) ; |
f520d381 | 147 | #else |
a3d3d3bf | 148 | UMAPrClose(NULL) ; |
f520d381 GD |
149 | #endif |
150 | m_ok = FALSE; | |
151 | return; | |
152 | } | |
3340066a SC |
153 | m_maxX = wxCoord(rPaper.right - rPaper.left) ; |
154 | m_maxY = wxCoord(rPaper.bottom - rPaper.top); | |
5b781a67 | 155 | #else |
1d78308f GD |
156 | m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ; |
157 | m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ; | |
2f1ae414 | 158 | #endif |
72e7876b SC |
159 | } |
160 | ||
161 | wxPrinterDC::~wxPrinterDC(void) | |
162 | { | |
5b781a67 SC |
163 | OSStatus err ; |
164 | wxString message ; | |
2f1ae414 | 165 | #if !TARGET_CARBON |
72e7876b SC |
166 | if ( m_ok ) |
167 | { | |
1d78308f | 168 | ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; |
72e7876b SC |
169 | err = PrError() ; |
170 | ||
f520d381 | 171 | if ( err == noErr ) |
72e7876b | 172 | { |
1d78308f | 173 | if ( (**(THPrint)m_printData.m_macPrintSettings).prJob.bJDocLoop == bSpoolLoop ) |
72e7876b SC |
174 | { |
175 | TPrStatus status ; | |
1d78308f | 176 | ::PrPicFile( (THPrint) m_printData.m_macPrintSettings , NULL , NULL , NULL , &status ) ; |
72e7876b SC |
177 | } |
178 | } | |
179 | else | |
180 | { | |
595f3eef | 181 | message.Printf( "Print Error %ld", err ) ; |
72e7876b | 182 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 183 | dialog.ShowModal(); |
72e7876b | 184 | } |
a3d3d3bf | 185 | ::UMAPrClose(NULL) ; |
2f1ae414 SC |
186 | // ::SetPort( macPrintFormerPort ) ; |
187 | ::SetPort( LMGetWMgrPort() ) ; | |
72e7876b | 188 | } |
2f1ae414 | 189 | #else |
5b781a67 SC |
190 | if ( m_ok ) |
191 | { | |
a689a4d0 | 192 | #if PM_USE_SESSION_APIS |
1d78308f | 193 | err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); |
a689a4d0 | 194 | #else |
1d78308f | 195 | err = PMEndDocument(m_macPrintSessionPort); |
a689a4d0 | 196 | #endif |
f520d381 | 197 | if ( err != noErr ) |
5b781a67 | 198 | { |
595f3eef | 199 | message.Printf( "Print Error %ld", err ) ; |
5b781a67 | 200 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 201 | dialog.ShowModal(); |
5b781a67 | 202 | } |
f520d381 | 203 | #if TARGET_CARBON && PM_USE_SESSION_APIS |
a3d3d3bf | 204 | UMAPrClose(&m_macPrintSessionPort) ; |
a689a4d0 | 205 | #else |
a3d3d3bf | 206 | UMAPrClose(NULL) ; |
a689a4d0 | 207 | #endif |
5b781a67 | 208 | } |
2f1ae414 | 209 | #endif |
72e7876b SC |
210 | } |
211 | ||
212 | bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) | |
213 | { | |
214 | return m_ok ; | |
215 | } | |
216 | ||
217 | void wxPrinterDC::EndDoc(void) | |
218 | { | |
219 | } | |
220 | ||
221 | void wxPrinterDC::StartPage(void) | |
222 | { | |
223 | if ( !m_ok ) | |
224 | return ; | |
2f1ae414 SC |
225 | |
226 | m_logicalFunction = wxCOPY; | |
227 | // m_textAlignment = wxALIGN_TOP_LEFT; | |
228 | m_backgroundMode = wxTRANSPARENT; | |
229 | ||
230 | m_textForegroundColour = *wxBLACK; | |
231 | m_textBackgroundColour = *wxWHITE; | |
232 | m_pen = *wxBLACK_PEN; | |
233 | m_font = *wxNORMAL_FONT; | |
234 | m_brush = *wxTRANSPARENT_BRUSH; | |
235 | m_backgroundBrush = *wxWHITE_BRUSH; | |
236 | ||
237 | m_macFontInstalled = false ; | |
238 | m_macBrushInstalled = false ; | |
239 | m_macPenInstalled = false ; | |
240 | ||
72e7876b | 241 | |
5b781a67 | 242 | OSStatus err ; |
72e7876b SC |
243 | wxString message ; |
244 | ||
5b781a67 | 245 | #if !TARGET_CARBON |
1d78308f GD |
246 | PrOpenPage( (TPPrPort) m_macPrintSessionPort , NULL ) ; |
247 | m_macLocalOrigin.x = (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ; | |
248 | m_macLocalOrigin.y = (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ; | |
5b781a67 | 249 | |
72e7876b SC |
250 | Rect clip = { -32000 , -32000 , 32000 , 32000 } ; |
251 | ::ClipRect( &clip ) ; | |
252 | err = PrError() ; | |
f520d381 | 253 | if ( err != noErr ) |
72e7876b | 254 | { |
595f3eef | 255 | message.Printf( "Print Error %ld", err ) ; |
72e7876b | 256 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 257 | dialog.ShowModal(); |
1d78308f GD |
258 | ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ; |
259 | ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; | |
a3d3d3bf | 260 | ::UMAPrClose(NULL) ; |
72e7876b SC |
261 | ::SetPort( macPrintFormerPort ) ; |
262 | m_ok = FALSE ; | |
263 | } | |
2f1ae414 | 264 | #else |
a689a4d0 | 265 | #if PM_USE_SESSION_APIS |
1d78308f | 266 | err = PMSessionBeginPage((PMPrintSession)m_macPrintSessionPort, |
962cbf2e | 267 | (PMPageFormat)m_printData.m_macPageFormat, |
a689a4d0 GD |
268 | nil); |
269 | #else | |
1d78308f | 270 | err = PMBeginPage(m_macPrintSessionPort, nil); |
a689a4d0 | 271 | #endif |
f520d381 | 272 | if ( err != noErr ) |
5b781a67 | 273 | { |
595f3eef | 274 | message.Printf( "Print Error %ld", err ) ; |
5b781a67 | 275 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 276 | dialog.ShowModal(); |
a689a4d0 | 277 | #if PM_USE_SESSION_APIS |
1d78308f GD |
278 | PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); |
279 | PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); | |
a3d3d3bf | 280 | UMAPrClose(&m_macPrintSessionPort) ; |
a689a4d0 | 281 | #else |
1d78308f GD |
282 | PMEndPage(m_macPrintSessionPort); |
283 | PMEndDocument(m_macPrintSessionPort); | |
a3d3d3bf | 284 | UMAPrClose(NULL) ; |
a689a4d0 | 285 | #endif |
5b781a67 SC |
286 | ::SetPort( macPrintFormerPort ) ; |
287 | m_ok = FALSE ; | |
288 | } | |
2f1ae414 | 289 | #endif |
72e7876b SC |
290 | } |
291 | ||
292 | void wxPrinterDC::EndPage(void) | |
293 | { | |
294 | if ( !m_ok ) | |
295 | return ; | |
296 | ||
5b781a67 | 297 | OSStatus err ; |
72e7876b SC |
298 | wxString message ; |
299 | ||
5b781a67 | 300 | #if !TARGET_CARBON |
76a5e5d2 | 301 | PrClosePage( (TPPrPort) m_macPort ) ; |
72e7876b | 302 | err = PrError() ; |
f520d381 | 303 | if ( err != noErr ) |
72e7876b | 304 | { |
595f3eef | 305 | message.Printf( "Print Error %ld", err ) ; |
72e7876b | 306 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 307 | dialog.ShowModal(); |
1d78308f | 308 | ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; |
a3d3d3bf | 309 | ::UMAPrClose(NULL) ; |
72e7876b SC |
310 | ::SetPort( macPrintFormerPort ) ; |
311 | m_ok = FALSE ; | |
312 | } | |
2f1ae414 | 313 | #else |
a689a4d0 | 314 | #if PM_USE_SESSION_APIS |
1d78308f | 315 | err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); |
a689a4d0 | 316 | #else |
1d78308f | 317 | err = PMEndPage(m_macPrintSessionPort); |
a689a4d0 | 318 | #endif |
f520d381 | 319 | if ( err != noErr ) |
5b781a67 | 320 | { |
595f3eef | 321 | message.Printf( "Print Error %ld", err ) ; |
5b781a67 | 322 | wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; |
f520d381 | 323 | dialog.ShowModal(); |
a689a4d0 | 324 | #if PM_USE_SESSION_APIS |
1d78308f | 325 | PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); |
a3d3d3bf | 326 | UMAPrClose(&m_macPrintSessionPort) ; |
a689a4d0 | 327 | #else |
1d78308f | 328 | PMEndDocument(m_macPrintSessionPort); |
a3d3d3bf | 329 | UMAPrClose(NULL) ; |
a689a4d0 | 330 | #endif |
5b781a67 SC |
331 | ::SetPort( macPrintFormerPort ) ; |
332 | m_ok = FALSE ; | |
333 | } | |
2f1ae414 SC |
334 | #endif |
335 | ||
72e7876b | 336 | } |