void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) { if ( m_err ) return ; wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); wxOSXPrintData *native = (wxOSXPrintData*) impl->GetPrintData().GetNativeData() ; m_err = PMSessionEndPageNoDialog(native->GetPrintSession()); if ( m_err != noErr ) { PMSessionEndDocumentNoDialog(native->GetPrintSession()); } // the cg context we got when starting the page isn't valid anymore, so replace it impl->SetGraphicsContext( wxGraphicsContext::Create() ); }
void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) { if ( m_err ) return ; wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); wxOSXPrintData *native = (wxOSXPrintData*) impl->GetPrintData().GetNativeData() ; m_err = PMSessionBeginPageNoDialog(native->GetPrintSession(), native->GetPageFormat(), NULL); CGContextRef pageContext; if ( m_err == noErr ) { m_err = PMSessionGetCGGraphicsContext(native->GetPrintSession(), &pageContext ); } if ( m_err != noErr ) { PMSessionEndPageNoDialog(native->GetPrintSession()); PMSessionEndDocumentNoDialog(native->GetPrintSession()); } else { PMRect paperRect ; m_err = PMGetAdjustedPaperRect( native->GetPageFormat() , &paperRect ) ; // make sure (0,0) is at the upper left of the printable area (wx conventions) // Core Graphics initially has the lower left of the paper as 0,0 if ( !m_err ) CGContextTranslateCTM( pageContext , (CGFloat) -paperRect.left , (CGFloat) paperRect.bottom ) ; // since this is a non-critical error, we set the flag back m_err = noErr ; // Leopard deprecated PMSetResolution() which will not be available in 64 bit mode, so we avoid using it. // To set the proper drawing resolution, the docs suggest the use of CGContextScaleCTM(), so here we go; as a // consequence though, PMGetAdjustedPaperRect() and PMGetAdjustedPageRect() return unscaled rects, so we // have to manually scale them later. CGContextScaleCTM( pageContext, 72.0 / (double)m_ppi.x, -72.0 / (double)m_ppi.y); impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) ); } }
bool QMacPrintEngine::newPage() { Q_D(QMacPrintEngine); Q_ASSERT(d->state == QPrinter::Active); OSStatus err = d->shouldSuppressStatus() ? PMSessionEndPageNoDialog(d->session) : PMSessionEndPage(d->session); if (err != noErr) { if (err == kPMCancel) { // User canceled, we need to abort! abort(); } else { // Not sure what the problem is... qWarning("QMacPrintEngine::newPage: Cannot end current page. %ld", long(err)); d->state = QPrinter::Error; } return false; } return d->newPage_helper(); }
bool QMacPrintEngine::end() { Q_D(QMacPrintEngine); if (d->state == QPrinter::Aborted) return true; // I was just here a function call ago :) if(d->paintEngine->type() == QPaintEngine::CoreGraphics) static_cast<QCoreGraphicsPaintEngine*>(d->paintEngine)->d_func()->hd = 0; d->paintEngine->end(); if (d->state != QPrinter::Idle) { if (d->shouldSuppressStatus()) { PMSessionEndPageNoDialog(d->session); PMSessionEndDocumentNoDialog(d->session); } else { PMSessionEndPage(d->session); PMSessionEndDocument(d->session); } PMRelease(d->session); d->session = 0; } d->state = QPrinter::Idle; return true; }