qfontmetrics.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/text/qfontmetrics.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6extern void qt_format_text(const QFont& font, const QRectF &_r,-
7 int tf, const QString &text, QRectF *brect,-
8 int tabStops, int *tabArray, int tabArrayLen,-
9 QPainter *painter);-
10QFontMetrics::QFontMetrics(const QFont &font)-
11 : d(font.d.data())-
12{-
13}
never executed: end of block
0
14QFontMetrics::QFontMetrics(const QFont &font, QPaintDevice *paintdevice)-
15{-
16 int dpi = paintdevice
paintdeviceDescription
TRUEnever evaluated
FALSEnever evaluated
? paintdevice->logicalDpiY() : qt_defaultDpi();
0
17 const int screen = 0;-
18 if (font.d->dpi != dpi
font.d->dpi != dpiDescription
TRUEnever evaluated
FALSEnever evaluated
|| font.d->screen != screen
font.d->screen != screenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
19 d = new QFontPrivate(*font.d);-
20 d->dpi = dpi;-
21 d->screen = screen;-
22 }
never executed: end of block
else {
0
23 d = font.d.data();-
24 }
never executed: end of block
0
25-
26}-
27-
28-
29-
30-
31QFontMetrics::QFontMetrics(const QFontMetrics &fm)-
32 : d(fm.d.data())-
33{-
34}
never executed: end of block
0
35-
36-
37-
38-
39-
40QFontMetrics::~QFontMetrics()-
41{-
42}-
43-
44-
45-
46-
47QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm)-
48{-
49 d = fm.d.data();-
50 return
never executed: return *this;
*this;
never executed: return *this;
0
51}-
52bool QFontMetrics::operator ==(const QFontMetrics &other) const-
53{-
54 return
never executed: return d == other.d;
d == other.d;
never executed: return d == other.d;
0
55}-
56int QFontMetrics::ascent() const-
57{-
58 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
59 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,267) : qt_noop());-
60 return
never executed: return qRound(engine->ascent());
qRound(engine->ascent());
never executed: return qRound(engine->ascent());
0
61}-
62int QFontMetrics::descent() const-
63{-
64 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
65 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,285) : qt_noop());-
66 return
never executed: return qRound(engine->descent());
qRound(engine->descent());
never executed: return qRound(engine->descent());
0
67}-
68int QFontMetrics::height() const-
69{-
70 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
71 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,299) : qt_noop());-
72 return
never executed: return qRound(engine->ascent()) + qRound(engine->descent());
qRound(engine->ascent()) + qRound(engine->descent());
never executed: return qRound(engine->ascent()) + qRound(engine->descent());
0
73}-
74int QFontMetrics::leading() const-
75{-
76 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
77 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,313) : qt_noop());-
78 return
never executed: return qRound(engine->leading());
qRound(engine->leading());
never executed: return qRound(engine->leading());
0
79}-
80int QFontMetrics::lineSpacing() const-
81{-
82 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
83 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,327) : qt_noop());-
84 return
never executed: return qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent());
qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent());
never executed: return qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent());
0
85}-
86int QFontMetrics::minLeftBearing() const-
87{-
88 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
89 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,344) : qt_noop());-
90 return
never executed: return qRound(engine->minLeftBearing());
qRound(engine->minLeftBearing());
never executed: return qRound(engine->minLeftBearing());
0
91}-
92int QFontMetrics::minRightBearing() const-
93{-
94 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
95 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,361) : qt_noop());-
96 return
never executed: return qRound(engine->minRightBearing());
qRound(engine->minRightBearing());
never executed: return qRound(engine->minRightBearing());
0
97}-
98-
99-
100-
101-
102int QFontMetrics::maxWidth() const-
103{-
104 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
105 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,371) : qt_noop());-
106 return
never executed: return qRound(engine->maxCharWidth());
qRound(engine->maxCharWidth());
never executed: return qRound(engine->maxCharWidth());
0
107}-
108-
109-
110-
111-
112-
113int QFontMetrics::xHeight() const-
114{-
115 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
116 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,382) : qt_noop());-
117 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
118 return
never executed: return qRound(d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent());
qRound(d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent());
never executed: return qRound(d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent());
0
119 return
never executed: return qRound(engine->xHeight());
qRound(engine->xHeight());
never executed: return qRound(engine->xHeight());
0
120}-
121-
122-
123-
124-
125-
126-
127int QFontMetrics::averageCharWidth() const-
128{-
129 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
130 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,396) : qt_noop());-
131 return
never executed: return qRound(engine->averageCharWidth());
qRound(engine->averageCharWidth());
never executed: return qRound(engine->averageCharWidth());
0
132}-
133-
134-
135-
136-
137-
138bool QFontMetrics::inFont(QChar ch) const-
139{-
140 return
never executed: return inFontUcs4(ch.unicode());
inFontUcs4(ch.unicode());
never executed: return inFontUcs4(ch.unicode());
0
141}-
142-
143-
144-
145-
146-
147bool QFontMetrics::inFontUcs4(uint ucs4) const-
148{-
149 const int script = QChar::script(ucs4);-
150 QFontEngine *engine = d->engineForScript(script);-
151 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,417) : qt_noop());-
152 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
153 return
never executed: return false;
false;
never executed: return false;
0
154 return
never executed: return engine->canRender(ucs4);
engine->canRender(ucs4);
never executed: return engine->canRender(ucs4);
0
155}-
156int QFontMetrics::leftBearing(QChar ch) const-
157{-
158 const int script = ch.script();-
159 QFontEngine *engine;-
160 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
161 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
162 else-
163 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
164 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,443) : qt_noop());-
165 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
166 return
never executed: return 0;
0;
never executed: return 0;
0
167-
168 d->alterCharForCapitalization(ch);-
169-
170 glyph_t glyph = engine->glyphIndex(ch.unicode());-
171-
172 qreal lb;-
173 engine->getGlyphBearings(glyph, &lb);-
174 return
never executed: return qRound(lb);
qRound(lb);
never executed: return qRound(lb);
0
175}-
176int QFontMetrics::rightBearing(QChar ch) const-
177{-
178 const int script = ch.script();-
179 QFontEngine *engine;-
180 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
181 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
182 else-
183 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
184 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,476) : qt_noop());-
185 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
186 return
never executed: return 0;
0;
never executed: return 0;
0
187-
188 d->alterCharForCapitalization(ch);-
189-
190 glyph_t glyph = engine->glyphIndex(ch.unicode());-
191-
192 qreal rb;-
193 engine->getGlyphBearings(glyph, 0, &rb);-
194 return
never executed: return qRound(rb);
qRound(rb);
never executed: return qRound(rb);
0
195}-
196int QFontMetrics::width(const QString &text, int len) const-
197{-
198 return
never executed: return width(text, len, 0);
width(text, len, 0);
never executed: return width(text, len, 0);
0
199}-
200-
201-
202-
203-
204int QFontMetrics::width(const QString &text, int len, int flags) const-
205{-
206 int pos = text.indexOf(QLatin1Char('\x9c'));-
207 if (pos != -1
pos != -1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
208 len = (
(len < 0)Description
TRUEnever evaluated
FALSEnever evaluated
len < 0)
(len < 0)Description
TRUEnever evaluated
FALSEnever evaluated
? pos : qMin(pos, len);
0
209 }
never executed: end of block
else if (len < 0
len < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
210 len = text.length();-
211 }
never executed: end of block
0
212 if (len == 0
len == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
213 return
never executed: return 0;
0;
never executed: return 0;
0
214-
215 if (flags & Qt::TextBypassShaping
flags & Qt::TextBypassShapingDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
216-
217 int numGlyphs = len;-
218 QVarLengthGlyphLayoutArray glyphs(numGlyphs);-
219 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
220 if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)
!engine->strin...&numGlyphs, 0)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
221 do { ((!(false)) ? qt_assert_x("Q_UNREACHABLE()", "Q_UNREACHABLE was reached",__FILE__,526) : qt_noop()); __builtin_unreachable(); }
never executed: end of block
while (0);
0
222-
223 QFixed width;-
224 for (int i = 0; i < numGlyphs
i < numGlyphsDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i)
0
225 width += glyphs.advances[i];
never executed: width += glyphs.advances[i];
0
226 return
never executed: return qRound(width);
qRound(width);
never executed: return qRound(width);
0
227 }-
228-
229 QStackTextEngine layout(text, QFont(d.data()));-
230 return
never executed: return qRound(layout.width(0, len));
qRound(layout.width(0, len));
never executed: return qRound(layout.width(0, len));
0
231}-
232int QFontMetrics::width(QChar ch) const-
233{-
234 if (QChar::category(ch.unicode()) == QChar::Mark_NonSpacing
QChar::categor...ark_NonSpacingDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
235 return
never executed: return 0;
0;
never executed: return 0;
0
236-
237 const int script = ch.script();-
238 QFontEngine *engine;-
239 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
240 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
241 else-
242 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
243 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,573) : qt_noop());-
244-
245 d->alterCharForCapitalization(ch);-
246-
247 glyph_t glyph = engine->glyphIndex(ch.unicode());-
248 QFixed advance;-
249-
250 QGlyphLayout glyphs;-
251 glyphs.numGlyphs = 1;-
252 glyphs.glyphs = &glyph;-
253 glyphs.advances = &advance;-
254 engine->recalcAdvances(&glyphs, 0);-
255-
256 return
never executed: return qRound(advance);
qRound(advance);
never executed: return qRound(advance);
0
257}-
258int QFontMetrics::charWidth(const QString &text, int pos) const-
259{-
260 int width = 0;-
261 if (pos < 0
pos < 0Description
TRUEnever evaluated
FALSEnever evaluated
|| pos > (int)text.length()
pos > (int)text.length()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
262 return
never executed: return width;
width;
never executed: return width;
0
263-
264 QChar ch = text.at(pos);-
265 const int script = ch.script();-
266 if (script != QChar::Script_Common
script != QChar::Script_CommonDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
267-
268 int from = qMax(0, pos - 8);-
269 int to = qMin(text.length(), pos + 8);-
270 QString cstr = QString::fromRawData(text.unicode() + from, to - from);-
271 QStackTextEngine layout(cstr, QFont(d.data()));-
272 layout.ignoreBidi = true;-
273 layout.itemize();-
274 width = qRound(layout.width(pos-from, 1));-
275 }
never executed: end of block
else if (ch.category() != QChar::Mark_NonSpacing
ch.category() ...ark_NonSpacingDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
276 QFontEngine *engine;-
277 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
278 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
279 else-
280 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
281 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,625) : qt_noop());-
282-
283 d->alterCharForCapitalization(ch);-
284-
285 glyph_t glyph = engine->glyphIndex(ch.unicode());-
286 QFixed advance;-
287-
288 QGlyphLayout glyphs;-
289 glyphs.numGlyphs = 1;-
290 glyphs.glyphs = &glyph;-
291 glyphs.advances = &advance;-
292 engine->recalcAdvances(&glyphs, 0);-
293-
294 width = qRound(advance);-
295 }
never executed: end of block
0
296 return
never executed: return width;
width;
never executed: return width;
0
297}-
298QRect QFontMetrics::boundingRect(const QString &text) const-
299{-
300 if (text.length() == 0
text.length() == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
301 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
302-
303 QStackTextEngine layout(text, QFont(d.data()));-
304 layout.itemize();-
305 glyph_metrics_t gm = layout.boundingBox(0, text.length());-
306 return
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
0
307}-
308QRect QFontMetrics::boundingRect(QChar ch) const-
309{-
310 const int script = ch.script();-
311 QFontEngine *engine;-
312 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
313 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
314 else-
315 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
316 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,700) : qt_noop());-
317-
318 d->alterCharForCapitalization(ch);-
319-
320 glyph_t glyph = engine->glyphIndex(ch.unicode());-
321-
322 glyph_metrics_t gm = engine->boundingBox(glyph);-
323 return
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
0
324}-
325QRect QFontMetrics::boundingRect(const QRect &rect, int flags, const QString &text, int tabStops,-
326 int *tabArray) const-
327{-
328 int tabArrayLen = 0;-
329 if (tabArray
tabArrayDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
330 while (tabArray[tabArrayLen]
tabArray[tabArrayLen]Description
TRUEnever evaluated
FALSEnever evaluated
)
0
331 tabArrayLen++;
never executed: tabArrayLen++;
0
332-
333 QRectF rb;-
334 QRectF rr(rect);-
335 qt_format_text(QFont(d.data()), rr, flags | Qt::TextDontPrint, text, &rb, tabStops, tabArray,-
336 tabArrayLen, 0);-
337-
338 return
never executed: return rb.toAlignedRect();
rb.toAlignedRect();
never executed: return rb.toAlignedRect();
0
339}-
340QSize QFontMetrics::size(int flags, const QString &text, int tabStops, int *tabArray) const-
341{-
342 return
never executed: return boundingRect(QRect(0,0,0,0), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
boundingRect(QRect(0,0,0,0), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
never executed: return boundingRect(QRect(0,0,0,0), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
0
343}-
344QRect QFontMetrics::tightBoundingRect(const QString &text) const-
345{-
346 if (text.length() == 0
text.length() == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
347 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
348-
349 QStackTextEngine layout(text, QFont(d.data()));-
350 layout.itemize();-
351 glyph_metrics_t gm = layout.tightBoundingBox(0, text.length());-
352 return
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
never executed: return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height));
0
353}-
354QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags) const-
355{-
356 QString _text = text;-
357 if (!(flags & Qt::TextLongestVariant)
!(flags & Qt::...ongestVariant)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
358 int posA = 0;-
359 int posB = _text.indexOf(QLatin1Char('\x9c'));-
360 while (posB >= 0
posB >= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
361 QString portion = _text.mid(posA, posB - posA);-
362 if (size(flags, portion).width() <= width
size(flags, po...dth() <= widthDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
363 return
never executed: return portion;
portion;
never executed: return portion;
0
364 posA = posB + 1;-
365 posB = _text.indexOf(QLatin1Char('\x9c'), posA);-
366 }
never executed: end of block
0
367 _text = _text.mid(posA);-
368 }
never executed: end of block
0
369 QStackTextEngine engine(_text, QFont(d.data()));-
370 return
never executed: return engine.elidedText(mode, width, flags);
engine.elidedText(mode, width, flags);
never executed: return engine.elidedText(mode, width, flags);
0
371}-
372-
373-
374-
375-
376-
377-
378-
379int QFontMetrics::underlinePos() const-
380{-
381 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
382 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,894) : qt_noop());-
383 return
never executed: return qRound(engine->underlinePosition());
qRound(engine->underlinePosition());
never executed: return qRound(engine->underlinePosition());
0
384}-
385-
386-
387-
388-
389-
390-
391-
392int QFontMetrics::overlinePos() const-
393{-
394 return
never executed: return ascent() + 1;
ascent() + 1;
never executed: return ascent() + 1;
0
395}-
396-
397-
398-
399-
400-
401-
402-
403int QFontMetrics::strikeOutPos() const-
404{-
405 int pos = ascent() / 3;-
406 return
never executed: return pos > 0 ? pos : 1;
pos > 0
pos > 0Description
TRUEnever evaluated
FALSEnever evaluated
? pos : 1;
never executed: return pos > 0 ? pos : 1;
0
407}-
408-
409-
410-
411-
412-
413-
414-
415int QFontMetrics::lineWidth() const-
416{-
417 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
418 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,930) : qt_noop());-
419 return
never executed: return qRound(engine->lineThickness());
qRound(engine->lineThickness());
never executed: return qRound(engine->lineThickness());
0
420}-
421QFontMetricsF::QFontMetricsF(const QFontMetrics &fontMetrics)-
422 : d(fontMetrics.d.data())-
423{-
424}
never executed: end of block
0
425-
426-
427-
428-
429-
430-
431QFontMetricsF &QFontMetricsF::operator=(const QFontMetrics &other)-
432{-
433 d = other.d.data();-
434 return
never executed: return *this;
*this;
never executed: return *this;
0
435}-
436QFontMetricsF::QFontMetricsF(const QFont &font)-
437 : d(font.d.data())-
438{-
439}
never executed: end of block
0
440QFontMetricsF::QFontMetricsF(const QFont &font, QPaintDevice *paintdevice)-
441{-
442 int dpi = paintdevice
paintdeviceDescription
TRUEnever evaluated
FALSEnever evaluated
? paintdevice->logicalDpiY() : qt_defaultDpi();
0
443 const int screen = 0;-
444 if (font.d->dpi != dpi
font.d->dpi != dpiDescription
TRUEnever evaluated
FALSEnever evaluated
|| font.d->screen != screen
font.d->screen != screenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
445 d = new QFontPrivate(*font.d);-
446 d->dpi = dpi;-
447 d->screen = screen;-
448 }
never executed: end of block
else {
0
449 d = font.d.data();-
450 }
never executed: end of block
0
451-
452}-
453-
454-
455-
456-
457QFontMetricsF::QFontMetricsF(const QFontMetricsF &fm)-
458 : d(fm.d.data())-
459{-
460}
never executed: end of block
0
461-
462-
463-
464-
465-
466QFontMetricsF::~QFontMetricsF()-
467{-
468}-
469-
470-
471-
472-
473QFontMetricsF &QFontMetricsF::operator=(const QFontMetricsF &fm)-
474{-
475 d = fm.d.data();-
476 return
never executed: return *this;
*this;
never executed: return *this;
0
477}-
478bool QFontMetricsF::operator ==(const QFontMetricsF &other) const-
479{-
480 return
never executed: return d == other.d;
d == other.d;
never executed: return d == other.d;
0
481}-
482qreal QFontMetricsF::ascent() const-
483{-
484 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
485 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1128) : qt_noop());-
486 return
never executed: return engine->ascent().toReal();
engine->ascent().toReal();
never executed: return engine->ascent().toReal();
0
487}-
488qreal QFontMetricsF::descent() const-
489{-
490 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
491 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1147) : qt_noop());-
492 return
never executed: return engine->descent().toReal();
engine->descent().toReal();
never executed: return engine->descent().toReal();
0
493}-
494qreal QFontMetricsF::height() const-
495{-
496 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
497 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1161) : qt_noop());-
498-
499 return
never executed: return (engine->ascent() + engine->descent()).toReal();
(engine->ascent() + engine->descent()).toReal();
never executed: return (engine->ascent() + engine->descent()).toReal();
0
500}-
501qreal QFontMetricsF::leading() const-
502{-
503 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
504 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1176) : qt_noop());-
505 return
never executed: return engine->leading().toReal();
engine->leading().toReal();
never executed: return engine->leading().toReal();
0
506}-
507qreal QFontMetricsF::lineSpacing() const-
508{-
509 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
510 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1190) : qt_noop());-
511 return
never executed: return (engine->leading() + engine->ascent() + engine->descent()).toReal();
(engine->leading() + engine->ascent() + engine->descent()).toReal();
never executed: return (engine->leading() + engine->ascent() + engine->descent()).toReal();
0
512}-
513qreal QFontMetricsF::minLeftBearing() const-
514{-
515 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
516 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1207) : qt_noop());-
517 return
never executed: return engine->minLeftBearing();
engine->minLeftBearing();
never executed: return engine->minLeftBearing();
0
518}-
519qreal QFontMetricsF::minRightBearing() const-
520{-
521 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
522 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1224) : qt_noop());-
523 return
never executed: return engine->minRightBearing();
engine->minRightBearing();
never executed: return engine->minRightBearing();
0
524}-
525-
526-
527-
528-
529qreal QFontMetricsF::maxWidth() const-
530{-
531 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
532 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1234) : qt_noop());-
533 return
never executed: return engine->maxCharWidth();
engine->maxCharWidth();
never executed: return engine->maxCharWidth();
0
534}-
535-
536-
537-
538-
539-
540qreal QFontMetricsF::xHeight() const-
541{-
542 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
543 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1245) : qt_noop());-
544 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
545 return
never executed: return d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent().toReal();
d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent().toReal();
never executed: return d->smallCapsFontPrivate()->engineForScript(QChar::Script_Common)->ascent().toReal();
0
546 return
never executed: return engine->xHeight().toReal();
engine->xHeight().toReal();
never executed: return engine->xHeight().toReal();
0
547}-
548-
549-
550-
551-
552-
553-
554qreal QFontMetricsF::averageCharWidth() const-
555{-
556 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
557 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1259) : qt_noop());-
558 return
never executed: return engine->averageCharWidth().toReal();
engine->averageCharWidth().toReal();
never executed: return engine->averageCharWidth().toReal();
0
559}-
560-
561-
562-
563-
564-
565bool QFontMetricsF::inFont(QChar ch) const-
566{-
567 return
never executed: return inFontUcs4(ch.unicode());
inFontUcs4(ch.unicode());
never executed: return inFontUcs4(ch.unicode());
0
568}-
569-
570-
571-
572-
573-
574-
575-
576bool QFontMetricsF::inFontUcs4(uint ucs4) const-
577{-
578 const int script = QChar::script(ucs4);-
579 QFontEngine *engine = d->engineForScript(script);-
580 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1282) : qt_noop());-
581 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
582 return
never executed: return false;
false;
never executed: return false;
0
583 return
never executed: return engine->canRender(ucs4);
engine->canRender(ucs4);
never executed: return engine->canRender(ucs4);
0
584}-
585qreal QFontMetricsF::leftBearing(QChar ch) const-
586{-
587 const int script = ch.script();-
588 QFontEngine *engine;-
589 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
590 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
591 else-
592 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
593 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1308) : qt_noop());-
594 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
595 return
never executed: return 0;
0;
never executed: return 0;
0
596-
597 d->alterCharForCapitalization(ch);-
598-
599 glyph_t glyph = engine->glyphIndex(ch.unicode());-
600-
601 qreal lb;-
602 engine->getGlyphBearings(glyph, &lb);-
603 return
never executed: return lb;
lb;
never executed: return lb;
0
604}-
605qreal QFontMetricsF::rightBearing(QChar ch) const-
606{-
607 const int script = ch.script();-
608 QFontEngine *engine;-
609 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
610 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
611 else-
612 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
613 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1341) : qt_noop());-
614 if (engine->type() == QFontEngine::Box
engine->type()...ontEngine::BoxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
615 return
never executed: return 0;
0;
never executed: return 0;
0
616-
617 d->alterCharForCapitalization(ch);-
618-
619 glyph_t glyph = engine->glyphIndex(ch.unicode());-
620-
621 qreal rb;-
622 engine->getGlyphBearings(glyph, 0, &rb);-
623 return
never executed: return rb;
rb;
never executed: return rb;
0
624-
625}-
626qreal QFontMetricsF::width(const QString &text) const-
627{-
628 int pos = text.indexOf(QLatin1Char('\x9c'));-
629 int len = (
(pos != -1)Description
TRUEnever evaluated
FALSEnever evaluated
pos != -1)
(pos != -1)Description
TRUEnever evaluated
FALSEnever evaluated
? pos : text.length();
0
630-
631 QStackTextEngine layout(text, QFont(d.data()));-
632 layout.itemize();-
633 return
never executed: return layout.width(0, len).toReal();
layout.width(0, len).toReal();
never executed: return layout.width(0, len).toReal();
0
634}-
635qreal QFontMetricsF::width(QChar ch) const-
636{-
637 if (ch.category() == QChar::Mark_NonSpacing
ch.category() ...ark_NonSpacingDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
638 return
never executed: return 0.;
0.;
never executed: return 0.;
0
639-
640 const int script = ch.script();-
641 QFontEngine *engine;-
642 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
643 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
644 else-
645 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
646 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1410) : qt_noop());-
647-
648 d->alterCharForCapitalization(ch);-
649-
650 glyph_t glyph = engine->glyphIndex(ch.unicode());-
651 QFixed advance;-
652-
653 QGlyphLayout glyphs;-
654 glyphs.numGlyphs = 1;-
655 glyphs.glyphs = &glyph;-
656 glyphs.advances = &advance;-
657 engine->recalcAdvances(&glyphs, 0);-
658-
659 return
never executed: return advance.toReal();
advance.toReal();
never executed: return advance.toReal();
0
660}-
661QRectF QFontMetricsF::boundingRect(const QString &text) const-
662{-
663 int len = text.length();-
664 if (len == 0
len == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
665 return
never executed: return QRectF();
QRectF();
never executed: return QRectF();
0
666-
667 QStackTextEngine layout(text, QFont(d.data()));-
668 layout.itemize();-
669 glyph_metrics_t gm = layout.boundingBox(0, len);-
670 return
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
QRectF(gm.x.toReal(), gm.y.toReal(),
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
0
671 gm.width.toReal(), gm.height.toReal());
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
0
672}-
673QRectF QFontMetricsF::boundingRect(QChar ch) const-
674{-
675 const int script = ch.script();-
676 QFontEngine *engine;-
677 if (d->capital == QFont::SmallCaps
d->capital == QFont::SmallCapsDescription
TRUEnever evaluated
FALSEnever evaluated
&& ch.isLower()
ch.isLower()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
678 engine = d->smallCapsFontPrivate()->engineForScript(script);
never executed: engine = d->smallCapsFontPrivate()->engineForScript(script);
0
679 else-
680 engine = d->engineForScript(script);
never executed: engine = d->engineForScript(script);
0
681 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1480) : qt_noop());-
682-
683 d->alterCharForCapitalization(ch);-
684-
685 glyph_t glyph = engine->glyphIndex(ch.unicode());-
686-
687 glyph_metrics_t gm = engine->boundingBox(glyph);-
688 return
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
0
689}-
690QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString& text,-
691 int tabStops, int *tabArray) const-
692{-
693 int tabArrayLen = 0;-
694 if (tabArray
tabArrayDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
695 while (tabArray[tabArrayLen]
tabArray[tabArrayLen]Description
TRUEnever evaluated
FALSEnever evaluated
)
0
696 tabArrayLen++;
never executed: tabArrayLen++;
0
697-
698 QRectF rb;-
699 qt_format_text(QFont(d.data()), rect, flags | Qt::TextDontPrint, text, &rb, tabStops, tabArray,-
700 tabArrayLen, 0);-
701 return
never executed: return rb;
rb;
never executed: return rb;
0
702}-
703QSizeF QFontMetricsF::size(int flags, const QString &text, int tabStops, int *tabArray) const-
704{-
705 return
never executed: return boundingRect(QRectF(), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
boundingRect(QRectF(), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
never executed: return boundingRect(QRectF(), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
0
706}-
707QRectF QFontMetricsF::tightBoundingRect(const QString &text) const-
708{-
709 if (text.length() == 0
text.length() == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
710 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
711-
712 QStackTextEngine layout(text, QFont(d.data()));-
713 layout.itemize();-
714 glyph_metrics_t gm = layout.tightBoundingBox(0, text.length());-
715 return
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
never executed: return QRectF(gm.x.toReal(), gm.y.toReal(), gm.width.toReal(), gm.height.toReal());
0
716}-
717QString QFontMetricsF::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags) const-
718{-
719 QString _text = text;-
720 if (!(flags & Qt::TextLongestVariant)
!(flags & Qt::...ongestVariant)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
721 int posA = 0;-
722 int posB = _text.indexOf(QLatin1Char('\x9c'));-
723 while (posB >= 0
posB >= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
724 QString portion = _text.mid(posA, posB - posA);-
725 if (size(flags, portion).width() <= width
size(flags, po...dth() <= widthDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
726 return
never executed: return portion;
portion;
never executed: return portion;
0
727 posA = posB + 1;-
728 posB = _text.indexOf(QLatin1Char('\x9c'), posA);-
729 }
never executed: end of block
0
730 _text = _text.mid(posA);-
731 }
never executed: end of block
0
732 QStackTextEngine engine(_text, QFont(d.data()));-
733 return
never executed: return engine.elidedText(mode, QFixed::fromReal(width), flags);
engine.elidedText(mode, QFixed::fromReal(width), flags);
never executed: return engine.elidedText(mode, QFixed::fromReal(width), flags);
0
734}-
735-
736-
737-
738-
739-
740-
741-
742qreal QFontMetricsF::underlinePos() const-
743{-
744 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
745 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1678) : qt_noop());-
746 return
never executed: return engine->underlinePosition().toReal();
engine->underlinePosition().toReal();
never executed: return engine->underlinePosition().toReal();
0
747}-
748-
749-
750-
751-
752-
753-
754-
755qreal QFontMetricsF::overlinePos() const-
756{-
757 return
never executed: return ascent() + 1;
ascent() + 1;
never executed: return ascent() + 1;
0
758}-
759-
760-
761-
762-
763-
764-
765-
766qreal QFontMetricsF::strikeOutPos() const-
767{-
768 return
never executed: return ascent() / 3.;
ascent() / 3.;
never executed: return ascent() / 3.;
0
769}-
770-
771-
772-
773-
774-
775-
776-
777qreal QFontMetricsF::lineWidth() const-
778{-
779 QFontEngine *engine = d->engineForScript(QChar::Script_Common);-
780 ((!(engine != 0)) ? qt_assert("engine != 0",__FILE__,1713) : qt_noop());-
781 return
never executed: return engine->lineThickness().toReal();
engine->lineThickness().toReal();
never executed: return engine->lineThickness().toReal();
0
782}-
783-
784-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9