Rex Dieter b83b6ab
From 80e3108f5cd1e1850ec81a21100d79a0946addd7 Mon Sep 17 00:00:00 2001
Rex Dieter b83b6ab
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Rex Dieter b83b6ab
Date: Fri, 16 Mar 2012 11:13:55 +0200
Rex Dieter b83b6ab
Subject: [PATCH 72/74] Fix font cache check in QFontEngineFT::recalcAdvances()
Rex Dieter b83b6ab
MIME-Version: 1.0
Rex Dieter b83b6ab
Content-Type: text/plain; charset=UTF-8
Rex Dieter b83b6ab
Content-Transfer-Encoding: 8bit
Rex Dieter b83b6ab
Rex Dieter b83b6ab
Cached font was used regardless of the format, resulting in incorrect
Rex Dieter b83b6ab
advance in some cases when default format differed from the cached
Rex Dieter b83b6ab
format.
Rex Dieter b83b6ab
Rex Dieter b83b6ab
Task-number: QTBUG-24188
Rex Dieter b83b6ab
Change-Id: I39e4156bd9ba743afa7e106e934c90227fbf2b8b
Rex Dieter b83b6ab
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
Rex Dieter b83b6ab
(cherry picked from qtbase/2ea976c3a713535c2419d936d575e0b24545f0fa)
Rex Dieter b83b6ab
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Rex Dieter b83b6ab
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Rex Dieter b83b6ab
Reviewed-by: Jiang Jiang <gzjjgod@gmail.com>
Rex Dieter b83b6ab
---
Rex Dieter b83b6ab
 src/gui/text/qfontengine_ft.cpp | 4 +++-
Rex Dieter b83b6ab
 1 file changed, 3 insertions(+), 1 deletion(-)
Rex Dieter b83b6ab
Rex Dieter b83b6ab
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
Rex Dieter b83b6ab
index aecbf76..44a0aca 100644
Rex Dieter b83b6ab
--- a/src/gui/text/qfontengine_ft.cpp
Rex Dieter b83b6ab
+++ b/src/gui/text/qfontengine_ft.cpp
Rex Dieter b83b6ab
@@ -1603,7 +1603,9 @@ void QFontEngineFT::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlag
Rex Dieter b83b6ab
                    (flags & HB_ShaperFlag_UseDesignMetrics)) && FT_IS_SCALABLE(freetype->face);
Rex Dieter b83b6ab
     for (int i = 0; i < glyphs->numGlyphs; i++) {
Rex Dieter b83b6ab
         Glyph *g = defaultGlyphSet.getGlyph(glyphs->glyphs[i]);
Rex Dieter b83b6ab
-        if (g) {
Rex Dieter b83b6ab
+        // Since we are passing Format_None to loadGlyph, use same default format logic as loadGlyph
Rex Dieter b83b6ab
+        GlyphFormat acceptableFormat = (defaultFormat != Format_None) ? defaultFormat : Format_Mono;
Rex Dieter b83b6ab
+        if (g && g->format == acceptableFormat) {
Rex Dieter b83b6ab
             glyphs->advances_x[i] = design ? QFixed::fromFixed(g->linearAdvance) : QFixed(g->advance);
Rex Dieter b83b6ab
         } else {
Rex Dieter b83b6ab
             if (!face)
Rex Dieter b83b6ab
-- 
Rex Dieter b83b6ab
1.9.3
Rex Dieter b83b6ab