void wxOSXPrintData::TransferPaperInfoTo( wxPrintData &data ) { PMPrinter printer ; PMSessionGetCurrentPrinter( m_macPrintSession, &printer ); OSStatus err = noErr ; UInt32 copies ; err = PMGetCopies( m_macPrintSettings , &copies ) ; if ( err == noErr ) data.SetNoCopies( copies ) ; PMOrientation orientation ; err = PMGetOrientation( m_macPageFormat , &orientation ) ; if ( err == noErr ) { if ( orientation == kPMPortrait || orientation == kPMReversePortrait ) { data.SetOrientation( wxPORTRAIT ); data.SetOrientationReversed( orientation == kPMReversePortrait ); } else { data.SetOrientation( wxLANDSCAPE ); data.SetOrientationReversed( orientation == kPMReverseLandscape ); } } Boolean collate; if (PMGetCollate(m_macPrintSettings, &collate) == noErr) data.SetCollate(collate); PMDuplexMode mode = 0 ; PMGetDuplex( m_macPrintSettings, &mode ) ; switch( mode ) { case kPMDuplexNoTumble : data.SetDuplex(wxDUPLEX_HORIZONTAL); break ; case kPMDuplexTumble : data.SetDuplex(wxDUPLEX_VERTICAL); break ; case kPMDuplexNone : default : data.SetDuplex(wxDUPLEX_SIMPLEX); 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); } }
bool wxMacCarbonPrintData::TransferTo( wxPrintData &data ) { OSStatus err = noErr ; UInt32 copies ; err = PMGetCopies( m_macPrintSettings , &copies ) ; if ( err == noErr ) data.SetNoCopies( copies ) ; PMOrientation orientation ; err = PMGetOrientation( m_macPageFormat , &orientation ) ; if ( err == noErr ) { if ( orientation == kPMPortrait || orientation == kPMReversePortrait ) data.SetOrientation( wxPORTRAIT ); else data.SetOrientation( wxLANDSCAPE ); } // collate cannot be set #if 0 { wxMacCFStringHolder name ; PMPrinter printer ; PMSessionGetCurrentPrinter( m_macPrintSession , &printer ) ; m_printerName = name.AsString() ; } #endif PMColorMode color ; err = PMGetColorMode( m_macPrintSettings, &color ) ; if ( err == noErr ) data.SetColour( !(color == kPMBlackAndWhite) ) ; // PMDuplexMode not yet accessible via API // PMQualityMode not yet accessible via API // todo paperSize PMRect rPaper; err = PMGetUnadjustedPaperRect( m_macPageFormat, &rPaper); if ( err == noErr ) { data.SetPaperSize( wxSize ( (int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) , (int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 ) ) ); } return true ; }
bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) { HGLOBAL hDevMode = (HGLOBAL)(DWORD) m_devMode; HGLOBAL hDevNames = (HGLOBAL)(DWORD) m_devNames; if (!hDevMode) return false; if ( hDevMode ) { LPDEVMODE devMode = (LPDEVMODE)GlobalLock(hDevMode); //// Orientation if (devMode->dmFields & DM_ORIENTATION) data.SetOrientation( devMode->dmOrientation ); //// Collation if (devMode->dmFields & DM_COLLATE) { if (devMode->dmCollate == DMCOLLATE_TRUE) data.SetCollate( true ); else data.SetCollate( false ); } //// Number of copies if (devMode->dmFields & DM_COPIES) data.SetNoCopies( devMode->dmCopies ); if (devMode->dmFields & DM_DEFAULTSOURCE) data.SetBin( (wxPrintBin)devMode->dmDefaultSource ); //// Printer name if (devMode->dmDeviceName[0] != 0) data.SetPrinterName( devMode->dmDeviceName ); //// Colour if (devMode->dmFields & DM_COLOR) { if (devMode->dmColor == DMCOLOR_COLOR) data.SetColour( true ); else data.SetColour( false ); } else data.SetColour( true ); //// Paper size // We don't know size of user defined paper and some buggy drivers // set both DM_PAPERSIZE and DM_PAPERWIDTH & DM_PAPERLENGTH. Since // dmPaperSize >= DMPAPER_USER wouldn't be in wxWin's database, this // code wouldn't set m_paperSize correctly. bool foundPaperSize = false; if ((devMode->dmFields & DM_PAPERSIZE) && (devMode->dmPaperSize < DMPAPER_USER)) { if (wxThePrintPaperDatabase) { wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperTypeByPlatformId(devMode->dmPaperSize); if (paper) { data.SetPaperId( paper->GetId() ); data.SetPaperSize( wxSize(paper->GetWidth() / 10,paper->GetHeight() / 10) ); m_customWindowsPaperId = 0; foundPaperSize = true; } } else { // Shouldn't really get here wxFAIL_MSG(wxT("Paper database wasn't initialized in wxPrintData::ConvertFromNative.")); data.SetPaperId( wxPAPER_NONE ); data.SetPaperSize( wxSize(0,0) ); m_customWindowsPaperId = 0; GlobalUnlock(hDevMode); return false; } } if (!foundPaperSize && (devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH)) { // DEVMODE is in tenths of a milimeter data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) ); data.SetPaperId( wxPAPER_NONE ); m_customWindowsPaperId = devMode->dmPaperSize; } else { // Often will reach this for non-standard paper sizes (sizes which // wouldn't be in wxWidget's paper database). Setting // m_customWindowsPaperId to devMode->dmPaperSize should be enough // to get this paper size working. data.SetPaperSize( wxSize(0,0) ); data.SetPaperId( wxPAPER_NONE ); m_customWindowsPaperId = devMode->dmPaperSize; } //// Duplex if (devMode->dmFields & DM_DUPLEX) { switch (devMode->dmDuplex) { case DMDUP_HORIZONTAL: data.SetDuplex( wxDUPLEX_HORIZONTAL ); break; case DMDUP_VERTICAL: data.SetDuplex( wxDUPLEX_VERTICAL ); break; default: case DMDUP_SIMPLEX: data.SetDuplex( wxDUPLEX_SIMPLEX ); break; } } else data.SetDuplex( wxDUPLEX_SIMPLEX ); //// Quality if (devMode->dmFields & DM_PRINTQUALITY) { switch (devMode->dmPrintQuality) { case DMRES_MEDIUM: data.SetQuality( wxPRINT_QUALITY_MEDIUM ); break; case DMRES_LOW: data.SetQuality( wxPRINT_QUALITY_LOW ); break; case DMRES_DRAFT: data.SetQuality( wxPRINT_QUALITY_DRAFT ); break; case DMRES_HIGH: data.SetQuality( wxPRINT_QUALITY_HIGH ); break; default: { // TODO: if the printer fills in the resolution in DPI, how // will the application know if it's high, low, draft etc.?? // wxFAIL_MSG("Warning: DM_PRINTQUALITY was not one of the standard values."); data.SetQuality( devMode->dmPrintQuality ); break; } } } else data.SetQuality( wxPRINT_QUALITY_HIGH ); if (devMode->dmDriverExtra > 0) data.SetPrivData( (char *)devMode+devMode->dmSize, devMode->dmDriverExtra ); else data.SetPrivData( NULL, 0 ); GlobalUnlock(hDevMode); } if (hDevNames) { LPDEVNAMES lpDevNames = (LPDEVNAMES)GlobalLock(hDevNames); if (lpDevNames) { // TODO: Unicode-ification // Get the port name // port is obsolete in WIN32 // m_printData.SetPortName((LPSTR)lpDevNames + lpDevNames->wDriverOffset); // Get the printer name wxString printerName = (LPTSTR)lpDevNames + lpDevNames->wDeviceOffset; // Not sure if we should check for this mismatch // wxASSERT_MSG( (m_printerName.empty() || (devName == m_printerName)), "Printer name obtained from DEVMODE and DEVNAMES were different!"); if (!printerName.empty()) data.SetPrinterName( printerName ); GlobalUnlock(hDevNames); } } return true; }
bool wxMacCarbonPrintData::TransferTo( wxPrintData &data ) { OSStatus err = noErr ; UInt32 copies ; err = PMGetCopies( m_macPrintSettings , &copies ) ; if ( err == noErr ) data.SetNoCopies( copies ) ; PMOrientation orientation ; err = PMGetOrientation( m_macPageFormat , &orientation ) ; if ( err == noErr ) { if ( orientation == kPMPortrait || orientation == kPMReversePortrait ) { data.SetOrientation( wxPORTRAIT ); data.SetOrientationReversed( orientation == kPMReversePortrait ); } else { data.SetOrientation( wxLANDSCAPE ); data.SetOrientationReversed( orientation == kPMReverseLandscape ); } } // collate cannot be set #if 0 { wxMacCFStringHolder name ; PMPrinter printer ; PMSessionGetCurrentPrinter( m_macPrintSession , &printer ) ; m_printerName = name.AsString() ; } #endif #ifndef __LP64__ PMColorMode color ; err = PMGetColorMode( m_macPrintSettings, &color ) ; if ( err == noErr ) data.SetColour( !(color == kPMBlackAndWhite) ) ; #endif #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 if ( &PMGetDuplex!=NULL ) { PMDuplexMode mode = 0 ; PMGetDuplex( (PMPrintSettings) m_macPrintSettings, &mode ) ; switch( mode ) { case kPMDuplexNoTumble : data.SetDuplex(wxDUPLEX_HORIZONTAL); break ; case kPMDuplexTumble : data.SetDuplex(wxDUPLEX_VERTICAL); break ; case kPMDuplexNone : default : data.SetDuplex(wxDUPLEX_SIMPLEX); break ; } } #endif // PMQualityMode not yet accessible via API PMPaper paper ; PMGetPageFormatPaper( m_macPageFormat, &paper ); PMRect rPaper; err = PMGetUnadjustedPaperRect( m_macPageFormat, &rPaper); if ( err == noErr ) { wxSize sz((int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) , (int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 )); data.SetPaperSize(sz); wxPaperSize id = wxThePrintPaperDatabase->GetSize(wxSize(sz.x* 10, sz.y * 10)); if (id != wxPAPER_NONE) { data.SetPaperId(id); } } return true ; }
bool wxOSXPrintData::TransferTo( wxPrintData &data ) { OSStatus err = noErr ; #if wxOSX_USE_COCOA UpdateToPMState(); #endif UInt32 copies ; err = PMGetCopies( m_macPrintSettings , &copies ) ; if ( err == noErr ) data.SetNoCopies( copies ) ; PMOrientation orientation ; err = PMGetOrientation( m_macPageFormat , &orientation ) ; if ( err == noErr ) { if ( orientation == kPMPortrait || orientation == kPMReversePortrait ) { data.SetOrientation( wxPORTRAIT ); data.SetOrientationReversed( orientation == kPMReversePortrait ); } else { data.SetOrientation( wxLANDSCAPE ); data.SetOrientationReversed( orientation == kPMReverseLandscape ); } } Boolean collate; 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 ) ; switch( mode ) { case kPMDuplexNoTumble : data.SetDuplex(wxDUPLEX_HORIZONTAL); break ; case kPMDuplexTumble : data.SetDuplex(wxDUPLEX_VERTICAL); break ; case kPMDuplexNone : default : data.SetDuplex(wxDUPLEX_SIMPLEX); break ; } // PMQualityMode not yet accessible via API 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); } return true ; }