Fix scaled text rendering with the raster paint engine & FreeType
authorSimon Hausmann <simon.hausmann@nokia.com>
Mon, 17 Oct 2011 13:51:55 +0000 (15:51 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 17 Oct 2011 14:04:33 +0000 (16:04 +0200)
Before commit 070d9c00c488a5ee6811f04170cf488ead79bf80, the raster paint engine used
to call loadGlyphs() on the FT engine, which ensures that the glyphs are loaded
and (more importantly) that the correct transformation matrix is applied on the
freetype face. After commit 070d9c0 lockedAlphaMapForGlyph is called for each glyph,
which unfortunately doesn't respect the provided transformation matrix. Therefore
when drawing scaled text, it was never actually scaled.

This patch applies the combination of the fontengine transform and the requested
transform on the freetype face actually used, similarly to loadGlyphs.

Change-Id: I0956a9e71784582db6bb90475a001a63800773f4
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
src/gui/text/qfontengine_ft.cpp

index ecb717e..c43ccd0 100644 (file)
@@ -1823,6 +1823,13 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe
             gset = 0;
     }
 
+    if (gset) {
+        FT_Matrix m = matrix;
+        FT_Matrix_Multiply(&gset->transformationMatrix, &m);
+        FT_Set_Transform(freetype->face, &m, 0);
+        freetype->matrix = m;
+    }
+
     if (!gset || gset->outline_drawing || !loadGlyph(gset, glyphIndex, subPixelPosition,
                                                      neededFormat)) {
         unlockFace();