summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-03-27 15:48:37 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-05 11:27:15 +0000
commitefb84b6189f9e98c6dd29c22f00ad760445196c2 (patch)
treef796d1d1f93b176c2a19ef5467ebdc765fad9eeb
parentb67b80b71516af71fec28732506c25ad338a84e7 (diff)
Copy stretch to multifont fontDef
If we do not the fontDef of the multifont will be the default 0. Task-number: QTBUG-59443 Change-Id: Ib223517975b2a57b2371e309d12cd8f918d30825 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-rw-r--r--src/gui/painting/qpdf.cpp2
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp2
-rw-r--r--tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp26
3 files changed, 30 insertions, 0 deletions
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index 7b53966f81..644999e00a 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -2556,6 +2556,7 @@ void QPdfEnginePrivate::drawTextItem(const QPointF &p, const QTextItemInt &ti)
qreal size = ti.fontEngine->fontDef.pixelSize;
int synthesized = ti.fontEngine->synthesized();
qreal stretch = synthesized & QFontEngine::SynthesizedStretch ? ti.fontEngine->fontDef.stretch/100. : 1.;
+ Q_ASSERT(stretch > qreal(0));
QTransform trans;
// Build text rendering matrix (Trm). We need it to map the text area to user
@@ -2632,6 +2633,7 @@ void QPdfEnginePrivate::drawTextItem(const QPointF &p, const QTextItemInt &ti)
return;
int synthesized = ti.fontEngine->synthesized();
qreal stretch = synthesized & QFontEngine::SynthesizedStretch ? ti.fontEngine->fontDef.stretch/100. : 1.;
+ Q_ASSERT(stretch > qreal(0));
*currentPage << "BT\n"
<< "/F" << font->object_id << size << "Tf "
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
index 08ebbc3be0..5af73a6f2b 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
@@ -1293,6 +1293,7 @@ QFontEngine *QWindowsMultiFontEngine::loadEngine(int at)
fedw->fontDef.style = fontEngine->fontDef.style;
fedw->fontDef.family = fam;
fedw->fontDef.hintingPreference = fontEngine->fontDef.hintingPreference;
+ fedw->fontDef.stretch = fontEngine->fontDef.stretch;
return fedw;
} else {
qErrnoWarning("%s: CreateFontFace failed", __FUNCTION__);
@@ -1310,6 +1311,7 @@ QFontEngine *QWindowsMultiFontEngine::loadEngine(int at)
fe->fontDef.style = fontEngine->fontDef.style;
fe->fontDef.family = fam;
fe->fontDef.hintingPreference = fontEngine->fontDef.hintingPreference;
+ fe->fontDef.stretch = fontEngine->fontDef.stretch;
return fe;
}
diff --git a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
index 00e00ecd6b..c1a8f7f0de 100644
--- a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
+++ b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
@@ -29,8 +29,11 @@
#include <QtTest/QtTest>
#include <QtGlobal>
#include <QtAlgorithms>
+#include <QtGui/QAbstractTextDocumentLayout>
#include <QtGui/QPageLayout>
#include <QtGui/QPdfWriter>
+#include <QtGui/QTextCursor>
+#include <QtGui/QTextDocument>
class tst_QPdfWriter : public QObject
{
@@ -40,6 +43,7 @@ private slots:
void basics();
void testPageMetrics_data();
void testPageMetrics();
+ void qtbug59443();
};
void tst_QPdfWriter::basics()
@@ -245,6 +249,28 @@ void tst_QPdfWriter::testPageMetrics()
QCOMPARE(writer.pageLayout().paintRect(QPageLayout::Millimeter), QRectF(leftMMf, topMMf, heightMMf - leftMMf - rightMMf, widthMMf - topMMf - bottomMMf));
}
+void tst_QPdfWriter::qtbug59443()
+{
+ // Do not crash or assert
+ QTemporaryFile file;
+ QVERIFY2(file.open(), qPrintable(file.errorString()));
+ QPdfWriter writer(file.fileName());
+ writer.setPageSize(QPdfWriter::A4);
+ QTextDocument doc;
+ doc.documentLayout()->setPaintDevice(&writer);
+
+ doc.setUndoRedoEnabled(false);
+ QTextCursor cursor(&doc);
+ QFont font = doc.defaultFont();
+ font.setFamily("Calibri");
+ font.setPointSize(8);
+ doc.setDefaultFont(font);
+
+ cursor.insertText(QString::fromStdWString(L"기초하며, 베어링제조업체와 타\n"));
+ doc.print(&writer);
+
+}
+
QTEST_MAIN(tst_QPdfWriter)
#include "tst_qpdfwriter.moc"