diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-22 09:04:29 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-22 09:25:54 +0200 |
commit | aed5a7168354c6ae47687d20b4bd3f0adcc14f8e (patch) | |
tree | d2060479a7c12fdba8c1955e5d363754feffabb8 /src/printsupport | |
parent | d3d10cf23d61f4a011f1a7e9abdee1a92717e80f (diff) | |
parent | 628fa13ea4d6ff0e2e2ee76c9adfc78676de3c59 (diff) |
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
src/corelib/statemachine/qstatemachine.cpp
src/corelib/statemachine/qstatemachine_p.h
src/gui/painting/qdrawhelper.cpp
src/plugins/platforms/xcb/qxcbnativeinterface.cpp
src/plugins/platforms/xcb/qxcbwindow.cpp
src/plugins/platforms/xcb/qxcbwindow.h
src/testlib/qtestblacklist.cpp
src/tools/qdoc/node.cpp
src/tools/qdoc/node.h
tests/auto/gui/painting/qcolor/tst_qcolor.cpp
Change-Id: I6c78b7b162001712d5774293f501b06b4ff32684
Diffstat (limited to 'src/printsupport')
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_win.cpp | 2 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintdialog_mac.mm | 13 | ||||
-rw-r--r-- | src/printsupport/kernel/qprintengine_win.cpp | 39 |
3 files changed, 20 insertions, 34 deletions
diff --git a/src/printsupport/dialogs/qpagesetupdialog_win.cpp b/src/printsupport/dialogs/qpagesetupdialog_win.cpp index afe0268e55..8d6fdbd6de 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_win.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_win.cpp @@ -94,7 +94,7 @@ int QPageSetupDialog::exec() parent = parent ? parent->window() : QApplication::activeWindow(); Q_ASSERT(!parent ||parent->testAttribute(Qt::WA_WState_Created)); - QWindow *parentWindow = parent->windowHandle(); + QWindow *parentWindow = parent ? parent->windowHandle() : 0; psd.hwndOwner = parentWindow ? (HWND)QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", parentWindow) : 0; psd.Flags = PSD_MARGINS; diff --git a/src/printsupport/dialogs/qprintdialog_mac.mm b/src/printsupport/dialogs/qprintdialog_mac.mm index f9644dfd8b..1655131de4 100644 --- a/src/printsupport/dialogs/qprintdialog_mac.mm +++ b/src/printsupport/dialogs/qprintdialog_mac.mm @@ -120,19 +120,22 @@ QT_USE_NAMESPACE if (dialog->maxPage() < dialog->toPage()) dialog->setFromTo(dialog->fromPage(), dialog->maxPage()); } - // Keep us in sync with file output - PMDestinationType dest; - // If the user selected print to file, the session has been - // changed behind our back and our d->ep->session object is a - // dangling pointer. Update it based on the "current" session + // Keep us in sync with chosen destination + PMDestinationType dest; PMSessionGetDestinationType(session, settings, &dest); if (dest == kPMDestinationFile) { + // QTBUG-38820 + // If user selected Print to File, leave OSX to generate the PDF, + // otherwise setting PdfFormat would prevent us showing dialog again. + // TODO Restore this when QTBUG-36112 is fixed. + /* QCFType<CFURLRef> file; PMSessionCopyDestinationLocation(session, settings, &file); UInt8 localFile[2048]; // Assuming there's a POSIX file system here. CFURLGetFileSystemRepresentation(file, true, localFile, sizeof(localFile)); printer->setOutputFileName(QString::fromUtf8(reinterpret_cast<const char *>(localFile))); + */ } else { PMPrinter macPrinter; PMSessionGetCurrentPrinter(session, &macPrinter); diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp index 910c6c1514..b377401ed9 100644 --- a/src/printsupport/kernel/qprintengine_win.cpp +++ b/src/printsupport/kernel/qprintengine_win.cpp @@ -69,7 +69,7 @@ extern QMarginsF qt_convertMargins(const QMarginsF &margins, QPageLayout::Unit f // #define QT_DEBUG_METRICS static void draw_text_item_win(const QPointF &_pos, const QTextItemInt &ti, HDC hdc, - bool convertToText, const QTransform &xform, const QPointF &topLeft); + const QTransform &xform, const QPointF &topLeft); QWin32PrintEngine::QWin32PrintEngine(QPrinter::PrinterMode mode) : QAlphaPaintEngine(*(new QWin32PrintEnginePrivate), @@ -309,27 +309,12 @@ void QWin32PrintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem return ; } - // We only want to convert the glyphs to text if the entire string is compatible with ASCII - // and if we actually have access to the chars. - bool convertToText = ti.chars != 0; - for (int i=0; i < ti.num_chars; ++i) { - if (ti.chars[i].unicode() >= 0x80) { - convertToText = false; - break; - } - - if (ti.logClusters[i] != i) { - convertToText = false; - break; - } - } - COLORREF cf = RGB(qRed(brushColor), qGreen(brushColor), qBlue(brushColor)); SelectObject(d->hdc, CreateSolidBrush(cf)); SelectObject(d->hdc, CreatePen(PS_SOLID, 1, cf)); SetTextColor(d->hdc, cf); - draw_text_item_win(p, ti, d->hdc, convertToText, d->matrix, QPointF(0.0, 0.0)); + draw_text_item_win(p, ti, d->hdc, d->matrix, QPointF(0.0, 0.0)); DeleteObject(SelectObject(d->hdc,GetStockObject(HOLLOW_BRUSH))); DeleteObject(SelectObject(d->hdc,GetStockObject(BLACK_PEN))); } @@ -399,6 +384,9 @@ int QWin32PrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const case QPaintDevice::PdmDepth: val = GetDeviceCaps(d->hdc, PLANES); break; + case QPaintDevice::PdmDevicePixelRatio: + val = 1; + break; default: qWarning("QPrinter::metric: Invalid metric command"); return 0; @@ -1682,7 +1670,7 @@ void QWin32PrintEnginePrivate::debugMetrics() const } static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC hdc, - bool convertToText, const QTransform &xform, const QPointF &topLeft) + const QTransform &xform, const QPointF &topLeft) { QPointF baseline_pos = xform.inverted().map(xform.map(pos) - topLeft); @@ -1692,24 +1680,20 @@ static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC h const bool has_kerning = ti.f && ti.f->kerning(); HFONT hfont = 0; - bool ttf = false; if (ti.fontEngine->type() == QFontEngine::Win) { const QVariantMap userData = ti.fontEngine->userData().toMap(); const QVariant hfontV = userData.value(QStringLiteral("hFont")); const QVariant ttfV = userData.value(QStringLiteral("trueType")); - if (ttfV.type() == QVariant::Bool && hfontV.canConvert<HFONT>()) { + if (ttfV.toBool() && hfontV.canConvert<HFONT>()) hfont = hfontV.value<HFONT>(); - ttf = ttfV.toBool(); - } } if (!hfont) hfont = (HFONT)GetStockObject(ANSI_VAR_FONT); HGDIOBJ old_font = SelectObject(hdc, hfont); - unsigned int options = (ttf && !convertToText) ? ETO_GLYPH_INDEX : 0; - wchar_t *convertedGlyphs = (wchar_t *)ti.chars; + unsigned int options = ETO_GLYPH_INDEX; QGlyphLayout glyphs = ti.glyphs; bool fast = !has_kerning && !(ti.flags & QTextItem::RightToLeft); @@ -1743,7 +1727,7 @@ static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC h ExtTextOut(hdc, qRound(baseline_pos.x() + glyphs.offsets[0].x.toReal()), qRound(baseline_pos.y() + glyphs.offsets[0].y.toReal()), - options, 0, convertToText ? convertedGlyphs : g.data(), glyphs.numGlyphs, 0); + options, 0, g.constData(), glyphs.numGlyphs, 0); } else { QVarLengthArray<QFixedPoint> positions; QVarLengthArray<glyph_t> _glyphs; @@ -1756,7 +1740,6 @@ static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC h return; } - convertToText = convertToText && glyphs.numGlyphs == _glyphs.size(); bool outputEntireItem = _glyphs.size() > 0; if (outputEntireItem) { @@ -1772,7 +1755,7 @@ static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC h glyphDistances[(_glyphs.size() - 1) * 2 + 1] = 0; g[_glyphs.size() - 1] = _glyphs[_glyphs.size() - 1]; ExtTextOut(hdc, qRound(positions[0].x), qRound(positions[0].y), options, 0, - convertToText ? convertedGlyphs : g.data(), _glyphs.size(), + g.constData(), _glyphs.size(), glyphDistances.data()); } else { int i = 0; @@ -1781,7 +1764,7 @@ static void draw_text_item_win(const QPointF &pos, const QTextItemInt &ti, HDC h ExtTextOut(hdc, qRound(positions[i].x), qRound(positions[i].y), options, 0, - convertToText ? convertedGlyphs + i : &g, 1, 0); + &g, 1, 0); ++i; } } |