Index: /trunk/src/gui/text/qfontdatabase_pm.cpp
===================================================================
--- /trunk/src/gui/text/qfontdatabase_pm.cpp	(revision 227)
+++ /trunk/src/gui/text/qfontdatabase_pm.cpp	(revision 228)
@@ -50,4 +50,5 @@
 #include FT_TYPES_H
 #include FT_TRUETYPE_TABLES_H
+#include FT_LCD_FILTER_H
 
 QT_BEGIN_NAMESPACE
@@ -195,5 +196,5 @@
             family->fixedPitch = face->face_flags & FT_FACE_FLAG_FIXED_WIDTH;
 
-            if (systems.isEmpty() || familyName == "Workplace Sans") {
+            if (systems.isEmpty() || familyName.compare("Workplace Sans")) {
                 // it was hard or impossible to determine the actual writing system
                 // of the font (as in case of OS/2 bitmap and PFB fonts for which it is
@@ -347,16 +348,25 @@
 static QFontEngine *loadEngine(const QFontDef &req, const QtFontDesc &desc)
 {
-    QFontEngineFT *fe = new QFontEnginePMFT(fontDescToFontDef(req, desc));
+    // @todo all these fixed so far; make configurable through the Registry
+    // on per-family basis
+    QFontEnginePMFT::HintStyle hintStyle = QFontEnginePMFT::HintFull;
+    bool autoHint = true;
+    QFontEngineFT::SubpixelAntialiasingType subPixel = QFontEngineFT::Subpixel_None;
+    int lcdFilter = FT_LCD_FILTER_DEFAULT;
+    bool useEmbeddedBitmap = true;
+
+    QFontEngine::FaceId faceId;
+    faceId.filename = desc.size->fileName;
+    faceId.index = desc.size->fileIndex;
+
+    QFontEngineFT *fe = new QFontEnginePMFT(fontDescToFontDef(req, desc), faceId,
+                                            desc.style->antialiased, hintStyle,
+                                            autoHint, subPixel, lcdFilter,
+                                            useEmbeddedBitmap);
     Q_ASSERT(fe);
-    if (fe) {
-        QFontEngine::FaceId faceId;
-        faceId.filename = desc.size->fileName;
-        faceId.index = desc.size->fileIndex;
-        fe->init(faceId, desc.style->antialiased);
-        if (fe->invalid()) {
-            FM_DEBUG("   --> invalid!\n");
-            delete fe;
-            fe = 0;
-        }
+    if (fe && fe->invalid()) {
+        FM_DEBUG("   --> invalid!\n");
+        delete fe;
+        fe = 0;
     }
     return fe;
Index: /trunk/src/gui/text/qfontengine_pm.cpp
===================================================================
--- /trunk/src/gui/text/qfontengine_pm.cpp	(revision 227)
+++ /trunk/src/gui/text/qfontengine_pm.cpp	(revision 228)
@@ -55,7 +55,31 @@
 // ------------------------------------------------------------------
 
-QFontEnginePMFT::QFontEnginePMFT(const QFontDef &fd)
+QFontEnginePMFT::QFontEnginePMFT(const QFontDef &fd, const FaceId &faceId,
+                                 bool antialias, HintStyle hintStyle,
+                                 bool autoHint, SubpixelAntialiasingType subPixel,
+                                 int lcdFilter, bool useEmbeddedBitmap)
     : QFontEngineFT(fd)
 {
+    subpixelType = subPixel;
+
+    default_hint_style = (QFontEngineFT::HintStyle)hintStyle;
+
+#if defined(FT_LOAD_FORCE_AUTOHINT)
+    if (autoHint)
+        default_load_flags |= FT_LOAD_FORCE_AUTOHINT;
+#endif
+
+    lcdFilterType = lcdFilter;
+    embeddedbitmap = useEmbeddedBitmap;
+
+    GlyphFormat defaultFormat = Format_None;
+    if (subpixelType != QFontEngineFT::Subpixel_None)
+        defaultFormat = Format_A32;
+    else if (antialias)
+        defaultFormat = Format_A8;
+    else
+        defaultFormat = Format_Mono;
+
+    init(faceId, antialias, defaultFormat);
 }
 
Index: /trunk/src/gui/text/qfontengine_pm_p.h
===================================================================
--- /trunk/src/gui/text/qfontengine_pm_p.h	(revision 227)
+++ /trunk/src/gui/text/qfontengine_pm_p.h	(revision 228)
@@ -71,5 +71,15 @@
 {
 public:
-    explicit QFontEnginePMFT(const QFontDef &fd);
+    enum HintStyle {
+        HintNone = QFontEngineFT::HintNone,
+        HintLight = QFontEngineFT::HintLight,
+        HintMedium = QFontEngineFT::HintMedium,
+        HintFull = QFontEngineFT::HintFull
+    };
+
+    explicit QFontEnginePMFT(const QFontDef &fd, const FaceId &faceId,
+                             bool antialias, HintStyle hintStyle,
+                             bool autoHint, SubpixelAntialiasingType subPixel,
+                             int lcdFilter, bool useEmbeddedBitmap);
     ~QFontEnginePMFT();
 };
