diff -r b72c6db6890b -r 5dc02b23752f src/gui/text/qfontdatabase_s60.cpp --- 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 #include "qendian.h" #include -#ifdef QT_NO_FREETYPE +#if defined(QT_NO_FREETYPE) #include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include // 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(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 m_extras; -#endif // !Q_SYMBIAN_HAS_FONTTABLE_API mutable QHash 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::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 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(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 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(db->symbianExtras); @@ -320,7 +278,6 @@ TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11); if (QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec) != KErrNone) continue; - QScopedPointer sFont(font); if (font->TypeUid() == KCFbsFontUid) { TOpenFontFaceAttrib faceAttrib; const CFbsFont *cfbsFont = static_cast(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(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