summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2015-02-16 13:02:17 +0400
committerKonstantin Ritt <ritt.ks@gmail.com>2015-03-20 13:44:43 +0000
commita2ebd502d4280dff17f9afe8f910916b5a3b508b (patch)
treee963a07b0187e26fb1b05d27c6116dbfc84974f7 /src/plugins/platforms
parent4d54fe8d02d57090d772f50dfc1567783d320b5c (diff)
[QWindowsFontDatabase] Move code around to improve readability
Keep DirectWrite initialization code in a single place and fallback to GDI implementation if DirectWrite initialization has failed. Change-Id: I2da185dbc073c58a7ba47bae09957ecac877d712 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp74
1 files changed, 30 insertions, 44 deletions
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index 5a812c32f4..d5708e4f9c 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -1682,13 +1682,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
int dpi,
const QSharedPointer<QWindowsFontEngineData> &data)
{
-#if !defined(QT_NO_DIRECTWRITE)
- bool useDirectWrite = (request.hintingPreference == QFont::PreferNoHinting)
- || (request.hintingPreference == QFont::PreferVerticalHinting);
- IDWriteFont *directWriteFont = 0;
-#else
- bool useDirectWrite = false;
-#endif
+ QFontEngine *fe = 0;
LOGFONT lf = fontDefToLOGFONT(request);
const bool preferClearTypeAA = lf.lfQuality == CLEARTYPE_QUALITY;
@@ -1712,29 +1706,40 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
}
#if !defined(QT_NO_DIRECTWRITE)
- if (useDirectWrite) {
- // Default to false for DirectWrite (and re-enable once/if everything turns out okay)
- useDirectWrite = false;
- if (initDirectWrite(data.data())) {
- const QString fam = QString::fromWCharArray(lf.lfFaceName);
- const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(fam);
- if (nameSubstitute != fam) {
- const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1);
- memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t));
- lf.lfFaceName[nameSubstituteLength] = 0;
+ bool useDirectWrite = (request.hintingPreference == QFont::PreferNoHinting)
+ || (request.hintingPreference == QFont::PreferVerticalHinting);
+ if (useDirectWrite && initDirectWrite(data.data())) {
+ const QString fam = QString::fromWCharArray(lf.lfFaceName);
+ const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(fam);
+ if (nameSubstitute != fam) {
+ const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1);
+ memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t));
+ lf.lfFaceName[nameSubstituteLength] = 0;
+ }
+
+ IDWriteFont *directWriteFont = 0;
+ HRESULT hr = data->directWriteGdiInterop->CreateFontFromLOGFONT(&lf, &directWriteFont);
+ if (FAILED(hr)) {
+ qErrnoWarning("%s: CreateFontFromLOGFONT failed", __FUNCTION__);
+ } else {
+ IDWriteFontFace *directWriteFontFace = NULL;
+ hr = directWriteFont->CreateFontFace(&directWriteFontFace);
+ if (FAILED(hr)) {
+ qErrnoWarning("%s: CreateFontFace failed", __FUNCTION__);
+ } else {
+ QWindowsFontEngineDirectWrite *fedw = new QWindowsFontEngineDirectWrite(directWriteFontFace,
+ request.pixelSize,
+ data);
+ fedw->initFontInfo(request, dpi, directWriteFont);
+ fe = fedw;
}
- HRESULT hr = data->directWriteGdiInterop->CreateFontFromLOGFONT(&lf, &directWriteFont);
- if (FAILED(hr))
- qErrnoWarning("%s: CreateFontFromLOGFONT failed", __FUNCTION__);
- else
- useDirectWrite = true;
+ directWriteFont->Release();
}
}
-#endif
+#endif // QT_NO_DIRECTWRITE
- QFontEngine *fe = 0;
- if (!useDirectWrite) {
+ if (!fe) {
QWindowsFontEngine *few = new QWindowsFontEngine(request.family, lf, data);
if (preferClearTypeAA)
few->glyphFormat = QFontEngine::Format_A32;
@@ -1742,25 +1747,6 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
fe = few;
}
-#if !defined(QT_NO_DIRECTWRITE)
- else {
- IDWriteFontFace *directWriteFontFace = NULL;
- HRESULT hr = directWriteFont->CreateFontFace(&directWriteFontFace);
- if (SUCCEEDED(hr)) {
- QWindowsFontEngineDirectWrite *fedw = new QWindowsFontEngineDirectWrite(directWriteFontFace,
- request.pixelSize,
- data);
- fedw->initFontInfo(request, dpi, directWriteFont);
- fe = fedw;
- } else {
- qErrnoWarning("%s: CreateFontFace failed", __FUNCTION__);
- }
-
- directWriteFont->Release();
- }
-
-#endif
-
return fe;
}