From 7dde92d7d1639a1ea8bee39d5250bc58102dc4c8 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 5 Mar 2012 14:40:00 +0100 Subject: Don't keep PMPrint* state separate from NSPrintInfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we need to use PMPrintSession, PMPrintSettings, and PMPageLayout, get these directly from the NSPrintInfo when needed. This avoids us needing to keep the settings in sync. The native dialogs can then only rely on getting a pointer to NSPrintInfo (to be done in a future commit). Change-Id: I4720284dcf999e454f86766b4291fbda7bf3c537 Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/cocoa/qprintengine_mac.mm | 82 ++++++++++++------------- 1 file changed, 38 insertions(+), 44 deletions(-) (limited to 'src/plugins/platforms/cocoa/qprintengine_mac.mm') diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/plugins/platforms/cocoa/qprintengine_mac.mm index 51b1de6e58..e432b12e67 100644 --- a/src/plugins/platforms/cocoa/qprintengine_mac.mm +++ b/src/plugins/platforms/cocoa/qprintengine_mac.mm @@ -73,8 +73,8 @@ bool QMacPrintEngine::begin(QPaintDevice *dev) d->paintEngine->begin(dev); Q_ASSERT_X(d->state == QPrinter::Idle, "QMacPrintEngine", "printer already active"); - if (PMSessionValidatePrintSettings(d->session, d->settings, kPMDontWantBoolean) != noErr - || PMSessionValidatePageFormat(d->session, d->format, kPMDontWantBoolean) != noErr) { + if (PMSessionValidatePrintSettings(d->session(), d->settings(), kPMDontWantBoolean) != noErr + || PMSessionValidatePageFormat(d->session(), d->format(), kPMDontWantBoolean) != noErr) { d->state = QPrinter::Error; return false; } @@ -84,14 +84,14 @@ bool QMacPrintEngine::begin(QPaintDevice *dev) QCFString(d->outputFilename), kCFURLPOSIXPathStyle, false); - if (PMSessionSetDestination(d->session, d->settings, kPMDestinationFile, + if (PMSessionSetDestination(d->session(), d->settings(), kPMDestinationFile, kPMDocumentFormatPDF, outFile) != noErr) { qWarning("QMacPrintEngine::begin: Problem setting file [%s]", d->outputFilename.toUtf8().constData()); return false; } } - OSStatus status = PMSessionBeginCGDocumentNoDialog(d->session, d->settings, d->format); + OSStatus status = PMSessionBeginCGDocumentNoDialog(d->session(), d->settings(), d->format()); if (status != noErr) { d->state = QPrinter::Error; return false; @@ -145,8 +145,8 @@ void QMacPrintEnginePrivate::setPaperSize(QPrinter::PaperSize ps) QCFType formats; PMPrinter printer; - if (PMSessionGetCurrentPrinter(session, &printer) == noErr - && PMSessionCreatePageFormatList(session, printer, &formats) == noErr) { + if (PMSessionGetCurrentPrinter(session(), &printer) == noErr + && PMSessionCreatePageFormatList(session(), printer, &formats) == noErr) { CFIndex total = CFArrayGetCount(formats); PMPageFormat tmp; PMRect paper; @@ -157,10 +157,10 @@ void QMacPrintEnginePrivate::setPaperSize(QPrinter::PaperSize ps) int wMM = int((paper.right - paper.left) / 72 * 25.4 + 0.5); int hMM = int((paper.bottom - paper.top) / 72 * 25.4 + 0.5); if (newSize.width() == wMM && newSize.height() == hMM) { - PMCopyPageFormat(tmp, format); + PMCopyPageFormat(tmp, format()); // reset the orientation and resolution as they are lost in the copy. q->setProperty(QPrintEngine::PPK_Orientation, orient); - if (PMSessionValidatePageFormat(session, format, kPMDontWantBoolean) != noErr) { + if (PMSessionValidatePageFormat(session(), format(), kPMDontWantBoolean) != noErr) { // Don't know, warn for the moment. qWarning("QMacPrintEngine, problem setting format and resolution for this page size"); } @@ -175,19 +175,19 @@ QPrinter::PaperSize QMacPrintEnginePrivate::paperSize() const if (hasCustomPaperSize) return QPrinter::Custom; PMRect paper; - PMGetUnadjustedPaperRect(format, &paper); + PMGetUnadjustedPaperRect(format(), &paper); QSizeF sizef((paper.right - paper.left) / 72.0 * 25.4, (paper.bottom - paper.top) / 72.0 * 25.4); return QPlatformPrinterSupport::convertQSizeFToPaperSize(sizef); } QList QMacPrintEnginePrivate::supportedResolutions() const { - Q_ASSERT_X(session, "QMacPrinterEngine::supportedResolutions", + Q_ASSERT_X(printInfo, "QMacPrinterEngine::supportedResolutions", "must have a valid printer session"); UInt32 resCount; QList resolutions; PMPrinter printer; - if (PMSessionGetCurrentPrinter(session, &printer) == noErr) { + if (PMSessionGetCurrentPrinter(session(), &printer) == noErr) { PMResolution res; OSStatus status = PMPrinterGetPrinterResolutionCount(printer, &resCount); if (status == kPMNotImplemented) { @@ -228,8 +228,7 @@ bool QMacPrintEngine::newPage() { Q_D(QMacPrintEngine); Q_ASSERT(d->state == QPrinter::Active); - OSStatus err = - PMSessionEndPageNoDialog(d->session); + OSStatus err = PMSessionEndPageNoDialog(d->session()); if (err != noErr) { if (err == kPMCancel) { // User canceled, we need to abort! @@ -302,7 +301,7 @@ int QMacPrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const val -= qRound(margins.at(0).toDouble() + margins.at(2).toDouble()); } } else { - val = qt_get_PDMWidth(d->format, property(PPK_FullPage).toBool(), d->resolution); + val = qt_get_PDMWidth(d->format(), property(PPK_FullPage).toBool(), d->resolution); } break; case QPaintDevice::PdmHeight: @@ -315,7 +314,7 @@ int QMacPrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const val -= qRound(margins.at(1).toDouble() + margins.at(3).toDouble()); } } else { - val = qt_get_PDMHeight(d->format, property(PPK_FullPage).toBool(), d->resolution); + val = qt_get_PDMHeight(d->format(), property(PPK_FullPage).toBool(), d->resolution); } break; case QPaintDevice::PdmWidthMM: @@ -329,9 +328,9 @@ int QMacPrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const case QPaintDevice::PdmPhysicalDpiX: case QPaintDevice::PdmPhysicalDpiY: { PMPrinter printer; - if (PMSessionGetCurrentPrinter(d->session, &printer) == noErr) { + if (PMSessionGetCurrentPrinter(d->session(), &printer) == noErr) { PMResolution resolution; - PMPrinterGetOutputResolution(printer, d->settings, &resolution); + PMPrinterGetOutputResolution(printer, d->settings(), &resolution); val = (int)resolution.vRes; break; } @@ -371,10 +370,9 @@ void QMacPrintEnginePrivate::initialize() QCocoaAutoReleasePool pool; printInfo = [[NSPrintInfo alloc] initWithDictionary:[NSDictionary dictionary]]; - session = static_cast([printInfo PMPrintSession]); PMPrinter printer; - if (session && PMSessionGetCurrentPrinter(session, &printer) == noErr) { + if (printInfo && PMSessionGetCurrentPrinter(session(), &printer) == noErr) { QList resolutions = supportedResolutions(); if (!resolutions.isEmpty() && mode != QPrinter::ScreenResolution) { if (resolutions.count() > 1 && mode == QPrinter::HighResolution) { @@ -395,9 +393,6 @@ void QMacPrintEnginePrivate::initialize() } } - settings = static_cast([printInfo PMPrintSettings]); - format = static_cast([printInfo PMPageFormat]); - QHash::const_iterator propC; for (propC = valueCache.constBegin(); propC != valueCache.constEnd(); propC++) { q->setProperty(propC.key(), propC.value()); @@ -406,11 +401,10 @@ void QMacPrintEnginePrivate::initialize() void QMacPrintEnginePrivate::releaseSession() { - PMSessionEndPageNoDialog(session); - PMSessionEndDocumentNoDialog(session); + PMSessionEndPageNoDialog(session()); + PMSessionEndDocumentNoDialog(session()); [printInfo release]; printInfo = 0; - session = 0; } bool QMacPrintEnginePrivate::newPage_helper() @@ -418,7 +412,7 @@ bool QMacPrintEnginePrivate::newPage_helper() Q_Q(QMacPrintEngine); Q_ASSERT(state == QPrinter::Active); - if (PMSessionError(session) != noErr) { + if (PMSessionError(session()) != noErr) { q->abort(); return false; } @@ -430,7 +424,7 @@ bool QMacPrintEnginePrivate::newPage_helper() while (cgEngine->d_func()->stackCount > 0) cgEngine->d_func()->restoreGraphicsState(); - OSStatus status = PMSessionBeginPageNoDialog(session, format, 0); + OSStatus status = PMSessionBeginPageNoDialog(session(), format(), 0); if (status != noErr) { state = QPrinter::Error; return false; @@ -441,7 +435,7 @@ bool QMacPrintEnginePrivate::newPage_helper() CGContextRef cgContext; OSStatus err = noErr; - err = PMSessionGetCGGraphicsContext(session, &cgContext); + err = PMSessionGetCGGraphicsContext(session(), &cgContext); if (err != noErr) { qWarning("QMacPrintEngine::newPage: Cannot retrieve CoreGraphics context: %ld", long(err)); state = QPrinter::Error; @@ -550,7 +544,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va Q_D(QMacPrintEngine); d->valueCache.insert(key, value); - if (!d->session) + if (!d->printInfo) return; switch (key) { @@ -571,7 +565,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va case PPK_Resolution: { PMPrinter printer; UInt32 count; - if (PMSessionGetCurrentPrinter(d->session, &printer) != noErr) + if (PMSessionGetCurrentPrinter(d->session(), &printer) != noErr) break; if (PMPrinterGetPrinterResolutionCount(printer, &count) != noErr) break; @@ -593,7 +587,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va } } } - PMSessionValidatePageFormat(d->session, d->format, kPMDontWantBoolean); + PMSessionValidatePageFormat(d->session(), d->format(), kPMDontWantBoolean); break; } @@ -602,7 +596,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va break; case PPK_CopyCount: // fallthrough case PPK_NumberOfCopies: - PMSetCopies(d->settings, value.toInt(), false); + PMSetCopies(d->settings(), value.toInt(), false); break; case PPK_Orientation: { if (d->state == QPrinter::Active) { @@ -613,8 +607,8 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va d->customSize = QSizeF(d->customSize.height(), d->customSize.width()); d->orient = newOrientation; PMOrientation o = d->orient == QPrinter::Portrait ? kPMPortrait : kPMLandscape; - PMSetOrientation(d->format, o, false); - PMSessionValidatePageFormat(d->session, d->format, kPMDontWantBoolean); + PMSetOrientation(d->format(), o, false); + PMSessionValidatePageFormat(d->session(), d->format(), kPMDontWantBoolean); } break; } case PPK_OutputFileName: @@ -634,7 +628,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va PMPrinter printer = static_cast(const_cast(CFArrayGetValueAtIndex(printerList, i))); QString name = QCFString::toQString(PMPrinterGetName(printer)); if (name == value.toString()) { - status = PMSessionSetCurrentPMPrinter(d->session, printer); + status = PMSessionSetCurrentPMPrinter(d->session(), printer); printerNameSet = true; break; } @@ -653,7 +647,7 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va case PPK_CustomPaperSize: { PMOrientation orientation; - PMGetOrientation(d->format, &orientation); + PMGetOrientation(d->format(), &orientation); d->hasCustomPaperSize = true; d->customSize = value.toSizeF(); if (orientation != kPMPortrait) @@ -682,7 +676,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const Q_D(const QMacPrintEngine); QVariant ret; - if (!d->session && d->valueCache.contains(key)) + if (!d->printInfo && d->valueCache.contains(key)) return *d->valueCache.find(key); switch (key) { @@ -704,7 +698,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const break; case PPK_CopyCount: { UInt32 copies = 1; - PMGetCopies(d->settings, &copies); + PMGetCopies(d->settings(), &copies); ret = (uint) copies; break; } @@ -713,7 +707,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const break; case PPK_Orientation: PMOrientation orientation; - PMGetOrientation(d->format, &orientation); + PMGetOrientation(d->format(), &orientation); ret = orientation == kPMPortrait ? QPrinter::Portrait : QPrinter::Landscape; break; case PPK_OutputFileName: @@ -741,8 +735,8 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const -qRound(margins.at(2).toDouble() * hRatio), -qRound(margins.at(3).toDouble()) * vRatio); } - } else if (PMGetAdjustedPageRect(d->format, ¯ect) == noErr - && PMGetAdjustedPaperRect(d->format, &macpaper) == noErr) + } else if (PMGetAdjustedPageRect(d->format(), ¯ect) == noErr + && PMGetAdjustedPaperRect(d->format(), &macpaper) == noErr) { if (d->fullPage || d->hasCustomPageMargins) { r.setCoords(int(macpaper.left * hRatio), int(macpaper.top * vRatio), @@ -770,7 +764,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const qreal vRatio = d->resolution.vRes / 72; if (d->hasCustomPaperSize) { r = QRect(0, 0, qRound(d->customSize.width() * hRatio), qRound(d->customSize.height() * vRatio)); - } else if (PMGetAdjustedPaperRect(d->format, ¯ect) == noErr) { + } else if (PMGetAdjustedPaperRect(d->format(), ¯ect) == noErr) { r.setCoords(int(macrect.left * hRatio), int(macrect.top * vRatio), int(macrect.right * hRatio), int(macrect.bottom * vRatio)); r.translate(-r.x(), -r.y()); @@ -779,7 +773,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const break; } case PPK_PrinterName: { PMPrinter printer; - OSStatus status = PMSessionGetCurrentPrinter(d->session, &printer); + OSStatus status = PMSessionGetCurrentPrinter(d->session(), &printer); if (status != noErr) qWarning("QMacPrintEngine::printerName: Failed getting current PMPrinter: %ld", long(status)); if (printer) @@ -804,7 +798,7 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const } else { PMPaperMargins paperMargins; PMPaper paper; - PMGetPageFormatPaper(d->format, &paper); + PMGetPageFormatPaper(d->format(), &paper); PMPaperGetMargins(paper, &paperMargins); margins << paperMargins.left << paperMargins.top << paperMargins.right << paperMargins.bottom; -- cgit v1.2.3