diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index 5e168c6..3eb7d34 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -230,14 +230,14 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c CFont* font = NULL; #ifdef Q_SYMBIAN_HAS_FONTTABLE_API const TInt err = S60->screenDevice()->GetNearestFontToDesignHeightInPixels(font, searchSpec); - Q_ASSERT(err == KErrNone && font); + Q_ASSERT(err == KErrNone && font && font->TypeUid() == KCFbsFontUid); 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); + Q_ASSERT(err == KErrNone && font && font->TypeUid() == KCFbsFontUid); const CBitmapFont *bitmapFont = static_cast(font); COpenFont *openFont = #ifdef FNTSTORE_H_INLINES_SUPPORT_FMM @@ -335,23 +335,20 @@ static bool addFontToScreenDevice(int screenDeviceFontIndex, const QSymbianFontDatabaseExtrasImplementation *dbExtras) { TTypefaceSupport typefaceSupport; - S60->screenDevice()->TypefaceSupport(typefaceSupport, screenDeviceFontIndex); - CFont *font; // We have to get a font instance in order to know all the details - TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11); - if (S60->screenDevice()->GetNearestFontInPixels(font, fontSpec) != KErrNone) - return false; - QScopedPointer sFont(font); - if (font->TypeUid() != KCFbsFontUid) + S60->screenDevice()->TypefaceSupport(typefaceSupport, screenDeviceFontIndex); + const QString familyName((const QChar *)typefaceSupport.iTypeface.iName.Ptr(), + typefaceSupport.iTypeface.iName.Length()); + const QSymbianTypeFaceExtras *typeFaceExtras = + dbExtras->extras(familyName, false, false); + if (!typeFaceExtras) return false; - TOpenFontFaceAttrib faceAttrib; - const CFbsFont *cfbsFont = static_cast(font); - cfbsFont->GetFaceAttrib(faceAttrib); + TOpenFontFaceAttrib faceAttrib; + typeFaceExtras->faceAttrib(faceAttrib); QtFontStyle::Key styleKey; styleKey.style = faceAttrib.IsItalic()?QFont::StyleItalic:QFont::StyleNormal; styleKey.weight = faceAttrib.IsBold()?QFont::Bold:QFont::Normal; - QString familyName((const QChar *)typefaceSupport.iTypeface.iName.Ptr(), typefaceSupport.iTypeface.iName.Length()); QtFontFamily *family = privateDb()->family(familyName, true); family->fixedPitch = faceAttrib.IsMonoWidth(); QtFontFoundry *foundry = family->foundry(QString(), true); @@ -359,8 +356,6 @@ static bool addFontToScreenDevice(int screenDeviceFontIndex, style->smoothScalable = typefaceSupport.iIsScalable; style->pixelSize(0, true); - const QSymbianTypeFaceExtras *typeFaceExtras = - dbExtras->extras(familyName, faceAttrib.IsBold(), faceAttrib.IsItalic()); const QByteArray os2Table = typeFaceExtras->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); const unsigned char* data = reinterpret_cast(os2Table.constData()); const unsigned char* ulUnicodeRange = data + 42; diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index bf30e1c..70b4b9e 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -102,6 +102,11 @@ bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *len return result; } +void QSymbianTypeFaceExtras::faceAttrib(TOpenFontFaceAttrib &attrib) const +{ + const CFbsFont *cfbsFont = static_cast(m_cFont); + cfbsFont->GetFaceAttrib(attrib); +} #else // Q_SYMBIAN_HAS_FONTTABLE_API QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont) : m_cFont(cFont) @@ -153,6 +158,11 @@ bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *len m_trueTypeExtension->ReleaseTrueTypeTable(table); return result; } + +void QSymbianTypeFaceExtras::faceAttrib(TOpenFontFaceAttrib &attrib) const +{ + attrib = *m_openFont->FaceAttrib(); +} #endif // Q_SYMBIAN_HAS_FONTTABLE_API const uchar *QSymbianTypeFaceExtras::cmap() const diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index c65ce55..31a4e4b 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -83,6 +83,7 @@ public: CFont *fontOwner() const; bool isSymbolCMap() const; QFixed unitsPerEm() const; + void faceAttrib(TOpenFontFaceAttrib &attrib) const; private: CFont* m_cFont;