// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "printwin.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include <stdlib.h>
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxMacCarbonPrintData, wxPrintNativeDataBase)
IMPLEMENT_DYNAMIC_CLASS(wxMacPrinter, wxPrinterBase)
IMPLEMENT_CLASS(wxMacPrintPreview, wxPrintPreviewBase)
-#endif
bool wxMacCarbonPrintData::Ok() const
{
// PMDuplexMode not yet accessible via API
// PMQualityMode not yet accessible via API
// todo paperSize
+ PMResolution res;
+ PMPrinter printer;
+ PMTag tag = kPMMaxSquareResolution;
+ PMSessionGetCurrentPrinter(m_macPrintSession, &printer);
+ PMPrinterGetPrinterResolution(printer, tag, &res);
+ PMSetResolution((PMPageFormat) m_macPageFormat, &res);
+
return true ;
}
void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data )
{
- PMRect rPaper;
+ PMRect rPaper;
OSStatus err = PMGetUnadjustedPaperRect(m_macPageFormat, &rPaper);
if ( err == noErr )
{
(int)(((double) rPage.left - rPaper.left ) * pt2mm) ,
(int)(((double) rPage.top - rPaper.top ) * pt2mm) ) ) ;
- data->SetMinMarginBottomRight( wxPoint (
+ data->SetMinMarginBottomRight( wxPoint (
(wxCoord)(((double) rPaper.right - rPage.right ) * pt2mm),
(wxCoord)(((double) rPaper.bottom - rPage.bottom ) * pt2mm)) ) ;
if ( data->GetMarginBottomRight().y < data->GetMinMarginBottomRight().y )
data->SetMarginBottomRight( wxPoint( data->GetMarginBottomRight().x ,
data->GetMinMarginBottomRight().y) );
-
}
}
}
UInt32 from , to ;
PMGetFirstPage( m_macPrintSettings , &from ) ;
PMGetLastPage( m_macPrintSettings , &to ) ;
- data->SetFromPage( from ) ;
- data->SetToPage( to ) ;
+ if ( to >= 0x7FFFFFFF ) // due to an OS Bug we don't get back kPMPrintAllPages
+ {
+ data->SetAllPages( true ) ;
+ // This means all pages, more or less
+ data->SetFromPage(1);
+ data->SetToPage(32000);
+ }
+ else
+ {
+ data->SetFromPage( from ) ;
+ data->SetToPage( to ) ;
+ data->SetAllPages( false );
+ }
}
void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data )
PMSetCopies( m_macPrintSettings , data->GetNoCopies() , false ) ;
PMSetFirstPage( m_macPrintSettings , data->GetFromPage() , false ) ;
- int toPage = data->GetToPage();
- if (toPage < 1)
- toPage = data->GetFromPage();
- PMSetLastPage( m_macPrintSettings , toPage , false ) ;
+ if (data->GetAllPages() || data->GetFromPage() == 0)
+ PMSetLastPage( m_macPrintSettings , (UInt32) kPMPrintAllPages, true ) ;
+ else
+ PMSetLastPage( m_macPrintSettings , (UInt32) data->GetToPage() , false ) ;
}
/*
bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
{
- sm_abortIt = FALSE;
+ sm_abortIt = false;
sm_abortWindow = NULL;
-
+
if (!printout)
- return FALSE;
-
- printout->SetIsPreview(FALSE);
+ return false;
+
+ printout->SetIsPreview(false);
if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
if (m_printDialogData.GetMaxPage() < 1)
{
dc = new wxPrinterDC( m_printDialogData.GetPrintData() ) ;
}
-
-
+
// May have pressed cancel.
if (!dc || !dc->Ok())
{
- if (dc) delete dc;
- return FALSE;
+ if (dc)
+ delete dc;
+ return false;
}
-
+
// on the mac we have always pixels as addressing mode with 72 dpi
-
printout->SetPPIScreen(72, 72);
- printout->SetPPIPrinter(72, 72);
-
- // Set printout parameters
+ PMResolution res;
+ wxMacCarbonPrintData* nativeData = (wxMacCarbonPrintData*)
+ (m_printDialogData.GetPrintData().GetNativeData());
+ PMGetResolution((PMPageFormat) (nativeData->m_macPageFormat), &res);
+ printout->SetPPIPrinter(int(res.hRes), int(res.vRes));
+
+ // Set printout parameters
printout->SetDC(dc);
-
+
int w, h;
wxCoord ww, hh;
dc->GetSize(&w, &h);
printout->SetPageSizePixels((int)w, (int)h);
dc->GetSizeMM(&ww, &hh);
printout->SetPageSizeMM((int)ww, (int)hh);
-
+
// Create an abort window
wxBeginBusyCursor();
-
+
printout->OnPreparePrinting();
-
+
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
-
+
if (maxPage == 0)
{
wxEndBusyCursor();
- return FALSE;
+ return false;
}
-
+
// Only set min and max, because from and to have been
// set by the user
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
-
+
wxWindow *win = CreateAbortWindow(parent, printout);
wxSafeYield(win,true);
-
+
if (!win)
{
wxEndBusyCursor();
wxMessageBox(wxT("Sorry, could not create an abort dialog."), wxT("Print Error"), wxOK, parent);
delete dc;
- return FALSE;
+
+ return false;
}
+
sm_abortWindow = win;
- sm_abortWindow->Show(TRUE);
+ sm_abortWindow->Show(true);
wxSafeYield(win,true);
-
+
printout->OnBeginPrinting();
-
- bool keepGoing = TRUE;
-
+
+ bool keepGoing = true;
+
int copyCount;
for (copyCount = 1; copyCount <= m_printDialogData.GetNoCopies(); copyCount ++)
{
}
if (sm_abortIt)
break;
-
+
int pn;
- for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn);
+ for (pn = m_printDialogData.GetFromPage();
+ keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn);
pn++)
{
if (sm_abortIt)
{
- keepGoing = FALSE;
+ keepGoing = false;
break;
}
else
if (sm_abortWindow)
{
- sm_abortWindow->Show(FALSE);
+ sm_abortWindow->Show(false);
delete sm_abortWindow;
sm_abortWindow = NULL;
}
delete dc;
- return TRUE;
+ return true;
}
wxDC* wxMacPrinter::PrintDialog(wxWindow *parent)
{
#if 0
wxPrintDialog dialog(parent, & m_printDialogData);
- dialog.GetPrintDialogData().SetSetupDialog(TRUE);
+ dialog.GetPrintDialogData().SetSetupDialog(true);
int ret = dialog.ShowModal();
if (ret == wxID_OK)
- {
m_printDialogData = dialog.GetPrintDialogData();
- }
return (ret == wxID_OK);
#endif
+
return wxID_CANCEL;
}
bool wxMacPrintPreview::Print(bool interactive)
{
if (!m_printPrintout)
- return FALSE;
+ return false;
+
wxMacPrinter printer(&m_printDialogData);
return printer.Print(m_previewFrame, m_printPrintout, interactive);
}
{
m_isOk = false ;
}
+
// At 100%, the page should look about page-size on the screen.
// m_previewScale = (float)((float)screenWidth/(float)printerWidth);
// m_previewScale = m_previewScale * (float)((float)screenXRes/(float)printerXRes);
-
- m_previewScale = 1 ;
+
+ m_previewScale = 1 ;
}
#endif