X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc7ccb9c5dcc8d68157dcc2c7cd2da230d45916d..23ff76d5ad99605e0e49173dcd61894b17b03c9a:/src/mac/carbon/printmac.cpp diff --git a/src/mac/carbon/printmac.cpp b/src/mac/carbon/printmac.cpp index e2c5e5bcf8..0415a33953 100644 --- a/src/mac/carbon/printmac.cpp +++ b/src/mac/carbon/printmac.cpp @@ -9,10 +9,6 @@ // 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" @@ -41,11 +37,9 @@ #include -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxMacCarbonPrintData, wxPrintNativeDataBase) IMPLEMENT_DYNAMIC_CLASS(wxMacPrinter, wxPrinterBase) IMPLEMENT_CLASS(wxMacPrintPreview, wxPrintPreviewBase) -#endif bool wxMacCarbonPrintData::Ok() const { @@ -156,6 +150,13 @@ bool wxMacCarbonPrintData::TransferFrom( const wxPrintData &data ) // 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 ; } @@ -217,7 +218,7 @@ void wxMacCarbonPrintData::TransferFrom( wxPageSetupData *data ) void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) { - PMRect rPaper; + PMRect rPaper; OSStatus err = PMGetUnadjustedPaperRect(m_macPageFormat, &rPaper); if ( err == noErr ) { @@ -229,7 +230,7 @@ void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) (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)) ) ; @@ -247,7 +248,6 @@ void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) if ( data->GetMarginBottomRight().y < data->GetMinMarginBottomRight().y ) data->SetMarginBottomRight( wxPoint( data->GetMarginBottomRight().x , data->GetMinMarginBottomRight().y) ); - } } } @@ -264,8 +264,19 @@ void wxMacCarbonPrintData::TransferTo( wxPrintDialogData* data ) 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 ) @@ -274,10 +285,10 @@ 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 ) ; } /* @@ -295,13 +306,13 @@ wxMacPrinter::~wxMacPrinter(void) 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) @@ -322,69 +333,74 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) { 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 ++) { @@ -396,14 +412,15 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) } 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 @@ -429,7 +446,7 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) if (sm_abortWindow) { - sm_abortWindow->Show(FALSE); + sm_abortWindow->Show(false); delete sm_abortWindow; sm_abortWindow = NULL; } @@ -438,7 +455,7 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) delete dc; - return TRUE; + return true; } wxDC* wxMacPrinter::PrintDialog(wxWindow *parent) @@ -461,17 +478,16 @@ bool wxMacPrinter::Setup(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; } @@ -500,7 +516,8 @@ wxMacPrintPreview::~wxMacPrintPreview(void) bool wxMacPrintPreview::Print(bool interactive) { if (!m_printPrintout) - return FALSE; + return false; + wxMacPrinter printer(&m_printDialogData); return printer.Print(m_previewFrame, m_printPrintout, interactive); } @@ -536,11 +553,12 @@ void wxMacPrintPreview::DetermineScaling(void) { 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