X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72e7876ba5ad16a1b03bb2449ea7886ec648854a..73b0423d0fd73345b4d2f0152416d12f74c75679:/src/mac/dcprint.cpp

diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp
index 2b0bf64c50..7f093c6e71 100644
--- a/src/mac/dcprint.cpp
+++ b/src/mac/dcprint.cpp
@@ -24,8 +24,19 @@
 #endif
 
 #include "wx/dcprint.h"
-#include "math.h"
+#include "wx/msgdlg.h"
+#include <math.h>
+#include "wx/mac/uma.h"
+#ifndef __DARWIN__
+#include "Printing.h"
+#endif
 
+#if defined(TARGET_CARBON) && !defined(__DARWIN__)
+#  if PM_USE_SESSION_APIS
+#    include <PMCore.h>
+#  endif
+#  include <PMApplication.h>
+#endif
 
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_CLASS(wxPrinterDC, wxDC)
@@ -35,69 +46,167 @@ GrafPtr macPrintFormerPort = NULL ;
 
 wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 {
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 	
 	m_printData = printdata ;
 	m_printData.ConvertToNative() ;
-	
-	::PrOpen() ;
-	err = PrError() ;
-	if ( err )
+
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+	err = UMAPrOpen(&m_macPrintSessionPort) ;
+	if ( err != noErr || m_macPrintSessionPort == kPMNoData )
+#else
+	err = UMAPrOpen(NULL) ;
+	if ( err != noErr )
+#endif
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-		PrClose() ;
+		dialog.ShowModal();
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+		UMAPrClose(&m_macPrintSessionPort) ;
+#else
+		UMAPrClose(NULL) ;
+#endif
+		m_ok = FALSE;
+		return;
 	}
 	
-	if ( ::PrValidate( m_printData.m_macPrintInfo ) )
+#if !TARGET_CARBON
+	if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) )
 	{
+		::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ;
 		// 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) ;
-		PrClose() ;
+		dialog.ShowModal();
+		UMAPrClose(NULL) ;
+		m_ok = FALSE;
+		return;
 	}
 	::GetPort( &macPrintFormerPort ) ;
-	m_macPrintPort = ::PrOpenDoc( m_printData.m_macPrintInfo , NULL , NULL ) ;
+	m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ;
+	err = PrError() ;
+	if ( err )
+	{
+		message.Printf( "Print Error %d", err ) ;
+		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
+		UMAPrClose(NULL) ;
+		m_ok = FALSE;
+		return;
+	}
+	// sets current port
+	m_macPort = (GrafPtr ) m_macPrintSessionPort ;
+#else
+  #if PM_USE_SESSION_APIS
+    err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort,
+              (PMPrintSettings)m_printData.m_macPrintSettings, 
+    	      (PMPageFormat)m_printData.m_macPageFormat);
+    if ( err != noErr )
+  #else
+	m_macPrintSessionPort = kPMNoReference ;
+    err = PMBeginDocument(
+    	      m_printData.m_macPrintSettings, 
+    	      m_printData.m_macPageFormat, 
+    	      &m_macPrintSessionPort);
+    if ( err != noErr || m_macPrintSessionPort == 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_macPrintSessionPort) ;
+  #else
+		UMAPrClose(NULL) ;
+  #endif
+		m_ok = FALSE;
+		return;
+    }
 	// sets current port
-	m_macPort = (GrafPtr ) m_macPrintPort ;
+	::GetPort( (GrafPtr *)&m_macPort ) ;
+#endif
 	m_ok = TRUE ;
 	m_minY = m_minX = 0 ;
-	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 ;
+#if TARGET_CARBON
+	PMRect rPaper;
+	
+	err = PMGetAdjustedPaperRect((PMPageFormat)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_macPrintSessionPort) ;
+  #else
+		UMAPrClose(NULL) ;
+  #endif
+		m_ok = FALSE;
+		return;
+    }
+	m_maxX = rPaper.right - rPaper.left ;
+	m_maxY = rPaper.bottom - rPaper.top ;
+#else
+	m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ;
+	m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ;
+#endif
 }
 
 wxPrinterDC::~wxPrinterDC(void)
 {
+	OSStatus err ;
+	wxString message ;
+#if !TARGET_CARBON
 	if ( m_ok )
 	{
-		OSErr err ;
-		wxString message ;
-	
-		::PrCloseDoc( m_macPrintPort  ) ;
+		::PrCloseDoc( (TPPrPort) m_macPrintSessionPort  ) ;
 		err = PrError() ;
 		
-		if ( !err )
+		if ( err == noErr )
 		{
-			if ( (**m_printData.m_macPrintInfo).prJob.bJDocLoop == bSpoolLoop )
+			if ( (**(THPrint)m_printData.m_macPrintSettings).prJob.bJDocLoop == bSpoolLoop )
 			{
 				TPrStatus status ;
-				::PrPicFile( m_printData.m_macPrintInfo , NULL , NULL , NULL , &status ) ;
+				::PrPicFile( (THPrint) m_printData.m_macPrintSettings , NULL , NULL , NULL , &status ) ;
 			}
 		}
 		else
 		{
 			message.Printf( "Print Error %d", err ) ;
 			wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-			PrClose() ;
+		    dialog.ShowModal();
 		}
-		::PrClose() ;
-	  ::SetPort( macPrintFormerPort ) ;
+		::UMAPrClose(NULL) ;
+//	  ::SetPort( macPrintFormerPort ) ;
+		::SetPort( LMGetWMgrPort() ) ;
 	}
+#else
+	if ( m_ok ) 
+	{
+  #if PM_USE_SESSION_APIS
+	    err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);
+  #else
+	    err = PMEndDocument(m_macPrintSessionPort);
+  #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_macPrintSessionPort) ;
+  #else
+	    UMAPrClose(NULL) ;
+  #endif
+	}
+#endif
 }
 
 bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) 
@@ -113,25 +222,71 @@ void wxPrinterDC::StartPage(void)
 {
 	if ( !m_ok )
 		return ;
+
+  	m_logicalFunction = wxCOPY;
+//  m_textAlignment = wxALIGN_TOP_LEFT;
+  	m_backgroundMode = wxTRANSPARENT;
+  
+  	m_textForegroundColour = *wxBLACK;
+  	m_textBackgroundColour = *wxWHITE;
+  	m_pen = *wxBLACK_PEN;
+  	m_font = *wxNORMAL_FONT;
+  	m_brush = *wxTRANSPARENT_BRUSH;
+  	m_backgroundBrush = *wxWHITE_BRUSH;
+    
+	m_macFontInstalled = false ;
+	m_macBrushInstalled = false ;
+	m_macPenInstalled = false ;
+
 		
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 
-  PrOpenPage( m_macPrintPort , NULL ) ;
-	SetOrigin(  - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ;
+#if !TARGET_CARBON
+  	PrOpenPage( (TPPrPort) m_macPrintSessionPort , NULL ) ;
+  	m_macLocalOrigin.x =  (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ;
+  	m_macLocalOrigin.y =  (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ;
+  	
 	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) ;
+		dialog.ShowModal();
+   		::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ;
+		::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ;
+		::UMAPrClose(NULL) ;
+	   	::SetPort( macPrintFormerPort ) ;
+	   	m_ok = FALSE ;
+	}
+#else
+  #if PM_USE_SESSION_APIS
+	err = PMSessionBeginPage((PMPrintSession)m_macPrintSessionPort,
+				 (PMPageFormat)m_printData.m_macPageFormat,
+				 nil);
+  #else
+	err = PMBeginPage(m_macPrintSessionPort, nil);
+  #endif
+	if ( err != noErr )
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-   		::PrClosePage(  m_macPrintPort) ;
-		::PrCloseDoc( m_macPrintPort  ) ;
-		::PrClose() ;
+		dialog.ShowModal();
+  #if PM_USE_SESSION_APIS
+   		PMSessionEndPage((PMPrintSession)m_macPrintSessionPort);
+		PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);
+		UMAPrClose(&m_macPrintSessionPort) ;
+  #else
+   		PMEndPage(m_macPrintSessionPort);
+		PMEndDocument(m_macPrintSessionPort);
+		UMAPrClose(NULL) ;
+  #endif
 	   	::SetPort( macPrintFormerPort ) ;
 	   	m_ok = FALSE ;
 	}
+#endif
 }
 
 void wxPrinterDC::EndPage(void) 
@@ -139,18 +294,43 @@ void wxPrinterDC::EndPage(void)
 	if ( !m_ok )
 		return ;
 
-	OSErr err ;
+	OSStatus err ;
 	wxString message ;
 
-   	PrClosePage(  (TPrPort*) m_macPort ) ;
+#if !TARGET_CARBON
+   	PrClosePage(  (TPPrPort) 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( (TPPrPort) m_macPrintSessionPort  ) ;
+		::UMAPrClose(NULL) ;
+	   	::SetPort( macPrintFormerPort ) ;
+	   	m_ok = FALSE ;
+	}
+#else
+  #if PM_USE_SESSION_APIS
+	err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort);
+  #else
+	err = PMEndPage(m_macPrintSessionPort);
+  #endif
+	if ( err != noErr )
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
-		::PrCloseDoc( m_macPrintPort  ) ;
-		::PrClose() ;
+		dialog.ShowModal();
+  #if PM_USE_SESSION_APIS
+		PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);
+		UMAPrClose(&m_macPrintSessionPort) ;
+  #else
+		PMEndDocument(m_macPrintSessionPort);
+		UMAPrClose(NULL) ;
+  #endif
 	   	::SetPort( macPrintFormerPort ) ;
 	   	m_ok = FALSE ;
 	}
+#endif
+
 }