Changeset 769 for trunk/src/gui/text/qfontdatabase_s60.cpp
- Timestamp:
- Aug 2, 2010, 9:27:30 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.6.3 (added) merged: 768 /branches/vendor/nokia/qt/current merged: 767 /branches/vendor/nokia/qt/4.6.2 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/text/qfontdatabase_s60.cpp
r651 r769 51 51 #include <private/qcore_symbian_p.h> 52 52 #if defined(QT_NO_FREETYPE) 53 #include < OPENFONT.H>53 #include <> 54 54 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS 55 55 #include <graphics/openfontrasterizer.h> // COpenFontRasterizer has moved to a new header file … … 93 93 94 94 #if defined(QT_NO_FREETYPE) 95 class Q FontDatabaseS60StoreImplementation : public QFontDatabaseS60Store95 class Q 96 96 { 97 97 public: 98 Q FontDatabaseS60StoreImplementation();99 ~Q FontDatabaseS60StoreImplementation();100 101 const Q FontEngineS60Extensions *extension(const QString &typeface) const;98 QImplementation(); 99 ~QImplementation(); 100 101 const Q) const; 102 102 103 103 private: … … 105 105 CFontStore *m_store; 106 106 COpenFontRasterizer *m_rasterizer; 107 mutable QHash<QString, const QFontEngineS60Extensions *> m_extensions; 107 mutable QList<const QSymbianTypeFaceExtras *> m_extras; 108 mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash; 108 109 }; 109 110 110 QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation() 111 { 112 m_heap = User::ChunkHeap(NULL, 0x1000, 0x100000); 111 QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation() 112 { 113 QStringList filters; 114 filters.append(QLatin1String("*.ttf")); 115 filters.append(QLatin1String("*.ccc")); 116 filters.append(QLatin1String("*.ltt")); 117 const QFileInfoList fontFiles = alternativeFilePaths(QLatin1String("resource\\Fonts"), filters); 118 119 const TInt heapMinLength = 0x1000; 120 const TInt heapMaxLength = qMax(0x20000 * fontFiles.count(), heapMinLength); 121 m_heap = User::ChunkHeap(NULL, heapMinLength, heapMaxLength); 113 122 QT_TRAP_THROWING( 114 123 m_store = CFontStore::NewL(m_heap); … … 118 127 CleanupStack::Pop(m_rasterizer);); 119 128 120 QStringList filters;121 filters.append(QString::fromLatin1("*.ttf"));122 filters.append(QString::fromLatin1("*.ccc"));123 const QFileInfoList fontFiles = alternativeFilePaths(QString::fromLatin1("resource\\Fonts"), filters);124 129 foreach (const QFileInfo &fontFileInfo, fontFiles) { 125 130 const QString fontFile = QDir::toNativeSeparators(fontFileInfo.absoluteFilePath()); … … 128 133 } 129 134 } 130 QFontDatabaseS60StoreImplementation::~QFontDatabaseS60StoreImplementation() 131 { 132 typedef QHash<QString, const QFontEngineS60Extensions *>::iterator iterator; 133 for (iterator p = m_extensions.begin(); p != m_extensions.end(); ++p) { 135 136 QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation() 137 { 138 typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator; 139 for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) { 134 140 m_store->ReleaseFont((*p)->fontOwner()); 135 141 delete *p; … … 157 163 #endif // FNTSTORE_H_INLINES_SUPPORT_FMM 158 164 159 const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(const QString &typeface) const 160 { 161 if (!m_extensions.contains(typeface)) { 165 const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(const QString &typeface, 166 bool bold, bool italic) const 167 { 168 const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic)); 169 if (!m_extrasHash.contains(searchKey)) { 162 170 CFont* font = NULL; 163 TFontSpec spec(qt_QString2TPtrC(typeface), 1); 164 spec.iHeight = 1; 165 const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, spec); 171 TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1); 172 if (bold) 173 searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); 174 if (italic) 175 searchSpec.iFontStyle.SetPosture(EPostureItalic); 176 const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec); 166 177 Q_ASSERT(err == KErrNone && font); 167 178 const CBitmapFont *bitmapFont = static_cast<CBitmapFont*>(font); … … 172 183 OpenFontFromBitmapFont(bitmapFont); 173 184 #endif // FNTSTORE_H_INLINES_SUPPORT_FMM 174 m_extensions.insert(typeface, new QFontEngineS60Extensions(font, openFont)); 175 } 176 return m_extensions.value(typeface); 185 const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib(); 186 const QString foundKey = 187 QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length()); 188 if (!m_extrasHash.contains(foundKey)) { 189 QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont); 190 m_extras.append(extras); 191 m_extrasHash.insert(searchKey, extras); 192 m_extrasHash.insert(foundKey, extras); 193 } else { 194 m_store->ReleaseFont(font); 195 m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey)); 196 } 197 } 198 return m_extrasHash.value(searchKey); 177 199 } 178 200 #else … … 241 263 242 264 #if defined(QT_NO_FREETYPE) 243 if (!db->s 60Store)244 db->s 60Store = new QFontDatabaseS60StoreImplementation;265 if (!db->s) 266 db->sImplementation; 245 267 246 268 QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock); 247 269 248 270 const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces(); 249 const Q FontDatabaseS60StoreImplementation *store=250 static_cast<const Q FontDatabaseS60StoreImplementation*>(db->s60Store);271 const Q = 272 static_cast<const Q); 251 273 bool fontAdded = false; 252 274 for (int i = 0; i < numTypeFaces; i++) { … … 274 296 style->pixelSize(0, true); 275 297 276 const QFontEngineS60Extensions *extension = store->extension(familyName); 277 const QByteArray os2Table = extension->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); 298 const QSymbianTypeFaceExtras *typeFaceExtras = 299 dbExtras->extras(familyName, faceAttrib.IsBold(), faceAttrib.IsItalic()); 300 const QByteArray os2Table = typeFaceExtras->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); 278 301 const unsigned char* data = reinterpret_cast<const unsigned char*>(os2Table.constData()); 279 302 const unsigned char* ulUnicodeRange = data + 42; … … 333 356 } 334 357 358 359 360 361 362 335 363 bool QFontDatabase::supportsThreadedFontRendering() 336 364 { … … 390 418 request.family = fontFamily; 391 419 #if defined(QT_NO_FREETYPE) 392 const QFontDatabaseS60StoreImplementation *store = 393 static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); 394 const QFontEngineS60Extensions *extension = store->extension(fontFamily); 395 fe = new QFontEngineS60(request, extension); 420 const QSymbianFontDatabaseExtrasImplementation *dbExtras = 421 static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras); 422 const QSymbianTypeFaceExtras *typeFaceExtras = 423 dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal); 424 fe = new QFontEngineS60(request, typeFaceExtras); 396 425 #else 397 426 QFontEngine::FaceId faceId;
Note:
See TracChangeset
for help on using the changeset viewer.