// Author: Julian Smart, Stefan Csomor
// Modified by:
// Created: 04/01/98
-// RCS-ID: $Id$
// Copyright: (c) Julian Smart, Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
{
const PMResolution *res1 = (const PMResolution *)e1;
const PMResolution *res2 = (const PMResolution *)e2;
- int area1 = res1->hRes * res1->vRes;
- int area2 = res2->hRes * res2->vRes;
-
+ const double area1 = res1->hRes * res1->vRes;
+ const double area2 = res2->hRes * res2->vRes;
+
if (area1 < area2)
return -1;
else if (area1 > area2)
{
PMResolution res, *resolutions = NULL;
OSStatus status = PMPrinterGetPrinterResolutionCount(printer, count);
- if (status == kPMNotImplemented)
- {
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- resolutions = (PMResolution *)malloc(sizeof(PMResolution) * 4);
- *count = 0;
- if (PMPrinterGetPrinterResolution(printer, kPMMinRange, &res) == noErr)
- resolutions[(*count)++] = res;
- if (PMPrinterGetPrinterResolution(printer, kPMMinSquareResolution, &res) == noErr)
- resolutions[(*count)++] = res;
- if (PMPrinterGetPrinterResolution(printer, kPMMaxSquareResolution, &res) == noErr)
- resolutions[(*count)++] = res;
- if (PMPrinterGetPrinterResolution(printer, kPMMaxRange, &res) == noErr)
- resolutions[(*count)++] = res;
- if (*count == 0)
- {
- if (PMPrinterGetPrinterResolution(printer, kPMDefaultResolution, &res) == noErr)
- resolutions[(*count)++] = res;
- }
-#endif
- }
- else if (status == noErr)
+ if (status == noErr)
{
resolutions = (PMResolution *)malloc(sizeof(PMResolution) * (*count));
UInt32 realCount = 0;
resolutions[realCount++] = res;
}
qsort(resolutions, realCount, sizeof(PMResolution), ResolutionSorter);
-
+
*count = realCount;
}
if ((*count == 0) && (resolutions))
{
}
-bool wxOSXPrintData::TransferFrom( const wxPrintData &data )
+void wxOSXPrintData::TransferPrinterNameFrom( const wxPrintData &data )
{
CFArrayRef printerList;
CFIndex index, count;
CFStringRef name;
-
+
if (PMServerCreatePrinterList(kPMServerLocal, &printerList) == noErr)
{
PMPrinter printer = NULL;
PMSessionSetCurrentPMPrinter(m_macPrintSession, printer);
CFRelease(printerList);
}
-
+}
+
+void wxOSXPrintData::TransferPaperInfoFrom( const wxPrintData &data )
+{
PMPrinter printer;
PMSessionGetCurrentPrinter(m_macPrintSession, &printer);
wxString id, name(wxT("Custom paper"));
id.Printf(wxT("wxPaperCustom%dx%d"), papersize.x, papersize.y);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
- if ( PMPaperCreateCustom != NULL)
- {
- PMPaperCreateCustom(printer, wxCFStringRef( id, wxFont::GetDefaultEncoding() ), wxCFStringRef( name, wxFont::GetDefaultEncoding() ),
- papersize.x, papersize.y, &margins, &paper);
- }
-#endif
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- if ( paper == kPMNoData )
- {
- PMPaperCreate(printer, wxCFStringRef( id, wxFont::GetDefaultEncoding() ), wxCFStringRef( name, wxFont::GetDefaultEncoding() ),
- papersize.x, papersize.y, &margins, &paper);
- }
-#endif
+ PMPaperCreateCustom(printer, wxCFStringRef( id, wxFont::GetDefaultEncoding() ), wxCFStringRef( name, wxFont::GetDefaultEncoding() ),
+ papersize.x, papersize.y, &margins, &paper);
}
if ( bestPaper != kPMNoData )
{
PMSetCollate(m_macPrintSettings, data.GetCollate());
if ( data.IsOrientationReversed() )
PMSetOrientation( m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
- kPMReverseLandscape : kPMReversePortrait , false ) ;
+ kPMReverseLandscape : kPMReversePortrait , false ) ;
else
PMSetOrientation( m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
- kPMLandscape : kPMPortrait , false ) ;
+ kPMLandscape : kPMPortrait , false ) ;
PMDuplexMode mode = 0 ;
switch( data.GetDuplex() )
if ( data.IsOrientationReversed() )
PMSetOrientation( m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
- kPMReverseLandscape : kPMReversePortrait , false ) ;
+ kPMReverseLandscape : kPMReversePortrait , false ) ;
else
PMSetOrientation( m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
- kPMLandscape : kPMPortrait , false ) ;
+ kPMLandscape : kPMPortrait , false ) ;
+}
+
+void wxOSXPrintData::TransferResolutionFrom( const wxPrintData &data )
+{
+ PMPrinter printer;
+ PMSessionGetCurrentPrinter(m_macPrintSession, &printer);
UInt32 resCount;
PMResolution *resolutions = GetSupportedResolutions(printer, &resCount);
wxPrintQuality quality = data.GetQuality();
if (quality >= 0)
quality = wxPRINT_QUALITY_HIGH;
-
+
PMResolution res = resolutions[((quality - wxPRINT_QUALITY_DRAFT) * (resCount - 1)) / 3];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
- if ( PMPrinterSetOutputResolution != NULL )
- PMPrinterSetOutputResolution(printer, m_macPrintSettings, &res);
- else
-#endif
- {
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- PMSetResolution( m_macPageFormat, &res);
-#endif
- }
+ PMPrinterSetOutputResolution(printer, m_macPrintSettings, &res);
free(resolutions);
}
+}
+
+bool wxOSXPrintData::TransferFrom( const wxPrintData &data )
+{
+ TransferPrinterNameFrom(data);
+ TransferPaperInfoFrom(data);
+ TransferResolutionFrom(data);
+
// after setting the new resolution the format has to be updated, otherwise the page rect remains
// at the 'old' scaling
PMSessionValidatePageFormat(m_macPrintSession,
- m_macPageFormat, kPMDontWantBoolean);
+ m_macPageFormat, kPMDontWantBoolean);
PMSessionValidatePrintSettings(m_macPrintSession,
- m_macPrintSettings, kPMDontWantBoolean);
+ m_macPrintSettings, kPMDontWantBoolean);
+
#if wxOSX_USE_COCOA
UpdateFromPMState();
#endif
return true ;
}
-bool wxOSXPrintData::TransferTo( wxPrintData &data )
+void wxOSXPrintData::TransferPrinterNameTo( wxPrintData &data )
+{
+ CFStringRef name;
+ PMPrinter printer ;
+ PMSessionGetCurrentPrinter( m_macPrintSession, &printer );
+ if (PMPrinterIsDefault(printer))
+ data.SetPrinterName(wxEmptyString);
+ else
+ {
+ name = PMPrinterGetName(printer);
+ CFRetain(name);
+ data.SetPrinterName(wxCFStringRef(name).AsString());
+ }
+}
+
+void wxOSXPrintData::TransferPaperInfoTo( wxPrintData &data )
{
+ PMGetPageFormatPaper(m_macPageFormat, &m_macPaper);
+
+ PMPrinter printer ;
+ PMSessionGetCurrentPrinter( m_macPrintSession, &printer );
OSStatus err = noErr ;
-#if wxOSX_USE_COCOA
- UpdateToPMState();
-#endif
UInt32 copies ;
err = PMGetCopies( m_macPrintSettings , &copies ) ;
if ( err == noErr )
if (PMGetCollate(m_macPrintSettings, &collate) == noErr)
data.SetCollate(collate);
- CFStringRef name;
- PMPrinter printer ;
- PMSessionGetCurrentPrinter( m_macPrintSession, &printer );
- if (PMPrinterIsDefault(printer))
- data.SetPrinterName(wxEmptyString);
- else
- {
- name = PMPrinterGetName(printer);
- CFRetain(name);
- data.SetPrinterName(wxCFStringRef(name).AsString());
- }
PMDuplexMode mode = 0 ;
PMGetDuplex( m_macPrintSettings, &mode ) ;
break ;
}
+ double height, width;
+ PMPaperGetHeight(m_macPaper, &height);
+ PMPaperGetWidth(m_macPaper, &width);
+
+ wxSize sz((int)(width * pt2mm + 0.5 ) ,
+ (int)(height * pt2mm + 0.5 ));
+ data.SetPaperSize(sz);
+ wxPaperSize id = wxThePrintPaperDatabase->GetSize(wxSize(sz.x* 10, sz.y * 10));
+ if (id != wxPAPER_NONE)
+ {
+ data.SetPaperId(id);
+ }
+}
+
+void wxOSXPrintData::TransferResolutionTo( wxPrintData &data )
+{
+ PMPrinter printer ;
+ PMSessionGetCurrentPrinter( m_macPrintSession, &printer );
+
/* assume high quality, will change below if we are able to */
data.SetQuality(wxPRINT_QUALITY_HIGH);
-
+
PMResolution *resolutions;
UInt32 resCount;
resolutions = GetSupportedResolutions(printer, &resCount);
{
bool valid = false;
PMResolution res;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
- if ( PMPrinterGetOutputResolution != NULL )
- {
- if ( PMPrinterGetOutputResolution(printer, m_macPrintSettings, &res) == noErr )
- valid = true;
- }
-#endif
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- if (PMPrinterGetPrinterResolution(printer, kPMCurrentValue, &res) == noErr)
+ if ( PMPrinterGetOutputResolution(printer, m_macPrintSettings, &res) == noErr )
valid = true;
-#endif
+
if ( valid )
{
UInt32 i;
data.SetQuality((((i + 1) * 3) / resCount) + wxPRINT_QUALITY_DRAFT);
}
free(resolutions);
- }
-
- double height, width;
- PMPaperGetHeight(m_macPaper, &height);
- PMPaperGetWidth(m_macPaper, &width);
-
- wxSize sz((int)(width * pt2mm + 0.5 ) ,
- (int)(height * pt2mm + 0.5 ));
- data.SetPaperSize(sz);
- wxPaperSize id = wxThePrintPaperDatabase->GetSize(wxSize(sz.x* 10, sz.y * 10));
- if (id != wxPAPER_NONE)
- {
- data.SetPaperId(id);
}
+}
+
+bool wxOSXPrintData::TransferTo( wxPrintData &data )
+{
+#if wxOSX_USE_COCOA
+ UpdateToPMState();
+#endif
+
+ TransferPrinterNameTo(data);
+ TransferPaperInfoTo(data);
+ TransferResolutionTo(data);
return true ;
}
-void wxOSXPrintData::TransferFrom( wxPageSetupData *WXUNUSED(data) )
+void wxOSXPrintData::TransferFrom( wxPageSetupDialogData *WXUNUSED(data) )
{
// should we setup the page rect here ?
// since MacOS sometimes has two same paper rects with different
// page rects we could make it roundtrip safe perhaps
}
-void wxOSXPrintData::TransferTo( wxPageSetupData* data )
+void wxOSXPrintData::TransferTo( wxPageSetupDialogData* data )
{
#if wxOSX_USE_COCOA
UpdateToPMState();
}
void wxOSXPrintData::TransferTo( wxPrintDialogData* data )
-{
+{
#if wxOSX_USE_COCOA
UpdateToPMState();
#endif
{
#if wxOSX_USE_COCOA
return new wxOSXCocoaPrintData();
-#endif
-#if wxOSX_USE_CARBON
+#elif wxOSX_USE_CARBON
return new wxOSXCarbonPrintData();
-#endif
+#else
return NULL;
+#endif
}
/*
sm_abortWindow = NULL;
if (!printout)
+ {
+ sm_lastError = wxPRINTER_ERROR;
return false;
-
- printout->SetIsPreview(false);
-
- // Get some parameters from the printout, if defined
- int fromPage, toPage;
- int minPage, maxPage;
- printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
-
- if (maxPage == 0) return false;
-
- // Only set min and max, because from and to will be
- // set by the user
- m_printDialogData.SetMinPage(minPage);
- m_printDialogData.SetMaxPage(maxPage);
+ }
if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
if (PMSessionGetCurrentPrinter(nativeData->GetPrintSession(), &printer) == noErr)
{
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
- if ( PMPrinterGetOutputResolution != NULL )
+ if (PMPrinterGetOutputResolution( printer, nativeData->GetPrintSettings(), &res) == -9589 /* kPMKeyNotFound */ )
{
- if (PMPrinterGetOutputResolution( printer, nativeData->GetPrintSettings(), &res) == -9589 /* kPMKeyNotFound */ )
- {
- res.hRes = res.vRes = 300;
- }
- }
- else
-#endif
- {
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- PMPrinterGetPrinterResolution(printer, kPMCurrentValue, &res);
-#endif
+ res.hRes = res.vRes = 300;
}
}
+ else
+ {
+ // fallback
+ res.hRes = res.vRes = 300;
+ }
printout->SetPPIPrinter(int(res.hRes), int(res.vRes));
// Set printout parameters
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)
+ {
+ sm_lastError = wxPRINTER_ERROR;
+ return false;
+ }
+
+ // Only set min and max, because from and to will be
+ // set by the user
+ m_printDialogData.SetMinPage(minPage);
+ m_printDialogData.SetMaxPage(maxPage);
+
printout->OnBeginPrinting();
bool keepGoing = true;
{
if (sm_abortIt)
{
- keepGoing = false;
break;
}
else
if (sm_abortWindow)
{
sm_abortWindow->Show(false);
- delete sm_abortWindow;
- sm_abortWindow = NULL;
+ wxDELETE(sm_abortWindow);
}
wxEndBusyCursor();
return (ret == wxID_OK);
#endif
- return wxID_CANCEL;
+ return false;
}
/*