1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxPrinterDC class
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "dcprint.h"
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
26 #include "wx/dcprint.h"
27 #include "wx/msgdlg.h"
29 #include "wx/mac/uma.h"
31 #if !USE_SHARED_LIBRARY
32 IMPLEMENT_CLASS(wxPrinterDC
, wxDC
)
35 GrafPtr macPrintFormerPort
= NULL
;
37 wxPrinterDC::wxPrinterDC(const wxPrintData
& printdata
)
42 m_printData
= printdata
;
43 m_printData
.ConvertToNative() ;
48 err
= UMAPrOpen(&m_macPrintPort
) ;
52 message
.Printf( "Print Error %d", err
) ;
53 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
57 UMAPrClose(&m_macPrintPort
) ;
62 if ( ::PrValidate( m_printData
.m_macPrintInfo
) )
64 ::PrStlDialog( m_printData
.m_macPrintInfo
) ;
65 // the driver has changed in the mean time, should we pop up a page setup dialog ?
70 message
.Printf( "Print Error %d", err
) ;
71 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
74 ::GetPort( &macPrintFormerPort
) ;
75 m_macPrintPort
= ::PrOpenDoc( m_printData
.m_macPrintInfo
, NULL
, NULL
) ;
79 message
.Printf( "Print Error %d", err
) ;
80 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
84 m_macPort
= (GrafPtr
) m_macPrintPort
;
86 m_macPrintPort
= kPMNoReference
;
87 #if PM_USE_SESSION_APIS
88 err
= PMSessionBeginDocument(
90 m_printData
.m_macPrintSettings
,
91 m_printData
.m_macPageFormat
);
93 err
= PMBeginDocument(
94 m_printData
.m_macPrintSettings
,
95 m_printData
.m_macPageFormat
,
98 if ( err
!= noErr
|| m_macPrintPort
== kPMNoReference
)
100 message
.Printf( "Print Error %d", err
) ;
101 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
102 UMAPrClose(&m_macPrintPort
) ;
105 ::GetPort( &m_macPort
) ;
108 m_minY
= m_minX
= 0 ;
111 m_maxX
= (**m_printData
.m_macPrintInfo
).rPaper
.right
- (**m_printData
.m_macPrintInfo
).rPaper
.left
;
112 m_maxY
= (**m_printData
.m_macPrintInfo
).rPaper
.bottom
- (**m_printData
.m_macPrintInfo
).rPaper
.top
;
116 wxPrinterDC::~wxPrinterDC(void)
123 ::PrCloseDoc( m_macPrintPort
) ;
128 if ( (**m_printData
.m_macPrintInfo
).prJob
.bJDocLoop
== bSpoolLoop
)
131 ::PrPicFile( m_printData
.m_macPrintInfo
, NULL
, NULL
, NULL
, &status
) ;
136 message
.Printf( "Print Error %d", err
) ;
137 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
141 // ::SetPort( macPrintFormerPort ) ;
142 ::SetPort( LMGetWMgrPort() ) ;
147 #if PM_USE_SESSION_APIS
148 err
= PMSessionEndDocument(m_macPrintPort
);
150 err
= PMEndDocument(m_macPrintPort
);
154 message
.Printf( "Print Error %d", err
) ;
155 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
159 UMAPrClose(&m_macPrintPort
) ;
165 UMAPrClose(&m_macPrintPort
) ;
171 bool wxPrinterDC::StartDoc( const wxString
& WXUNUSED(message
) )
176 void wxPrinterDC::EndDoc(void)
180 void wxPrinterDC::StartPage(void)
185 m_logicalFunction
= wxCOPY
;
186 // m_textAlignment = wxALIGN_TOP_LEFT;
187 m_backgroundMode
= wxTRANSPARENT
;
189 m_textForegroundColour
= *wxBLACK
;
190 m_textBackgroundColour
= *wxWHITE
;
191 m_pen
= *wxBLACK_PEN
;
192 m_font
= *wxNORMAL_FONT
;
193 m_brush
= *wxTRANSPARENT_BRUSH
;
194 m_backgroundBrush
= *wxWHITE_BRUSH
;
196 m_macFontInstalled
= false ;
197 m_macBrushInstalled
= false ;
198 m_macPenInstalled
= false ;
205 PrOpenPage( m_macPrintPort
, NULL
) ;
206 m_macLocalOrigin
.h
= (**m_printData
.m_macPrintInfo
).rPaper
.left
;
207 m_macLocalOrigin
.v
= (**m_printData
.m_macPrintInfo
).rPaper
.top
;
209 SetOrigin( - m_macLocalOrigin
.h
, - m_macLocalOrigin
.v
) ;
210 Rect clip
= { -32000 , -32000 , 32000 , 32000 } ;
211 ::ClipRect( &clip
) ;
215 message
.Printf( "Print Error %d", err
) ;
216 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
217 ::PrClosePage( m_macPrintPort
) ;
218 ::PrCloseDoc( m_macPrintPort
) ;
220 ::SetPort( macPrintFormerPort
) ;
224 #if PM_USE_SESSION_APIS
225 err
= PMSessionBeginPage(m_macPrintPort
,
226 m_printData
.m_macPageFormat
,
229 err
= PMBeginPage(m_macPrintPort
, nil
);
233 message
.Printf( "Print Error %d", err
) ;
234 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
235 #if PM_USE_SESSION_APIS
236 PMSessionEndPage(m_macPrintPort
);
237 PMSessionEndDocument(m_macPrintPort
);
239 PMEndPage(m_macPrintPort
);
240 PMEndDocument(m_macPrintPort
);
242 UMAPrClose(&m_macPrintPort
) ;
243 ::SetPort( macPrintFormerPort
) ;
249 void wxPrinterDC::EndPage(void)
258 PrClosePage( (TPrPort
*) m_macPort
) ;
262 message
.Printf( "Print Error %d", err
) ;
263 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
264 ::PrCloseDoc( m_macPrintPort
) ;
266 ::SetPort( macPrintFormerPort
) ;
270 #if PM_USE_SESSION_APIS
271 err
= PMSessionEndPage(m_macPrintPort
);
273 err
= PMEndPage(m_macPrintPort
);
277 message
.Printf( "Print Error %d", err
) ;
278 wxMessageDialog
dialog( NULL
, message
, "", wxICON_HAND
| wxOK
) ;
279 #if PM_USE_SESSION_APIS
280 PMSessionEndDocument(m_macPrintPort
);
282 PMEndDocument(m_macPrintPort
);
284 UMAPrClose(&m_macPrintPort
) ;
285 ::SetPort( macPrintFormerPort
) ;