diff options
Diffstat (limited to 'src/gui/text/qfontengine.cpp')
-rw-r--r-- | src/gui/text/qfontengine.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 6814b9f2b5..61705842db 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -562,6 +562,16 @@ qreal QFontEngine::minRightBearing() const return m_minRightBearing; } +glyph_metrics_t QFontEngine::boundingBox(const QGlyphLayout &glyphs) +{ + QFixed w; + for (int i = 0; i < glyphs.numGlyphs; ++i) + w += glyphs.effectiveAdvance(i); + const QFixed leftBearing = firstLeftBearing(glyphs); + const QFixed rightBearing = lastRightBearing(glyphs); + return glyph_metrics_t(leftBearing, -(ascent()), w - leftBearing - rightBearing, ascent() + descent(), w, 0); +} + glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs) { glyph_metrics_t overall; @@ -1452,6 +1462,17 @@ bool QFontEngine::hasUnreliableGlyphOutline() const return glyphFormat == QFontEngine::Format_ARGB; } +QFixed QFontEngine::firstLeftBearing(const QGlyphLayout &glyphs) +{ + if (glyphs.numGlyphs >= 1) { + glyph_t glyph = glyphs.glyphs[0]; + glyph_metrics_t gi = boundingBox(glyph); + if (gi.isValid()) + return gi.leftBearing(); + } + return 0; +} + QFixed QFontEngine::lastRightBearing(const QGlyphLayout &glyphs) { if (glyphs.numGlyphs >= 1) { |