Index: qt5/qtbase/src/gui/text/qfontengine.cpp =================================================================== --- qt5/qtbase/src/gui/text/qfontengine.cpp 2014-03-27 16:22:20.903105035 -0400 +++ qt5/qtbase/src/gui/text/qfontengine.cpp 2014-03-27 16:24:11.415104759 -0400 @@ -215,6 +215,13 @@ } glyphFormat = -1; + m_glyphMargin = -1; + QString fontmargin = QString::fromLocal8Bit(qgetenv("QT_QPA_FONTMARGIN")); + if (!fontmargin.isEmpty()) { + bool ok = false; + int margin = fontmargin.toInt(&ok, 10); + if ( ok == true ) { m_glyphMargin = margin; } + } m_subPixelPositionCount = 0; #ifdef QT_BUILD_INTERNAL Index: qt5/qtbase/src/gui/text/qfontengine_ft.cpp =================================================================== --- qt5/qtbase/src/gui/text/qfontengine_ft.cpp 2014-03-27 16:22:39.003104990 -0400 +++ qt5/qtbase/src/gui/text/qfontengine_ft.cpp 2014-03-27 16:25:23.615104579 -0400 @@ -654,6 +654,13 @@ const QByteArray env = qgetenv("QT_NO_FT_CACHE"); cacheEnabled = env.isEmpty() || env.toInt() == 0; m_subPixelPositionCount = 4; + m_glyphMargin = -1; + QString fontmargin = QString::fromLocal8Bit(qgetenv("QT_QPA_FONTMARGIN")); + if (!fontmargin.isEmpty()) { + bool ok = false; + int margin = fontmargin.toInt(&ok, 10); + if ( ok == true ) { m_glyphMargin = margin; } + } } QFontEngineFT::~QFontEngineFT() Index: qt5/qtbase/src/gui/text/qfontengine_ft_p.h =================================================================== --- qt5/qtbase/src/gui/text/qfontengine_ft_p.h 2014-03-27 16:22:34.391105001 -0400 +++ qt5/qtbase/src/gui/text/qfontengine_ft_p.h 2014-03-27 16:24:22.799104731 -0400 @@ -263,7 +263,11 @@ virtual void unlockAlphaMapForGlyph(); virtual void removeGlyphFromCache(glyph_t glyph); - virtual int glyphMargin(QFontEngineGlyphCache::Type /* type */) { return 0; } + virtual int glyphMargin(QFontEngineGlyphCache::Type /* type */) + { + if ( m_glyphMargin >= 0 ) { return m_glyphMargin; } + return 0; + } virtual int glyphCount() const; @@ -305,6 +309,7 @@ virtual QFontEngine *cloneWithSize(qreal pixelSize) const; bool initFromFontEngine(const QFontEngineFT *fontEngine); + int m_glyphMargin; HintStyle defaultHintStyle() const { return default_hint_style; } protected: Index: qt5/qtbase/src/gui/text/qfontengine_p.h =================================================================== --- qt5/qtbase/src/gui/text/qfontengine_p.h 2014-03-27 16:22:27.651105018 -0400 +++ qt5/qtbase/src/gui/text/qfontengine_p.h 2014-03-27 16:24:26.175104722 -0400 @@ -238,7 +238,11 @@ virtual Type type() const = 0; virtual int glyphCount() const; - virtual int glyphMargin(QFontEngineGlyphCache::Type type) { return type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0; } + virtual int glyphMargin(QFontEngineGlyphCache::Type type) + { + if ( m_glyphMargin >= 0 ) { return m_glyphMargin; } + return type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0; + } virtual QFontEngine *cloneWithSize(qreal /*pixelSize*/) const { return 0; } @@ -288,6 +292,7 @@ void loadKerningPairs(QFixed scalingFactor); int glyphFormat; + int m_glyphMargin; QImage currentlyLockedAlphaMap; int m_subPixelPositionCount; // Number of positions within a single pixel for this cache