Line | Source Code | Coverage |
---|
1 | /**************************************************************************** | - |
2 | ** | - |
3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
4 | ** Contact: http://www.qt-project.org/legal | - |
5 | ** | - |
6 | ** This file is part of the QtGui module of the Qt Toolkit. | - |
7 | ** | - |
8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
9 | ** Commercial License Usage | - |
10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
11 | ** accordance with the commercial license agreement provided with the | - |
12 | ** Software or, alternatively, in accordance with the terms contained in | - |
13 | ** a written agreement between you and Digia. For licensing terms and | - |
14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
16 | ** | - |
17 | ** GNU Lesser General Public License Usage | - |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
19 | ** General Public License version 2.1 as published by the Free Software | - |
20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
21 | ** packaging of this file. Please review the following information to | - |
22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
24 | ** | - |
25 | ** In addition, as a special exception, Digia gives you certain additional | - |
26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
28 | ** | - |
29 | ** GNU General Public License Usage | - |
30 | ** Alternatively, this file may be used under the terms of the GNU | - |
31 | ** General Public License version 3.0 as published by the Free Software | - |
32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
33 | ** packaging of this file. Please review the following information to | - |
34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
36 | ** | - |
37 | ** | - |
38 | ** $QT_END_LICENSE$ | - |
39 | ** | - |
40 | ****************************************************************************/ | - |
41 | | - |
42 | #include "qlibraryinfo.h" | - |
43 | #include <QtCore/qsettings.h> | - |
44 | | - |
45 | #include "qfontengine_qpa_p.h" | - |
46 | #include "qplatformdefs.h" | - |
47 | | - |
48 | #include <QtGui/private/qguiapplication_p.h> | - |
49 | #include <qpa/qplatformfontdatabase.h> | - |
50 | | - |
51 | #include <QtCore/qmath.h> | - |
52 | | - |
53 | QT_BEGIN_NAMESPACE | - |
54 | | - |
55 | Q_GUI_EXPORT void qt_registerFont(const QString &familyName, const QString &stylename, | - |
56 | const QString &foundryname, int weight, | - |
57 | QFont::Style style, int stretch, bool antialiased, | - |
58 | bool scalable, int pixelSize, bool fixedPitch, | - |
59 | const QSupportedWritingSystems &writingSystems, void *handle) | - |
60 | { | - |
61 | QFontDatabasePrivate *d = privateDb(); executed (the execution status of this line is deduced): QFontDatabasePrivate *d = privateDb(); | - |
62 | // qDebug() << "Adding font" << familyName << weight << style << pixelSize << antialiased; | - |
63 | QtFontStyle::Key styleKey; executed (the execution status of this line is deduced): QtFontStyle::Key styleKey; | - |
64 | styleKey.style = style; executed (the execution status of this line is deduced): styleKey.style = style; | - |
65 | styleKey.weight = weight; executed (the execution status of this line is deduced): styleKey.weight = weight; | - |
66 | styleKey.stretch = stretch; executed (the execution status of this line is deduced): styleKey.stretch = stretch; | - |
67 | QtFontFamily *f = d->family(familyName, true); executed (the execution status of this line is deduced): QtFontFamily *f = d->family(familyName, true); | - |
68 | f->fixedPitch = fixedPitch; executed (the execution status of this line is deduced): f->fixedPitch = fixedPitch; | - |
69 | | - |
70 | for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) { evaluated: i < QFontDatabase::WritingSystemsCount yes Evaluation Count:1752156 | yes Evaluation Count:51534 |
| 51534-1752156 |
71 | if (writingSystems.supported(QFontDatabase::WritingSystem(i))) { evaluated: writingSystems.supported(QFontDatabase::WritingSystem(i)) yes Evaluation Count:89758 | yes Evaluation Count:1662398 |
| 89758-1662398 |
72 | f->writingSystems[i] = QtFontFamily::Supported; executed (the execution status of this line is deduced): f->writingSystems[i] = QtFontFamily::Supported; | - |
73 | } else { executed: } Execution Count:89758 | 89758 |
74 | f->writingSystems[i] = QtFontFamily::Unsupported; executed (the execution status of this line is deduced): f->writingSystems[i] = QtFontFamily::Unsupported; | - |
75 | } executed: } Execution Count:1662398 | 1662398 |
76 | } | - |
77 | | - |
78 | QtFontFoundry *foundry = f->foundry(foundryname, true); executed (the execution status of this line is deduced): QtFontFoundry *foundry = f->foundry(foundryname, true); | - |
79 | QtFontStyle *fontStyle = foundry->style(styleKey, stylename, true); executed (the execution status of this line is deduced): QtFontStyle *fontStyle = foundry->style(styleKey, stylename, true); | - |
80 | fontStyle->smoothScalable = scalable; executed (the execution status of this line is deduced): fontStyle->smoothScalable = scalable; | - |
81 | fontStyle->antialiased = antialiased; executed (the execution status of this line is deduced): fontStyle->antialiased = antialiased; | - |
82 | QtFontSize *size = fontStyle->pixelSize(pixelSize ? pixelSize : SMOOTH_SCALABLE, true); executed (the execution status of this line is deduced): QtFontSize *size = fontStyle->pixelSize(pixelSize ? pixelSize : 0xffff, true); | - |
83 | if (size->handle) { evaluated: size->handle yes Evaluation Count:16163 | yes Evaluation Count:35371 |
| 16163-35371 |
84 | QPlatformIntegration *integration = QGuiApplicationPrivate::platformIntegration(); executed (the execution status of this line is deduced): QPlatformIntegration *integration = QGuiApplicationPrivate::platformIntegration(); | - |
85 | if (integration) partially evaluated: integration yes Evaluation Count:16163 | no Evaluation Count:0 |
| 0-16163 |
86 | integration->fontDatabase()->releaseHandle(size->handle); executed: integration->fontDatabase()->releaseHandle(size->handle); Execution Count:16163 | 16163 |
87 | } executed: } Execution Count:16163 | 16163 |
88 | size->handle = handle; executed (the execution status of this line is deduced): size->handle = handle; | - |
89 | } executed: } Execution Count:51534 | 51534 |
90 | | - |
91 | Q_GUI_EXPORT void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias) | - |
92 | { | - |
93 | if (alias.isEmpty()) never evaluated: alias.isEmpty() | 0 |
94 | return; | 0 |
95 | | - |
96 | QFontDatabasePrivate *d = privateDb(); never executed (the execution status of this line is deduced): QFontDatabasePrivate *d = privateDb(); | - |
97 | QtFontFamily *f = d->family(familyName, false); never executed (the execution status of this line is deduced): QtFontFamily *f = d->family(familyName, false); | - |
98 | if (!f) | 0 |
99 | return; | 0 |
100 | | - |
101 | if (f->aliases.contains(alias, Qt::CaseInsensitive)) never evaluated: f->aliases.contains(alias, Qt::CaseInsensitive) | 0 |
102 | return; | 0 |
103 | | - |
104 | f->aliases.push_back(alias); never executed (the execution status of this line is deduced): f->aliases.push_back(alias); | - |
105 | } | 0 |
106 | | - |
107 | static QStringList fallbackFamilies(const QString &family, const QFont::Style &style, const QFont::StyleHint &styleHint, const QUnicodeTables::Script &script) | - |
108 | { | - |
109 | QStringList retList = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); executed (the execution status of this line is deduced): QStringList retList = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); | - |
110 | QFontDatabasePrivate *db = privateDb(); executed (the execution status of this line is deduced): QFontDatabasePrivate *db = privateDb(); | - |
111 | | - |
112 | QStringList::iterator i; executed (the execution status of this line is deduced): QStringList::iterator i; | - |
113 | for (i = retList.begin(); i != retList.end(); ++i) { evaluated: i != retList.end() yes Evaluation Count:51836 | yes Evaluation Count:593 |
| 593-51836 |
114 | bool contains = false; executed (the execution status of this line is deduced): bool contains = false; | - |
115 | for (int j = 0; j < db->count; j++) { partially evaluated: j < db->count yes Evaluation Count:2338652 | no Evaluation Count:0 |
| 0-2338652 |
116 | QtFontFamily *qtFamily = db->families[j]; executed (the execution status of this line is deduced): QtFontFamily *qtFamily = db->families[j]; | - |
117 | if (!(i->compare(qtFamily->name,Qt::CaseInsensitive))) { evaluated: !(i->compare(qtFamily->name,Qt::CaseInsensitive)) yes Evaluation Count:51836 | yes Evaluation Count:2286816 |
| 51836-2286816 |
118 | contains = true; executed (the execution status of this line is deduced): contains = true; | - |
119 | break; executed: break; Execution Count:51836 | 51836 |
120 | } | - |
121 | } executed: } Execution Count:2286816 | 2286816 |
122 | if (!contains) { partially evaluated: !contains no Evaluation Count:0 | yes Evaluation Count:51836 |
| 0-51836 |
123 | i = retList.erase(i); never executed (the execution status of this line is deduced): i = retList.erase(i); | - |
124 | i--; never executed (the execution status of this line is deduced): i--; | - |
125 | } | 0 |
126 | } executed: } Execution Count:51836 | 51836 |
127 | return retList; executed: return retList; Execution Count:593 | 593 |
128 | } | - |
129 | | - |
130 | static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt); | - |
131 | | - |
132 | static void initializeDb() | - |
133 | { | - |
134 | QFontDatabasePrivate *db = privateDb(); executed (the execution status of this line is deduced): QFontDatabasePrivate *db = privateDb(); | - |
135 | | - |
136 | // init by asking for the platformfontdb for the first time or after invalidation | - |
137 | if (!db->count) evaluated: !db->count yes Evaluation Count:151 | yes Evaluation Count:352 |
| 151-352 |
138 | QGuiApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase(); executed: QGuiApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase(); Execution Count:151 | 151 |
139 | | - |
140 | if (db->reregisterAppFonts) { evaluated: db->reregisterAppFonts yes Evaluation Count:41 | yes Evaluation Count:462 |
| 41-462 |
141 | for (int i = 0; i < db->applicationFonts.count(); i++) { evaluated: i < db->applicationFonts.count() yes Evaluation Count:41 | yes Evaluation Count:41 |
| 41 |
142 | if (!db->applicationFonts.at(i).families.isEmpty()) evaluated: !db->applicationFonts.at(i).families.isEmpty() yes Evaluation Count:21 | yes Evaluation Count:20 |
| 20-21 |
143 | registerFont(&db->applicationFonts[i]); executed: registerFont(&db->applicationFonts[i]); Execution Count:21 | 21 |
144 | } executed: } Execution Count:41 | 41 |
145 | db->reregisterAppFonts = false; executed (the execution status of this line is deduced): db->reregisterAppFonts = false; | - |
146 | } executed: } Execution Count:41 | 41 |
147 | } executed: } Execution Count:503 | 503 |
148 | | - |
149 | static inline void load(const QString & = QString(), int = -1) | - |
150 | { | - |
151 | // Only initialize the database if it has been cleared or not initialized yet | - |
152 | if (!privateDb()->count) evaluated: !privateDb()->count yes Evaluation Count:4 | yes Evaluation Count:4309 |
| 4-4309 |
153 | initializeDb(); executed: initializeDb(); Execution Count:4 | 4 |
154 | } executed: } Execution Count:4313 | 4313 |
155 | | - |
156 | static | - |
157 | QFontEngine *loadSingleEngine(int script, | - |
158 | const QFontDef &request, | - |
159 | QtFontFoundry *foundry, | - |
160 | QtFontStyle *style, QtFontSize *size) | - |
161 | { | - |
162 | Q_UNUSED(foundry); executed (the execution status of this line is deduced): (void)foundry;; | - |
163 | | - |
164 | Q_ASSERT(size); executed (the execution status of this line is deduced): qt_noop(); | - |
165 | QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); executed (the execution status of this line is deduced): QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); | - |
166 | int pixelSize = size->pixelSize; executed (the execution status of this line is deduced): int pixelSize = size->pixelSize; | - |
167 | if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE) partially evaluated: !pixelSize no Evaluation Count:0 | yes Evaluation Count:891 |
partially evaluated: style->smoothScalable yes Evaluation Count:891 | no Evaluation Count:0 |
partially evaluated: pixelSize == 0xffff yes Evaluation Count:891 | no Evaluation Count:0 |
| 0-891 |
168 | || pfdb->fontsAlwaysScalable()) { never evaluated: pfdb->fontsAlwaysScalable() | 0 |
169 | pixelSize = request.pixelSize; executed (the execution status of this line is deduced): pixelSize = request.pixelSize; | - |
170 | } executed: } Execution Count:891 | 891 |
171 | | - |
172 | QFontDef def = request; executed (the execution status of this line is deduced): QFontDef def = request; | - |
173 | def.pixelSize = pixelSize; executed (the execution status of this line is deduced): def.pixelSize = pixelSize; | - |
174 | | - |
175 | QFontCache::Key key(def,script); executed (the execution status of this line is deduced): QFontCache::Key key(def,script); | - |
176 | QFontEngine *engine = QFontCache::instance()->findEngine(key); executed (the execution status of this line is deduced): QFontEngine *engine = QFontCache::instance()->findEngine(key); | - |
177 | if (!engine) { partially evaluated: !engine yes Evaluation Count:891 | no Evaluation Count:0 |
| 0-891 |
178 | engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle); executed (the execution status of this line is deduced): engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle); | - |
179 | if (engine) { evaluated: engine yes Evaluation Count:626 | yes Evaluation Count:265 |
| 265-626 |
180 | QFontCache::Key key(def,script); executed (the execution status of this line is deduced): QFontCache::Key key(def,script); | - |
181 | QFontCache::instance()->instance()->insertEngine(key,engine); executed (the execution status of this line is deduced): QFontCache::instance()->instance()->insertEngine(key,engine); | - |
182 | } executed: } Execution Count:626 | 626 |
183 | } executed: } Execution Count:891 | 891 |
184 | return engine; executed: return engine; Execution Count:891 | 891 |
185 | } | - |
186 | | - |
187 | static | - |
188 | QFontEngine *loadEngine(int script, const QFontDef &request, | - |
189 | QtFontFamily *family, QtFontFoundry *foundry, | - |
190 | QtFontStyle *style, QtFontSize *size) | - |
191 | { | - |
192 | | - |
193 | QFontEngine *engine = loadSingleEngine(script, request, foundry, style, size); executed (the execution status of this line is deduced): QFontEngine *engine = loadSingleEngine(script, request, foundry, style, size); | - |
194 | //make sure that the db has all fallback families | - |
195 | if (engine && engine->type() != QFontEngine::Multi evaluated: engine yes Evaluation Count:626 | yes Evaluation Count:265 |
partially evaluated: engine->type() != QFontEngine::Multi yes Evaluation Count:626 | no Evaluation Count:0 |
| 0-626 |
196 | && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol ) { evaluated: !(request.styleStrategy & QFont::NoFontMerging) yes Evaluation Count:624 | yes Evaluation Count:2 |
evaluated: !engine->symbol yes Evaluation Count:600 | yes Evaluation Count:24 |
| 2-624 |
197 | | - |
198 | if (family && !family->askedForFallback) { partially evaluated: family yes Evaluation Count:600 | no Evaluation Count:0 |
evaluated: !family->askedForFallback yes Evaluation Count:386 | yes Evaluation Count:214 |
| 0-600 |
199 | QFont::Style fontStyle = QFont::Style(style->key.style); executed (the execution status of this line is deduced): QFont::Style fontStyle = QFont::Style(style->key.style); | - |
200 | QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); executed (the execution status of this line is deduced): QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); | - |
201 | if (styleHint == QFont::AnyStyle && request.fixedPitch) partially evaluated: styleHint == QFont::AnyStyle yes Evaluation Count:386 | no Evaluation Count:0 |
partially evaluated: request.fixedPitch no Evaluation Count:0 | yes Evaluation Count:386 |
| 0-386 |
202 | styleHint = QFont::TypeWriter; never executed: styleHint = QFont::TypeWriter; | 0 |
203 | family->fallbackFamilies = fallbackFamilies(family->name,fontStyle,styleHint,QUnicodeTables::Script(script)); executed (the execution status of this line is deduced): family->fallbackFamilies = fallbackFamilies(family->name,fontStyle,styleHint,QUnicodeTables::Script(script)); | - |
204 | | - |
205 | family->askedForFallback = true; executed (the execution status of this line is deduced): family->askedForFallback = true; | - |
206 | } executed: } Execution Count:386 | 386 |
207 | | - |
208 | QStringList fallbacks = privateDb()->fallbackFamilies; executed (the execution status of this line is deduced): QStringList fallbacks = privateDb()->fallbackFamilies; | - |
209 | if (family && !family->fallbackFamilies.isEmpty()) partially evaluated: family yes Evaluation Count:600 | no Evaluation Count:0 |
partially evaluated: !family->fallbackFamilies.isEmpty() yes Evaluation Count:600 | no Evaluation Count:0 |
| 0-600 |
210 | fallbacks = family->fallbackFamilies; executed: fallbacks = family->fallbackFamilies; Execution Count:600 | 600 |
211 | | - |
212 | QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); executed (the execution status of this line is deduced): QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); | - |
213 | QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QUnicodeTables::Script(script)); executed (the execution status of this line is deduced): QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QUnicodeTables::Script(script)); | - |
214 | pfMultiEngine->setFallbackFamiliesList(fallbacks); executed (the execution status of this line is deduced): pfMultiEngine->setFallbackFamiliesList(fallbacks); | - |
215 | engine = pfMultiEngine; executed (the execution status of this line is deduced): engine = pfMultiEngine; | - |
216 | | - |
217 | // Cache Multi font engine as well in case we got the FT single | - |
218 | // font engine when we are actually looking for a Multi one | - |
219 | QFontCache::Key key(request, script, 1); executed (the execution status of this line is deduced): QFontCache::Key key(request, script, 1); | - |
220 | QFontCache::instance()->instance()->insertEngine(key, engine); executed (the execution status of this line is deduced): QFontCache::instance()->instance()->insertEngine(key, engine); | - |
221 | } executed: } Execution Count:600 | 600 |
222 | | - |
223 | return engine; executed: return engine; Execution Count:891 | 891 |
224 | } | - |
225 | | - |
226 | static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) | - |
227 | { | - |
228 | QFontDatabasePrivate *db = privateDb(); executed (the execution status of this line is deduced): QFontDatabasePrivate *db = privateDb(); | - |
229 | | - |
230 | fnt->families = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName); executed (the execution status of this line is deduced): fnt->families = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName); | - |
231 | | - |
232 | db->reregisterAppFonts = true; executed (the execution status of this line is deduced): db->reregisterAppFonts = true; | - |
233 | } executed: } Execution Count:42 | 42 |
234 | | - |
235 | bool QFontDatabase::removeApplicationFont(int handle) | - |
236 | { | - |
237 | QMutexLocker locker(fontDatabaseMutex()); executed (the execution status of this line is deduced): QMutexLocker locker(fontDatabaseMutex()); | - |
238 | | - |
239 | QFontDatabasePrivate *db = privateDb(); executed (the execution status of this line is deduced): QFontDatabasePrivate *db = privateDb(); | - |
240 | if (handle < 0 || handle >= db->applicationFonts.count()) partially evaluated: handle < 0 no Evaluation Count:0 | yes Evaluation Count:21 |
partially evaluated: handle >= db->applicationFonts.count() no Evaluation Count:0 | yes Evaluation Count:21 |
| 0-21 |
241 | return false; never executed: return false; | 0 |
242 | | - |
243 | db->applicationFonts[handle] = QFontDatabasePrivate::ApplicationFont(); executed (the execution status of this line is deduced): db->applicationFonts[handle] = QFontDatabasePrivate::ApplicationFont(); | - |
244 | | - |
245 | db->reregisterAppFonts = true; executed (the execution status of this line is deduced): db->reregisterAppFonts = true; | - |
246 | db->invalidate(); executed (the execution status of this line is deduced): db->invalidate(); | - |
247 | return true; executed: return true; Execution Count:21 | 21 |
248 | } | - |
249 | | - |
250 | bool QFontDatabase::removeAllApplicationFonts() | - |
251 | { | - |
252 | QMutexLocker locker(fontDatabaseMutex()); never executed (the execution status of this line is deduced): QMutexLocker locker(fontDatabaseMutex()); | - |
253 | | - |
254 | QFontDatabasePrivate *db = privateDb(); never executed (the execution status of this line is deduced): QFontDatabasePrivate *db = privateDb(); | - |
255 | if (db->applicationFonts.isEmpty()) never evaluated: db->applicationFonts.isEmpty() | 0 |
256 | return false; never executed: return false; | 0 |
257 | | - |
258 | db->applicationFonts.clear(); never executed (the execution status of this line is deduced): db->applicationFonts.clear(); | - |
259 | db->invalidate(); never executed (the execution status of this line is deduced): db->invalidate(); | - |
260 | return true; never executed: return true; | 0 |
261 | } | - |
262 | | - |
263 | bool QFontDatabase::supportsThreadedFontRendering() | - |
264 | { | - |
265 | return true; executed: return true; Execution Count:1 | 1 |
266 | } | - |
267 | | - |
268 | /*! | - |
269 | \internal | - |
270 | */ | - |
271 | QFontEngine * | - |
272 | QFontDatabase::findFont(int script, const QFontPrivate *fp, | - |
273 | const QFontDef &request, bool multi) | - |
274 | { | - |
275 | QMutexLocker locker(fontDatabaseMutex()); executed (the execution status of this line is deduced): QMutexLocker locker(fontDatabaseMutex()); | - |
276 | | - |
277 | const int force_encoding_id = -1; executed (the execution status of this line is deduced): const int force_encoding_id = -1; | - |
278 | | - |
279 | if (!privateDb()->count) evaluated: !privateDb()->count yes Evaluation Count:125 | yes Evaluation Count:521 |
| 125-521 |
280 | initializeDb(); executed: initializeDb(); Execution Count:125 | 125 |
281 | | - |
282 | QFontEngine *engine; executed (the execution status of this line is deduced): QFontEngine *engine; | - |
283 | QFontCache::Key key(request, script, multi ? 1 : 0); executed (the execution status of this line is deduced): QFontCache::Key key(request, script, multi ? 1 : 0); | - |
284 | engine = QFontCache::instance()->findEngine(key); executed (the execution status of this line is deduced): engine = QFontCache::instance()->findEngine(key); | - |
285 | if (engine) { evaluated: engine yes Evaluation Count:7 | yes Evaluation Count:639 |
| 7-639 |
286 | FM_DEBUG("Cache hit level 1"); never executed: QMessageLogger("text/qfontdatabase_qpa.cpp", 286, __PRETTY_FUNCTION__).debug("Cache hit level 1"); partially evaluated: false no Evaluation Count:0 | yes Evaluation Count:7 |
| 0-7 |
287 | return engine; executed: return engine; Execution Count:7 | 7 |
288 | } | - |
289 | | - |
290 | QString family_name, foundry_name; executed (the execution status of this line is deduced): QString family_name, foundry_name; | - |
291 | | - |
292 | parseFontName(request.family, foundry_name, family_name); executed (the execution status of this line is deduced): parseFontName(request.family, foundry_name, family_name); | - |
293 | | - |
294 | if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { partially evaluated: qt_enable_test_font no Evaluation Count:0 | yes Evaluation Count:639 |
never evaluated: request.family == QLatin1String("__Qt__Box__Engine__") | 0-639 |
295 | engine =new QTestFontEngine(request.pixelSize); never executed (the execution status of this line is deduced): engine =new QTestFontEngine(request.pixelSize); | - |
296 | engine->fontDef = request; never executed (the execution status of this line is deduced): engine->fontDef = request; | - |
297 | } | 0 |
298 | | - |
299 | QtFontDesc desc; executed (the execution status of this line is deduced): QtFontDesc desc; | - |
300 | match(script, request, family_name, foundry_name, force_encoding_id, &desc); executed (the execution status of this line is deduced): match(script, request, family_name, foundry_name, force_encoding_id, &desc); | - |
301 | if (desc.family != 0 && desc.foundry != 0 && desc.style != 0) { evaluated: desc.family != 0 yes Evaluation Count:607 | yes Evaluation Count:32 |
partially evaluated: desc.foundry != 0 yes Evaluation Count:607 | no Evaluation Count:0 |
partially evaluated: desc.style != 0 yes Evaluation Count:607 | no Evaluation Count:0 |
| 0-607 |
302 | engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); executed (the execution status of this line is deduced): engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); | - |
303 | } else { executed: } Execution Count:607 | 607 |
304 | FM_DEBUG(" NO MATCH FOUND\n"); never executed: QMessageLogger("text/qfontdatabase_qpa.cpp", 304, __PRETTY_FUNCTION__).debug(" NO MATCH FOUND\n"); partially evaluated: false no Evaluation Count:0 | yes Evaluation Count:32 |
| 0-32 |
305 | } executed: } Execution Count:32 | 32 |
306 | | - |
307 | if (engine && engine->type() != QFontEngine::TestFontEngine) { evaluated: engine yes Evaluation Count:430 | yes Evaluation Count:209 |
partially evaluated: engine->type() != QFontEngine::TestFontEngine yes Evaluation Count:430 | no Evaluation Count:0 |
| 0-430 |
308 | initFontDef(desc, request, &engine->fontDef, engine->type() == QFontEngine::Multi); executed (the execution status of this line is deduced): initFontDef(desc, request, &engine->fontDef, engine->type() == QFontEngine::Multi); | - |
309 | | - |
310 | if (fp) { evaluated: fp yes Evaluation Count:428 | yes Evaluation Count:2 |
| 2-428 |
311 | QFontDef def = request; executed (the execution status of this line is deduced): QFontDef def = request; | - |
312 | if (def.family.isEmpty()) { partially evaluated: def.family.isEmpty() no Evaluation Count:0 | yes Evaluation Count:428 |
| 0-428 |
313 | def.family = fp->request.family; never executed (the execution status of this line is deduced): def.family = fp->request.family; | - |
314 | def.family = def.family.left(def.family.indexOf(QLatin1Char(','))); never executed (the execution status of this line is deduced): def.family = def.family.left(def.family.indexOf(QLatin1Char(','))); | - |
315 | } | 0 |
316 | } executed: } Execution Count:428 | 428 |
317 | } executed: } Execution Count:430 | 430 |
318 | | - |
319 | if (!engine) { evaluated: !engine yes Evaluation Count:209 | yes Evaluation Count:430 |
| 209-430 |
320 | if (!request.family.isEmpty()) { evaluated: !request.family.isEmpty() yes Evaluation Count:207 | yes Evaluation Count:2 |
| 2-207 |
321 | QStringList fallbacks = request.fallBackFamilies executed (the execution status of this line is deduced): QStringList fallbacks = request.fallBackFamilies | - |
322 | + fallbackFamilies(request.family, executed (the execution status of this line is deduced): + fallbackFamilies(request.family, | - |
323 | QFont::Style(request.style), executed (the execution status of this line is deduced): QFont::Style(request.style), | - |
324 | QFont::StyleHint(request.styleHint), executed (the execution status of this line is deduced): QFont::StyleHint(request.styleHint), | - |
325 | QUnicodeTables::Script(script)); executed (the execution status of this line is deduced): QUnicodeTables::Script(script)); | - |
326 | | - |
327 | for (int i = 0; !engine && i < fallbacks.size(); i++) { evaluated: !engine yes Evaluation Count:418 | yes Evaluation Count:205 |
evaluated: i < fallbacks.size() yes Evaluation Count:416 | yes Evaluation Count:2 |
| 2-418 |
328 | QFontDef def = request; executed (the execution status of this line is deduced): QFontDef def = request; | - |
329 | def.family = fallbacks.at(i); executed (the execution status of this line is deduced): def.family = fallbacks.at(i); | - |
330 | QFontCache::Key key(def, script, multi ? 1 : 0); executed (the execution status of this line is deduced): QFontCache::Key key(def, script, multi ? 1 : 0); | - |
331 | engine = QFontCache::instance()->findEngine(key); executed (the execution status of this line is deduced): engine = QFontCache::instance()->findEngine(key); | - |
332 | if (!engine) { evaluated: !engine yes Evaluation Count:407 | yes Evaluation Count:9 |
| 9-407 |
333 | QtFontDesc desc; executed (the execution status of this line is deduced): QtFontDesc desc; | - |
334 | match(script, def, def.family, QLatin1String(""), 0, &desc); executed (the execution status of this line is deduced): match(script, def, def.family, QLatin1String(""), 0, &desc); | - |
335 | if (desc.family == 0 && desc.foundry == 0 && desc.style == 0) { evaluated: desc.family == 0 yes Evaluation Count:123 | yes Evaluation Count:284 |
partially evaluated: desc.foundry == 0 yes Evaluation Count:123 | no Evaluation Count:0 |
partially evaluated: desc.style == 0 yes Evaluation Count:123 | no Evaluation Count:0 |
| 0-284 |
336 | continue; executed: continue; Execution Count:123 | 123 |
337 | } | - |
338 | engine = loadEngine(script, def, desc.family, desc.foundry, desc.style, desc.size); executed (the execution status of this line is deduced): engine = loadEngine(script, def, desc.family, desc.foundry, desc.style, desc.size); | - |
339 | if (engine) { evaluated: engine yes Evaluation Count:196 | yes Evaluation Count:88 |
| 88-196 |
340 | initFontDef(desc, def, &engine->fontDef, engine->type() == QFontEngine::Multi); executed (the execution status of this line is deduced): initFontDef(desc, def, &engine->fontDef, engine->type() == QFontEngine::Multi); | - |
341 | } executed: } Execution Count:196 | 196 |
342 | } executed: } Execution Count:284 | 284 |
343 | } executed: } Execution Count:293 | 293 |
344 | } executed: } Execution Count:207 | 207 |
345 | | - |
346 | if (!engine) evaluated: !engine yes Evaluation Count:4 | yes Evaluation Count:205 |
| 4-205 |
347 | engine = new QFontEngineBox(request.pixelSize); executed: engine = new QFontEngineBox(request.pixelSize); Execution Count:4 | 4 |
348 | | - |
349 | FM_DEBUG("returning box engine"); never executed: QMessageLogger("text/qfontdatabase_qpa.cpp", 349, __PRETTY_FUNCTION__).debug("returning box engine"); partially evaluated: false no Evaluation Count:0 | yes Evaluation Count:209 |
| 0-209 |
350 | } executed: } Execution Count:209 | 209 |
351 | | - |
352 | if (fp && fp->dpi > 0) { evaluated: fp yes Evaluation Count:637 | yes Evaluation Count:2 |
evaluated: fp->dpi > 0 yes Evaluation Count:635 | yes Evaluation Count:2 |
| 2-637 |
353 | engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi)); executed (the execution status of this line is deduced): engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi)); | - |
354 | } else { executed: } Execution Count:635 | 635 |
355 | engine->fontDef.pointSize = request.pointSize; executed (the execution status of this line is deduced): engine->fontDef.pointSize = request.pointSize; | - |
356 | } executed: } Execution Count:4 | 4 |
357 | | - |
358 | return engine; executed: return engine; Execution Count:639 | 639 |
359 | } | - |
360 | | - |
361 | void QFontDatabase::load(const QFontPrivate *d, int script) | - |
362 | { | - |
363 | QFontDef req = d->request; executed (the execution status of this line is deduced): QFontDef req = d->request; | - |
364 | | - |
365 | if (req.pixelSize == -1) { evaluated: req.pixelSize == -1 yes Evaluation Count:29815 | yes Evaluation Count:114 |
| 114-29815 |
366 | req.pixelSize = floor(((req.pointSize * d->dpi) / 72) * 100 + 0.5) / 100; executed (the execution status of this line is deduced): req.pixelSize = floor(((req.pointSize * d->dpi) / 72) * 100 + 0.5) / 100; | - |
367 | req.pixelSize = qRound(req.pixelSize); executed (the execution status of this line is deduced): req.pixelSize = qRound(req.pixelSize); | - |
368 | } executed: } Execution Count:29815 | 29815 |
369 | if (req.pointSize < 0) evaluated: req.pointSize < 0 yes Evaluation Count:114 | yes Evaluation Count:29815 |
| 114-29815 |
370 | req.pointSize = req.pixelSize*72.0/d->dpi; executed: req.pointSize = req.pixelSize*72.0/d->dpi; Execution Count:114 | 114 |
371 | if (req.weight == 0) partially evaluated: req.weight == 0 no Evaluation Count:0 | yes Evaluation Count:29929 |
| 0-29929 |
372 | req.weight = QFont::Normal; never executed: req.weight = QFont::Normal; | 0 |
373 | if (req.stretch == 0) partially evaluated: req.stretch == 0 no Evaluation Count:0 | yes Evaluation Count:29929 |
| 0-29929 |
374 | req.stretch = 100; never executed: req.stretch = 100; | 0 |
375 | | - |
376 | // Until we specifically asked not to, try looking for Multi font engine | - |
377 | // first, the last '1' indicates that we want Multi font engine instead | - |
378 | // of single ones | - |
379 | bool multi = !(req.styleStrategy & QFont::NoFontMerging); executed (the execution status of this line is deduced): bool multi = !(req.styleStrategy & QFont::NoFontMerging); | - |
380 | QFontCache::Key key(req, script, multi ? 1 : 0); executed (the execution status of this line is deduced): QFontCache::Key key(req, script, multi ? 1 : 0); | - |
381 | | - |
382 | if (!d->engineData) evaluated: !d->engineData yes Evaluation Count:29910 | yes Evaluation Count:19 |
| 19-29910 |
383 | getEngineData(d, req); executed: getEngineData(d, req); Execution Count:29910 | 29910 |
384 | | - |
385 | // the cached engineData could have already loaded the engine we want | - |
386 | if (d->engineData->engines[script]) evaluated: d->engineData->engines[script] yes Evaluation Count:29292 | yes Evaluation Count:637 |
| 637-29292 |
387 | return; executed: return; Execution Count:29292 | 29292 |
388 | | - |
389 | QFontEngine *fe = QFontCache::instance()->findEngine(key); executed (the execution status of this line is deduced): QFontEngine *fe = QFontCache::instance()->findEngine(key); | - |
390 | | - |
391 | // list of families to try | - |
392 | QStringList family_list; executed (the execution status of this line is deduced): QStringList family_list; | - |
393 | | - |
394 | if (!req.family.isEmpty()) { partially evaluated: !req.family.isEmpty() yes Evaluation Count:637 | no Evaluation Count:0 |
| 0-637 |
395 | QStringList familiesForRequest = familyList(req); executed (the execution status of this line is deduced): QStringList familiesForRequest = familyList(req); | - |
396 | | - |
397 | // Add primary selection | - |
398 | family_list << familiesForRequest.takeFirst(); executed (the execution status of this line is deduced): family_list << familiesForRequest.takeFirst(); | - |
399 | | - |
400 | // Fallbacks requested in font request | - |
401 | req.fallBackFamilies = familiesForRequest; executed (the execution status of this line is deduced): req.fallBackFamilies = familiesForRequest; | - |
402 | | - |
403 | // add the default family | - |
404 | QString defaultFamily = QGuiApplication::font().family(); executed (the execution status of this line is deduced): QString defaultFamily = QGuiApplication::font().family(); | - |
405 | if (! family_list.contains(defaultFamily)) evaluated: ! family_list.contains(defaultFamily) yes Evaluation Count:460 | yes Evaluation Count:177 |
| 177-460 |
406 | family_list << defaultFamily; executed: family_list << defaultFamily; Execution Count:460 | 460 |
407 | | - |
408 | } executed: } Execution Count:637 | 637 |
409 | | - |
410 | // null family means find the first font matching the specified script | - |
411 | family_list << QString(); executed (the execution status of this line is deduced): family_list << QString(); | - |
412 | | - |
413 | QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd(); executed (the execution status of this line is deduced): QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd(); | - |
414 | for (; !fe && it != end; ++it) { evaluated: !fe yes Evaluation Count:637 | yes Evaluation Count:637 |
partially evaluated: it != end yes Evaluation Count:637 | no Evaluation Count:0 |
| 0-637 |
415 | req.family = *it; executed (the execution status of this line is deduced): req.family = *it; | - |
416 | | - |
417 | fe = QFontDatabase::findFont(script, d, req, multi); executed (the execution status of this line is deduced): fe = QFontDatabase::findFont(script, d, req, multi); | - |
418 | if (fe && (fe->type()==QFontEngine::Box) && !req.family.isEmpty()) { partially evaluated: fe yes Evaluation Count:637 | no Evaluation Count:0 |
evaluated: (fe->type()==QFontEngine::Box) yes Evaluation Count:4 | yes Evaluation Count:633 |
evaluated: !req.family.isEmpty() yes Evaluation Count:2 | yes Evaluation Count:2 |
| 0-637 |
419 | if (fe->ref.load() == 0) partially evaluated: fe->ref.load() == 0 yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
420 | delete fe; executed: delete fe; Execution Count:2 | 2 |
421 | | - |
422 | fe = 0; executed (the execution status of this line is deduced): fe = 0; | - |
423 | } executed: } Execution Count:2 | 2 |
424 | | - |
425 | // No need to check requested fallback families again | - |
426 | req.fallBackFamilies.clear(); executed (the execution status of this line is deduced): req.fallBackFamilies.clear(); | - |
427 | } executed: } Execution Count:637 | 637 |
428 | | - |
429 | if (fe->symbol || (d->request.styleStrategy & QFont::NoFontMerging)) { evaluated: fe->symbol yes Evaluation Count:24 | yes Evaluation Count:613 |
partially evaluated: (d->request.styleStrategy & QFont::NoFontMerging) no Evaluation Count:0 | yes Evaluation Count:613 |
| 0-613 |
430 | for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) { evaluated: i < QUnicodeTables::ScriptCount yes Evaluation Count:672 | yes Evaluation Count:24 |
| 24-672 |
431 | if (!d->engineData->engines[i]) { partially evaluated: !d->engineData->engines[i] yes Evaluation Count:672 | no Evaluation Count:0 |
| 0-672 |
432 | d->engineData->engines[i] = fe; executed (the execution status of this line is deduced): d->engineData->engines[i] = fe; | - |
433 | fe->ref.ref(); executed (the execution status of this line is deduced): fe->ref.ref(); | - |
434 | } executed: } Execution Count:672 | 672 |
435 | } executed: } Execution Count:672 | 672 |
436 | } else { executed: } Execution Count:24 | 24 |
437 | d->engineData->engines[script] = fe; executed (the execution status of this line is deduced): d->engineData->engines[script] = fe; | - |
438 | fe->ref.ref(); executed (the execution status of this line is deduced): fe->ref.ref(); | - |
439 | } executed: } Execution Count:613 | 613 |
440 | } | - |
441 | | - |
442 | QString QFontDatabase::resolveFontFamilyAlias(const QString &family) | - |
443 | { | - |
444 | return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->resolveFontFamilyAlias(family); executed: return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->resolveFontFamilyAlias(family); Execution Count:9 | 9 |
445 | } | - |
446 | | - |
447 | QT_END_NAMESPACE | - |
448 | | - |
| | |