summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2014-03-27 13:57:36 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-31 17:28:00 +0200
commit4a46b15514368a99295d1ca9a94927d8d6cf6cd8 (patch)
treed0b4878abb1bc992d83555b219df759e177535e6 /src/plugins/platforms
parent5f19e2c8f314f2b9cb3498faf782922a354c9c4d (diff)
Make QWindowsMultiFontEngine support deferred fallback families query
This finishes 800232e1d3ebfbac28d07014a3c646ea00fcf6ad, which encovered a tricky issue in QFontEngineMultiQPA::createMultiFontEngine(). Task-number: QTBUG-37836 Change-Id: I6d432e09e755f5d9ded09752c4c092f4857ad224 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp3
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp29
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.h10
3 files changed, 9 insertions, 33 deletions
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index 8f9ddc2168..1432dfdcd9 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -1040,8 +1040,7 @@ QWindowsFontDatabase::~QWindowsFontDatabase()
QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script)
{
- Q_UNUSED(script)
- return new QWindowsMultiFontEngine(fontEngine, QStringList());
+ return new QWindowsMultiFontEngine(fontEngine, script);
}
QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle)
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp
index c3774064e3..4f3a007bd7 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp
@@ -1278,35 +1278,14 @@ void QWindowsFontEngine::initFontInfo(const QFontDef &request,
Will probably be superseded by a common Free Type font engine in Qt 5.X.
*/
-
-QWindowsMultiFontEngine::QWindowsMultiFontEngine(QFontEngine *first, const QStringList &fallbacks)
- : QFontEngineMulti(fallbacks.size() + 1),
- fallbackFamilies(fallbacks)
-{
- engines[0] = first;
- first->ref.ref();
- fontDef = engines[0]->fontDef;
- cache_cost = first->cache_cost;
-}
-
-void QWindowsMultiFontEngine::setFallbackFamiliesList(const QStringList &fallbacks)
+QWindowsMultiFontEngine::QWindowsMultiFontEngine(QFontEngine *fe, int script)
+ : QFontEngineMultiQPA(fe, script)
{
- // Original FontEngine to restore after the fill.
- QFontEngine *fe = engines[0];
- fallbackFamilies = fallbacks;
- if (!fallbackFamilies.isEmpty()) {
- engines.fill(0, fallbackFamilies.size() + 1);
- engines[0] = fe;
- } else {
- // Turns out we lied about having any fallback at all.
- fallbackFamilies << fe->fontDef.family;
- engines[1] = fe;
- fe->ref.ref();
- }
}
void QWindowsMultiFontEngine::loadEngine(int at)
{
+ ensureFallbackFamiliesQueried();
Q_ASSERT(at < engines.size());
Q_ASSERT(engines.at(at) == 0);
@@ -1329,7 +1308,7 @@ void QWindowsMultiFontEngine::loadEngine(int at)
data = fe->fontEngineData();
}
- const QString fam = fallbackFamilies.at(at-1);
+ const QString fam = fallbackFamilyAt(at - 1);
memcpy(lf.lfFaceName, fam.utf16(), sizeof(wchar_t) * qMin(fam.length() + 1, 32)); // 32 = Windows hard-coded
#ifndef QT_NO_DIRECTWRITE
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/plugins/platforms/windows/qwindowsfontengine.h
index 7d93484220..7a0803830c 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.h
+++ b/src/plugins/platforms/windows/qwindowsfontengine.h
@@ -53,7 +53,7 @@
// We mean it.
//
-#include <QtGui/private/qfontengine_p.h>
+#include <QtGui/private/qfontengine_qpa_p.h>
#include <QtGui/QImage>
#include <QtCore/QSharedPointer>
@@ -166,15 +166,13 @@ private:
mutable int designAdvancesSize;
};
-class QWindowsMultiFontEngine : public QFontEngineMulti
+
+class QWindowsMultiFontEngine : public QFontEngineMultiQPA
{
public:
- QWindowsMultiFontEngine(QFontEngine *first, const QStringList &fallbacks);
+ explicit QWindowsMultiFontEngine(QFontEngine *fe, int script);
- void setFallbackFamiliesList(const QStringList &fallbacks);
void loadEngine(int at);
-
- QStringList fallbackFamilies;
};
QT_END_NAMESPACE