Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git i/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h w/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
- index 998d6cf..fc923d1 100644
- --- i/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
- +++ w/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
- @@ -315,7 +315,6 @@ private:
- friend class QFontEngineFTRawFont;
- friend class QFontconfigDatabase;
- friend class QFreeTypeFontDatabase;
- - friend class QCoreTextFontDatabase;
- friend class QFontEngineMultiFontConfig;
- int loadFlags(QGlyphSet *set, GlyphFormat format, int flags, bool &hsubpixel, int &vfactor) const;
- diff --git i/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm w/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
- index b809770..71bbbfc 100644
- --- i/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
- +++ w/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
- @@ -112,12 +112,8 @@ static NSInteger languageMapSort(id obj1, id obj2, void *context)
- }
- #endif
- -QCoreTextFontDatabase::QCoreTextFontDatabase(bool useFreeType)
- -#ifndef QT_NO_FREETYPE
- - : m_useFreeType(useFreeType)
- -#endif
- +QCoreTextFontDatabase::QCoreTextFontDatabase()
- {
- - Q_UNUSED(useFreeType)
- #ifdef Q_OS_MACX
- QSettings appleSettings(QLatin1String("apple.com"));
- QVariant appleValue = appleSettings.value(QLatin1String("AppleAntiAliasingThreshold"));
- @@ -393,35 +389,24 @@ static QByteArray filenameForCFUrl(CFURLRef url)
- extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef);
- -QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr)
- +template <>
- +QFontEngine *QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>::fontEngine(const QFontDef &fontDef, void *usrPtr)
- {
- CTFontDescriptorRef descriptor = static_cast<CTFontDescriptorRef>(usrPtr);
- -#ifndef QT_NO_FREETYPE
- - if (m_useFreeType) {
- - QCFType<CFURLRef> url(static_cast<CFURLRef>(CTFontDescriptorCopyAttribute(descriptor, kCTFontURLAttribute)));
- -
- - QByteArray filename;
- - if (url)
- - filename = filenameForCFUrl(url);
- -
- - return freeTypeFontEngine(f, filename);
- - }
- -#endif
- -
- // Since we do not pass in the destination DPI to CoreText when making
- // the font, we need to pass in a point size which is scaled to include
- // the DPI. The default DPI for the screen is 72, thus the scale factor
- // is destinationDpi / 72, but since pixelSize = pointSize / 72 * dpi,
- // the pixelSize is actually the scaled point size for the destination
- // DPI, and we can use that directly.
- - qreal scaledPointSize = f.pixelSize;
- + qreal scaledPointSize = fontDef.pixelSize;
- - CGAffineTransform matrix = qt_transform_from_fontdef(f);
- + CGAffineTransform matrix = qt_transform_from_fontdef(fontDef);
- CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix);
- if (font) {
- - QFontEngine *engine = new QCoreTextFontEngine(font, f);
- - engine->fontDef = f;
- + QFontEngine *engine = new QCoreTextFontEngine(font, fontDef);
- + engine->fontDef = fontDef;
- CFRelease(font);
- return engine;
- }
- @@ -429,6 +414,24 @@ QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr)
- return NULL;
- }
- +#ifndef QT_NO_FREETYPE
- +template <>
- +QFontEngine *QCoreTextFontDatabaseEngineFactory<QFontEngineFT>::fontEngine(const QFontDef &fontDef, void *usrPtr)
- +{
- + CTFontDescriptorRef descriptor = static_cast<CTFontDescriptorRef>(usrPtr);
- +
- + QCFType<CFURLRef> url(static_cast<CFURLRef>(CTFontDescriptorCopyAttribute(descriptor, kCTFontURLAttribute)));
- +
- + QByteArray filename;
- + if (url)
- + filename = filenameForCFUrl(url);
- +
- + QFontEngine::FaceId faceId;
- + faceId.filename = filename;
- + return QFontEngineFT::create(fontDef, faceId);
- +}
- +#endif
- +
- static void releaseFontData(void* info, const void* data, size_t size)
- {
- Q_UNUSED(data);
- @@ -436,31 +439,9 @@ static void releaseFontData(void* info, const void* data, size_t size)
- delete (QByteArray*)info;
- }
- -QFontEngine *QCoreTextFontDatabase::fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
- +template <>
- +QFontEngine *QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>::fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
- {
- -#ifndef QT_NO_FREETYPE
- - if (m_useFreeType) {
- - QByteArray *fontDataCopy = new QByteArray(fontData);
- - QCFType<CGDataProviderRef> dataProvider = CGDataProviderCreateWithData(fontDataCopy,
- - fontDataCopy->constData(), fontDataCopy->size(), releaseFontData);
- - QCFType<CGFontRef> cgFont(CGFontCreateWithDataProvider(dataProvider));
- -
- - if (!cgFont) {
- - qWarning("QCoreTextFontDatabase::fontEngine: CGFontCreateWithDataProvider failed");
- - return Q_NULLPTR;
- - }
- -
- - QFontDef fontDef;
- - fontDef.pixelSize = pixelSize;
- - fontDef.pointSize = pixelSize * 72.0 / qt_defaultDpi();
- - fontDef.hintingPreference = hintingPreference;
- - CGAffineTransform transform = qt_transform_from_fontdef(fontDef);
- - QCFType<CTFontRef> ctFont(CTFontCreateWithGraphicsFont(cgFont, fontDef.pixelSize, &transform, Q_NULLPTR));
- - QCFType<CFURLRef> url(static_cast<CFURLRef>(CTFontCopyAttribute(ctFont, kCTFontURLAttribute)));
- - return freeTypeFontEngine(fontDef, filenameForCFUrl(url), fontData);
- - }
- -#endif
- -
- Q_UNUSED(hintingPreference);
- QByteArray* fontDataCopy = new QByteArray(fontData);
- @@ -483,6 +464,34 @@ QFontEngine *QCoreTextFontDatabase::fontEngine(const QByteArray &fontData, qreal
- return fontEngine;
- }
- +#ifndef QT_NO_FREETYPE
- +template <>
- +QFontEngine *QCoreTextFontDatabaseEngineFactory<QFontEngineFT>::fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
- +{
- + QByteArray *fontDataCopy = new QByteArray(fontData);
- + QCFType<CGDataProviderRef> dataProvider = CGDataProviderCreateWithData(fontDataCopy,
- + fontDataCopy->constData(), fontDataCopy->size(), releaseFontData);
- + QCFType<CGFontRef> cgFont(CGFontCreateWithDataProvider(dataProvider));
- +
- + if (!cgFont) {
- + qWarning("QCoreTextFontDatabase::fontEngine: CGFontCreateWithDataProvider failed");
- + return Q_NULLPTR;
- + }
- +
- + QFontDef fontDef;
- + fontDef.pixelSize = pixelSize;
- + fontDef.pointSize = pixelSize * 72.0 / qt_defaultDpi();
- + fontDef.hintingPreference = hintingPreference;
- + CGAffineTransform transform = qt_transform_from_fontdef(fontDef);
- + QCFType<CTFontRef> ctFont(CTFontCreateWithGraphicsFont(cgFont, fontDef.pixelSize, &transform, Q_NULLPTR));
- + QCFType<CFURLRef> url(static_cast<CFURLRef>(CTFontCopyAttribute(ctFont, kCTFontURLAttribute)));
- +
- + QFontEngine::FaceId faceId;
- + faceId.filename = filenameForCFUrl(url);
- + return QFontEngineFT::create(fontDef, faceId, fontData);
- +}
- +#endif
- +
- QFont::StyleHint styleHintFromNSString(NSString *style)
- {
- if ([style isEqual: @"sans-serif"])
- @@ -615,17 +624,29 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo
- return fallbackLists[styleLookupKey.arg(styleHint)];
- }
- -CFArrayRef QCoreTextFontDatabase::createDescriptorArrayForFont(CTFontRef font, const QString &fileName)
- +template <>
- +CFArrayRef QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>::createDescriptorArrayForFont(CTFontRef font, const QString &fileName)
- {
- CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
- QCFType<CTFontDescriptorRef> descriptor = CTFontCopyFontDescriptor(font);
- Q_UNUSED(fileName)
- +
- + CFArrayAppendValue(array, descriptor);
- + return array;
- +}
- +
- #ifndef QT_NO_FREETYPE
- +template <>
- +CFArrayRef QCoreTextFontDatabaseEngineFactory<QFontEngineFT>::createDescriptorArrayForFont(CTFontRef font, const QString &fileName)
- +{
- + CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
- + QCFType<CTFontDescriptorRef> descriptor = CTFontCopyFontDescriptor(font);
- +
- // The physical font source URL (usually a local file or Qt resource) is only required for
- // FreeType, when using non-system fonts, and needs some hackery to attach in a format
- // agreeable to OSX.
- - if (m_useFreeType && !fileName.isEmpty()) {
- + if (!fileName.isEmpty()) {
- QCFType<CFURLRef> fontURL;
- if (fileName.startsWith(QLatin1String(":/"))) {
- @@ -642,11 +663,11 @@ CFArrayRef QCoreTextFontDatabase::createDescriptorArrayForFont(CTFontRef font, c
- CFDictionaryAddValue(attributes, kCTFontURLAttribute, fontURL);
- descriptor = CTFontDescriptorCreateCopyWithAttributes(descriptor, attributes);
- }
- -#endif
- CFArrayAppendValue(array, descriptor);
- return array;
- }
- +#endif
- QStringList QCoreTextFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName)
- {
- @@ -884,15 +905,5 @@ void QCoreTextFontDatabase::removeApplicationFonts()
- m_applicationFonts.clear();
- }
- -#ifndef QT_NO_FREETYPE
- -QFontEngine *QCoreTextFontDatabase::freeTypeFontEngine(const QFontDef &fontDef, const QByteArray &filename,
- - const QByteArray &fontData)
- -{
- - QFontEngine::FaceId faceId;
- - faceId.filename = filename;
- - return QFontEngineFT::create(fontDef, faceId, fontData);
- -}
- -#endif
- -
- QT_END_NAMESPACE
- diff --git i/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h w/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
- index c093d90..eec6462 100644
- --- i/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
- +++ w/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
- @@ -72,13 +72,11 @@ QT_BEGIN_NAMESPACE
- class QCoreTextFontDatabase : public QPlatformFontDatabase
- {
- public:
- - QCoreTextFontDatabase(bool useFreeType = false);
- + QCoreTextFontDatabase();
- ~QCoreTextFontDatabase();
- void populateFontDatabase() Q_DECL_OVERRIDE;
- void populateFamily(const QString &familyName) Q_DECL_OVERRIDE;
- - QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
- - QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
- void releaseHandle(void *handle) Q_DECL_OVERRIDE;
- @@ -93,13 +91,8 @@ public:
- private:
- void populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName = QString());
- - CFArrayRef createDescriptorArrayForFont(CTFontRef font, const QString &fileName);
- + virtual CFArrayRef createDescriptorArrayForFont(CTFontRef font, const QString &fileName) = 0;
- -#ifndef QT_NO_FREETYPE
- - bool m_useFreeType;
- - QFontEngine *freeTypeFontEngine(const QFontDef &fontDef, const QByteArray &filename,
- - const QByteArray &fontData = QByteArray());
- -#endif
- mutable QString defaultFontName;
- void removeApplicationFonts();
- @@ -109,6 +102,16 @@ private:
- mutable QHash<QPlatformTheme::Font, QFont *> m_themeFonts;
- };
- +template <class T>
- +class QCoreTextFontDatabaseEngineFactory : public QCoreTextFontDatabase
- +{
- +public:
- + QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
- + QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
- +protected:
- + CFArrayRef createDescriptorArrayForFont(CTFontRef font, const QString &fileName) Q_DECL_OVERRIDE;
- +};
- +
- QT_END_NAMESPACE
- #endif // QCORETEXTFONTDATABASE_H
- diff --git i/src/plugins/platforms/cocoa/qcocoaintegration.mm w/src/plugins/platforms/cocoa/qcocoaintegration.mm
- index 9dfcb82..ef4d03d 100644
- --- i/src/plugins/platforms/cocoa/qcocoaintegration.mm
- +++ w/src/plugins/platforms/cocoa/qcocoaintegration.mm
- @@ -58,6 +58,11 @@
- #include <qpa/qplatforminputcontextfactory_p.h>
- #include <QtCore/qcoreapplication.h>
- +//#include <QtFontDatabaseSupport/private/qfontengine_ft_p.h>
- +
- +class QCoreTextFontEngine;
- +class QFontEngineFT;
- +
- #include <QtGui/private/qcoregraphics_p.h>
- #include <IOKit/graphics/IOGraphicsLib.h>
- @@ -302,7 +307,7 @@ QCocoaIntegration *QCocoaIntegration::mInstance = 0;
- QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList)
- : mOptions(parseOptions(paramList))
- - , mFontDb(new QCoreTextFontDatabase(mOptions.testFlag(UseFreeTypeFontEngine)))
- + , mFontDb(0)
- #ifndef QT_NO_ACCESSIBILITY
- , mAccessibility(new QCocoaAccessibility)
- #endif
- @@ -318,6 +323,13 @@ QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList)
- qWarning("Creating multiple Cocoa platform integrations is not supported");
- mInstance = this;
- +#ifndef QT_NO_FREETYPE
- + if (mOptions.testFlag(UseFreeTypeFontEngine))
- + mFontDb.reset(new QCoreTextFontDatabaseEngineFactory<QFontEngineFT>);
- + else
- +#endif
- + mFontDb.reset(new QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>);
- +
- QString icStr = QPlatformInputContextFactory::requested();
- icStr.isNull() ? mInputContext.reset(new QCocoaInputContext)
- : mInputContext.reset(QPlatformInputContextFactory::create(icStr));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement