X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/34a4e912864bfac6c4f27a405a199bb516468cf1..7af14d718783cb81233e7f45f9f61159ad420b79:/src/mac/carbon/printmac.cpp diff --git a/src/mac/carbon/printmac.cpp b/src/mac/carbon/printmac.cpp index 87c3b1bd59..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" @@ -154,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 ; } @@ -215,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 ) { @@ -227,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)) ) ; @@ -245,7 +248,6 @@ void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) if ( data->GetMarginBottomRight().y < data->GetMinMarginBottomRight().y ) data->SetMarginBottomRight( wxPoint( data->GetMarginBottomRight().x , data->GetMinMarginBottomRight().y) ); - } } } @@ -284,13 +286,9 @@ void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data ) PMSetFirstPage( m_macPrintSettings , data->GetFromPage() , false ) ; if (data->GetAllPages() || data->GetFromPage() == 0) - { - PMSetLastPage( m_macPrintSettings , (UInt32) kPMPrintAllPages, true ) ; - } - else - { - PMSetLastPage( m_macPrintSettings , (UInt32) data->GetToPage() , false ) ; - } + PMSetLastPage( m_macPrintSettings , (UInt32) kPMPrintAllPages, true ) ; + else + PMSetLastPage( m_macPrintSettings , (UInt32) data->GetToPage() , false ) ; } /* @@ -308,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) @@ -335,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 ++) { @@ -409,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 @@ -442,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; } @@ -451,7 +455,7 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) delete dc; - return TRUE; + return true; } wxDC* wxMacPrinter::PrintDialog(wxWindow *parent) @@ -474,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; } @@ -513,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); } @@ -549,10 +553,11 @@ 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 ; }