X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..c2ef70ec8aae8e28bfc82d59c0519d06234dd4ec:/src/mac/carbon/dcprint.cpp?ds=sidebyside

diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp
index 257c74206b..274c90957a 100644
--- a/src/mac/carbon/dcprint.cpp
+++ b/src/mac/carbon/dcprint.cpp
@@ -24,10 +24,10 @@
 #endif
 
 #include "wx/dcprint.h"
-#include "math.h"
+#include "wx/msgdlg.h"
+#include <math.h>
 #include "wx/mac/uma.h"
 
-
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_CLASS(wxPrinterDC, wxDC)
 #endif
@@ -36,33 +36,47 @@ GrafPtr macPrintFormerPort = NULL ;
 
 wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 {
-#if !TARGET_CARBON
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 	
 	m_printData = printdata ;
 	m_printData.ConvertToNative() ;
-	
-	::UMAPrOpen() ;
-	err = PrError() ;
-	if ( err )
+
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+	err = UMAPrOpen(&m_macPrintSession) ;
+	if ( err != noErr || m_macPrintSession == kPMNoData )
+#else
+	err = UMAPrOpen() ;
+	if ( err != noErr )
+#endif
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+		UMAPrClose(&m_macPrintSession) ;
+#else
 		UMAPrClose() ;
+#endif
+		m_ok = FALSE;
+		return;
 	}
 	
+#if !TARGET_CARBON
 	if ( ::PrValidate( m_printData.m_macPrintInfo ) )
 	{
 		::PrStlDialog( m_printData.m_macPrintInfo ) ;
 		// the driver has changed in the mean time, should we pop up a page setup dialog ?
 	}
 	err = PrError() ;
-	if ( err )
+	if ( err != noErr )
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
 		UMAPrClose() ;
+		m_ok = FALSE;
+		return;
 	}
 	::GetPort( &macPrintFormerPort ) ;
 	m_macPrintPort = ::PrOpenDoc( m_printData.m_macPrintInfo , NULL , NULL ) ;
@@ -71,31 +85,80 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
 		UMAPrClose() ;
+		m_ok = FALSE;
+		return;
 	}
 	// sets current port
 	m_macPort = (GrafPtr ) m_macPrintPort ;
+#else
+  #if PM_USE_SESSION_APIS
+    err = PMSessionBeginDocument(m_macPrintSession,
+              m_printData.m_macPrintSettings, 
+    	      m_printData.m_macPageFormat);
+    if ( err != noErr )
+  #else
+	m_macPrintPort = kPMNoReference ;
+    err = PMBeginDocument(
+    	      m_printData.m_macPrintSettings, 
+    	      m_printData.m_macPageFormat, 
+    	      &m_macPrintPort);
+    if ( err != noErr || m_macPrintPort == kPMNoReference )
+  #endif
+    {
+		message.Printf( "Print Error %d", err ) ;
+		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+  #if TARGET_CARBON && PM_USE_SESSION_APIS
+		UMAPrClose(&m_macPrintSession) ;
+  #else
+		UMAPrClose() ;
+  #endif
+		m_ok = FALSE;
+		return;
+    }
+	// sets current port
+	::GetPort( &m_macPort ) ;
+#endif
 	m_ok = TRUE ;
 	m_minY = m_minX = 0 ;
+#if TARGET_CARBON
+	PMRect rPaper;
+	
+	err = PMGetAdjustedPaperRect(m_printData.m_macPageFormat, &rPaper);
+    if ( err != noErr )
+    {
+		message.Printf( "Print Error %d", err ) ;
+		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+  #if TARGET_CARBON && PM_USE_SESSION_APIS
+		UMAPrClose(&m_macPrintSession) ;
+  #else
+		UMAPrClose() ;
+  #endif
+		m_ok = FALSE;
+		return;
+    }
+	m_maxX = rPaper.right - rPaper.left ;
+	m_maxY = rPaper.bottom - rPaper.top ;
+#else
 	m_maxX = (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ;
 	m_maxY = (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ;
-#else
-#pragma warning "TODO:printing support for carbon"
 #endif
 }
 
 wxPrinterDC::~wxPrinterDC(void)
 {
+	OSStatus err ;
+	wxString message ;
 #if !TARGET_CARBON
 	if ( m_ok )
 	{
-		OSErr err ;
-		wxString message ;
-	
 		::PrCloseDoc( m_macPrintPort  ) ;
 		err = PrError() ;
 		
-		if ( !err )
+		if ( err == noErr )
 		{
 			if ( (**m_printData.m_macPrintInfo).prJob.bJDocLoop == bSpoolLoop )
 			{
@@ -107,15 +170,32 @@ wxPrinterDC::~wxPrinterDC(void)
 		{
 			message.Printf( "Print Error %d", err ) ;
 			wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-			UMAPrClose() ;
+		    dialog.ShowModal();
 		}
 		::UMAPrClose() ;
 //	  ::SetPort( macPrintFormerPort ) ;
 		::SetPort( LMGetWMgrPort() ) ;
-		m_macPortHelper.Clear() ;
 	}
 #else
-#pragma warning "TODO:printing support for carbon"
+	if ( m_ok ) 
+	{
+  #if PM_USE_SESSION_APIS
+	    err = PMSessionEndDocument(m_macPrintSession);
+  #else
+	    err = PMEndDocument(m_macPrintPort);
+  #endif
+     	if ( err != noErr )
+     	{
+			message.Printf( "Print Error %d", err ) ;
+			wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		    dialog.ShowModal();
+     	}
+  #if TARGET_CARBON && PM_USE_SESSION_APIS
+	    UMAPrClose(&m_macPrintSession) ;
+  #else
+	    UMAPrClose() ;
+  #endif
+	}
 #endif
 }
 
@@ -130,7 +210,6 @@ void wxPrinterDC::EndDoc(void)
 
 void wxPrinterDC::StartPage(void) 
 {
-#if !TARGET_CARBON
 	if ( !m_ok )
 		return ;
 
@@ -150,51 +229,99 @@ void wxPrinterDC::StartPage(void)
 	m_macPenInstalled = false ;
 
 		
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 
+#if !TARGET_CARBON
   	PrOpenPage( m_macPrintPort , NULL ) ;
-	SetOrigin(  - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ;
+  	m_macLocalOrigin.h =  (**m_printData.m_macPrintInfo).rPaper.left ;
+  	m_macLocalOrigin.v =  (**m_printData.m_macPrintInfo).rPaper.top ;
+  	
+	SetOrigin(  - m_macLocalOrigin.h , - m_macLocalOrigin.v  ) ;
 	Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
 	::ClipRect( &clip ) ;
 	err = PrError() ;
-	if ( err )
+	if ( err != noErr )
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-   		::PrClosePage(  m_macPrintPort) ;
-		::PrCloseDoc( m_macPrintPort  ) ;
+		dialog.ShowModal();
+   		::PrClosePage( m_macPrintPort ) ;
+		::PrCloseDoc( m_macPrintPort ) ;
 		::UMAPrClose() ;
 	   	::SetPort( macPrintFormerPort ) ;
 	   	m_ok = FALSE ;
 	}
 #else
-#pragma warning "TODO:printing support for carbon"
+  #if PM_USE_SESSION_APIS
+	err = PMSessionBeginPage(m_macPrintSession,
+				 m_printData.m_macPageFormat,
+				 nil);
+  #else
+	err = PMBeginPage(m_macPrintPort, nil);
+  #endif
+	if ( err != noErr )
+	{
+		message.Printf( "Print Error %d", err ) ;
+		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+  #if PM_USE_SESSION_APIS
+   		PMSessionEndPage(m_macPrintSession);
+		PMSessionEndDocument(m_macPrintSession);
+		UMAPrClose(&m_macPrintSession) ;
+  #else
+   		PMEndPage(m_macPrintPort);
+		PMEndDocument(m_macPrintPort);
+		UMAPrClose() ;
+  #endif
+	   	::SetPort( macPrintFormerPort ) ;
+	   	m_ok = FALSE ;
+	}
 #endif
 }
 
 void wxPrinterDC::EndPage(void) 
 {
-#if !TARGET_CARBON
 	if ( !m_ok )
 		return ;
 
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 
+#if !TARGET_CARBON
    	PrClosePage(  (TPrPort*) m_macPort ) ;
 	err = PrError() ;
-	if ( err )
+	if ( err != noErr )
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
 		::PrCloseDoc( m_macPrintPort  ) ;
 		::UMAPrClose() ;
 	   	::SetPort( macPrintFormerPort ) ;
 	   	m_ok = FALSE ;
 	}
 #else
-#pragma warning "TODO:printing support for carbon"
+  #if PM_USE_SESSION_APIS
+	err = PMSessionEndPage(m_macPrintSession);
+  #else
+	err = PMEndPage(m_macPrintPort);
+  #endif
+	if ( err != noErr )
+	{
+		message.Printf( "Print Error %d", err ) ;
+		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+  #if PM_USE_SESSION_APIS
+		PMSessionEndDocument(m_macPrintSession);
+		UMAPrClose(&m_macPrintSession) ;
+  #else
+		PMEndDocument(m_macPrintPort);
+		UMAPrClose() ;
+  #endif
+	   	::SetPort( macPrintFormerPort ) ;
+	   	m_ok = FALSE ;
+	}
 #endif
 
 }