src/gui/text/qfontdatabase_s60.cpp
changeset 30 5dc02b23752f
parent 29 b72c6db6890b
child 33 3e2da88830cd
--- a/src/gui/text/qfontdatabase_s60.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/src/gui/text/qfontdatabase_s60.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -49,12 +49,12 @@
 #include <private/qt_s60_p.h>
 #include "qendian.h"
 #include <private/qcore_symbian_p.h>
-#ifdef QT_NO_FREETYPE
+#if defined(QT_NO_FREETYPE)
 #include <openfont.h>
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #include <graphics/openfontrasterizer.h> // COpenFontRasterizer has moved to a new header file
 #endif // SYMBIAN_ENABLE_SPLIT_HEADERS
-#endif // QT_NO_FREETYPE
+#endif
 
 QT_BEGIN_NAMESPACE
 
@@ -91,7 +91,7 @@
     return result;
 }
 
-#ifdef QT_NO_FREETYPE
+#if defined(QT_NO_FREETYPE)
 class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras
 {
 public:
@@ -100,41 +100,16 @@
 
     const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const;
 
-#ifndef Q_SYMBIAN_HAS_FONTTABLE_API
-    struct CFontFromFontStoreReleaser {
-        static inline void cleanup(CFont *font)
-        {
-            if (!font)
-                return;
-            const QSymbianFontDatabaseExtrasImplementation *dbExtras =
-                    static_cast<const QSymbianFontDatabaseExtrasImplementation*>(privateDb()->symbianExtras);
-            dbExtras->m_store->ReleaseFont(font);
-        }
-    };
-#endif // !Q_SYMBIAN_HAS_FONTTABLE_API
-
-    struct CFontFromScreenDeviceReleaser {
-        static inline void cleanup(CFont *font)
-        {
-            if (!font)
-                return;
-            QS60Data::screenDevice()->ReleaseFont(font);
-        }
-    };
-
 private:
-#ifndef Q_SYMBIAN_HAS_FONTTABLE_API
     RHeap* m_heap;
     CFontStore *m_store;
     COpenFontRasterizer *m_rasterizer;
     mutable QList<const QSymbianTypeFaceExtras *> m_extras;
-#endif // !Q_SYMBIAN_HAS_FONTTABLE_API
     mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash;
 };
 
 QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation()
 {
-#ifndef Q_SYMBIAN_HAS_FONTTABLE_API
     QStringList filters;
     filters.append(QLatin1String("*.ttf"));
     filters.append(QLatin1String("*.ccc"));
@@ -156,14 +131,10 @@
         TPtrC fontFilePtr(qt_QString2TPtrC(fontFile));
         QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr));
     }
-#endif // !Q_SYMBIAN_HAS_FONTTABLE_API
 }
 
 QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation()
 {
-#ifdef Q_SYMBIAN_HAS_FONTTABLE_API
-    qDeleteAll(m_extrasHash);
-#else // Q_SYMBIAN_HAS_FONTTABLE_API
     typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator;
     for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) {
         m_store->ReleaseFont((*p)->fontOwner());
@@ -172,7 +143,6 @@
 
     delete m_store;
     m_heap->Close();
-#endif // Q_SYMBIAN_HAS_FONTTABLE_API
 }
 
 #ifndef FNTSTORE_H_INLINES_SUPPORT_FMM
@@ -197,37 +167,26 @@
 {
     const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic));
     if (!m_extrasHash.contains(searchKey)) {
+        CFont* font = NULL;
         TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1);
         if (bold)
             searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
         if (italic)
             searchSpec.iFontStyle.SetPosture(EPostureItalic);
-
-        CFont* font = NULL;
-#ifdef Q_SYMBIAN_HAS_FONTTABLE_API
-        const TInt err = QS60Data::screenDevice()->GetNearestFontToDesignHeightInPixels(font, searchSpec);
-        Q_ASSERT(err == KErrNone && font);
-        QScopedPointer<CFont, CFontFromScreenDeviceReleaser> sFont(font);
-        QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font);
-        sFont.take();
-        m_extrasHash.insert(searchKey, extras);
-#else // Q_SYMBIAN_HAS_FONTTABLE_API
         const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec);
         Q_ASSERT(err == KErrNone && font);
         const CBitmapFont *bitmapFont = static_cast<CBitmapFont*>(font);
         COpenFont *openFont =
 #ifdef FNTSTORE_H_INLINES_SUPPORT_FMM
-            bitmapFont->OpenFont();
-#else // FNTSTORE_H_INLINES_SUPPORT_FMM
+            bitmapFont->openFont();
+#else
             OpenFontFromBitmapFont(bitmapFont);
 #endif // FNTSTORE_H_INLINES_SUPPORT_FMM
         const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib();
         const QString foundKey =
                 QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length());
         if (!m_extrasHash.contains(foundKey)) {
-            QScopedPointer<CFont, CFontFromFontStoreReleaser> sFont(font);
             QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont);
-            sFont.take();
             m_extras.append(extras);
             m_extrasHash.insert(searchKey, extras);
             m_extrasHash.insert(foundKey, extras);
@@ -235,11 +194,10 @@
             m_store->ReleaseFont(font);
             m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey));
         }
-#endif // Q_SYMBIAN_HAS_FONTTABLE_API
     }
     return m_extrasHash.value(searchKey);
 }
-#else // QT_NO_FREETYPE
+#else
 class QFontEngineFTS60 : public QFontEngineFT
 {
 public:
@@ -251,7 +209,7 @@
 {
     default_hint_style = HintFull;
 }
-#endif // QT_NO_FREETYPE
+#endif // defined(QT_NO_FREETYPE)
 
 /*
  QFontEngineS60::pixelsToPoints, QFontEngineS60::pointsToPixels, QFontEngineMultiS60::QFontEngineMultiS60
@@ -303,12 +261,12 @@
     if(!db || db->count)
         return;
 
-#ifdef QT_NO_FREETYPE
+#if defined(QT_NO_FREETYPE)
     if (!db->symbianExtras)
         db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation;
 
     QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock);
-
+    
     const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces();
     const QSymbianFontDatabaseExtrasImplementation *dbExtras =
             static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
@@ -320,7 +278,6 @@
         TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11);
         if (QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec) != KErrNone)
             continue;
-        QScopedPointer<CFont, QSymbianFontDatabaseExtrasImplementation::CFontFromScreenDeviceReleaser> sFont(font);
         if (font->TypeUid() == KCFbsFontUid) {
             TOpenFontFaceAttrib faceAttrib;
             const CFbsFont *cfbsFont = static_cast<const CFbsFont *>(font);
@@ -361,13 +318,14 @@
 
             fontAdded = true;
         }
+        QS60Data::screenDevice()->ReleaseFont(font);
     }
 
     Q_ASSERT(fontAdded);
     
-    lock.relock();
+	lock.relock();
 
-#else // QT_NO_FREETYPE
+#else // defined(QT_NO_FREETYPE)
     QDir dir(QDesktopServices::storageLocation(QDesktopServices::FontsLocation));
     dir.setNameFilters(QStringList() << QLatin1String("*.ttf")
                        << QLatin1String("*.ttc") << QLatin1String("*.pfa")
@@ -376,7 +334,7 @@
         const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));
         db->addTTFile(file);
     }
-#endif // QT_NO_FREETYPE
+#endif // defined(QT_NO_FREETYPE)
 }
 
 static inline void load(const QString &family = QString(), int script = -1)
@@ -458,13 +416,13 @@
         const QString fontFamily = desc.family->name;
         QFontDef request = req;
         request.family = fontFamily;
-#ifdef QT_NO_FREETYPE
+#if defined(QT_NO_FREETYPE)
         const QSymbianFontDatabaseExtrasImplementation *dbExtras =
                 static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
         const QSymbianTypeFaceExtras *typeFaceExtras =
                 dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal);
         fe = new QFontEngineS60(request, typeFaceExtras);
-#else // QT_NO_FREETYPE
+#else
         QFontEngine::FaceId faceId;
         const QtFontFamily * const reqQtFontFamily = db->family(fontFamily);
         faceId.filename = reqQtFontFamily->fontFilename;
@@ -475,7 +433,7 @@
             fe = fte;
         else
             delete fte;
-#endif // QT_NO_FREETYPE
+#endif
 
         Q_ASSERT(fe);
         if (script == QUnicodeTables::Common