Fix QFont hinting preference with fontconfig
authorBalazs Kelemen <kbalazs@webkit.org>
Thu, 8 Mar 2012 16:02:15 +0000 (17:02 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 12 Mar 2012 22:29:37 +0000 (23:29 +0100)
Consider if the hinting preference of the QFont
is not PreferDefaultHinting.

Change-Id: I0f50b320356787b6c1eabee5f009e7d326a06925
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp

index 69ec3ba..28a99cf 100644 (file)
@@ -515,24 +515,37 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::
     FcCharSet *charset;
     if (match) {
         QFontEngineFT::HintStyle default_hint_style;
-
-        //hinting
-        int hint_style = 0;
-        if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
-            hint_style = QFontEngineFT::HintFull;
-        switch (hint_style) {
-        case FC_HINT_NONE:
-            default_hint_style = QFontEngineFT::HintNone;
-            break;
-        case FC_HINT_SLIGHT:
-            default_hint_style = QFontEngineFT::HintLight;
-            break;
-        case FC_HINT_MEDIUM:
-            default_hint_style = QFontEngineFT::HintMedium;
-            break;
-        default:
-            default_hint_style = QFontEngineFT::HintFull;
-            break;
+        if (f.hintingPreference != QFont::PreferDefaultHinting) {
+            switch (f.hintingPreference) {
+            case QFont::PreferNoHinting:
+                default_hint_style = QFontEngineFT::HintNone;
+                break;
+            case QFont::PreferVerticalHinting:
+                default_hint_style = QFontEngineFT::HintLight;
+                break;
+            case QFont::PreferFullHinting:
+            default:
+                default_hint_style = QFontEngineFT::HintFull;
+                break;
+            }
+        } else {
+            int hint_style = 0;
+            if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
+                hint_style = QFontEngineFT::HintFull;
+            switch (hint_style) {
+            case FC_HINT_NONE:
+                default_hint_style = QFontEngineFT::HintNone;
+                break;
+            case FC_HINT_SLIGHT:
+                default_hint_style = QFontEngineFT::HintLight;
+                break;
+            case FC_HINT_MEDIUM:
+                default_hint_style = QFontEngineFT::HintMedium;
+                break;
+            default:
+                default_hint_style = QFontEngineFT::HintFull;
+                break;
+            }
         }
         engine->setDefaultHintStyle(default_hint_style);