diff --git a/src/gui/text/coretext/qcoretextfontdatabase.mm b/src/gui/text/coretext/qcoretextfontdatabase.mm index 7307595bd9b..baf2803d570 100644 --- a/src/gui/text/coretext/qcoretextfontdatabase.mm +++ b/src/gui/text/coretext/qcoretextfontdatabase.mm @@ -714,13 +714,20 @@ QStringList QCoreTextFontDatabase::addApplicationFont(const QByteArray &fontData if (!fontData.isEmpty()) { QCFType fontDataReference = fontData.toRawCFData(); - if (QCFType descriptor = CTFontManagerCreateFontDescriptorFromData(fontDataReference)) { - // There's no way to get the data back out of a font descriptor created with - // CTFontManagerCreateFontDescriptorFromData, so we attach the data manually. - NSDictionary *attributes = @{ kQtFontDataAttribute : [NSValue valueWithPointer:new QByteArray(fontData)] }; - descriptor = CTFontDescriptorCreateCopyWithAttributes(descriptor, (CFDictionaryRef)attributes); + if (QCFType descriptors = CTFontManagerCreateFontDescriptorsFromData(fontDataReference)) { CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); - CFArrayAppendValue(array, descriptor); + const int count = CFArrayGetCount(descriptors); + + for (int i = 0; i < count; ++i) { + CTFontDescriptorRef descriptor = CTFontDescriptorRef(CFArrayGetValueAtIndex(descriptors, i)); + + // There's no way to get the data back out of a font descriptor created with + // CTFontManagerCreateFontDescriptorFromData, so we attach the data manually. + NSDictionary *attributes = @{ kQtFontDataAttribute : [NSValue valueWithPointer:new QByteArray(fontData)] }; + descriptor = CTFontDescriptorCreateCopyWithAttributes(descriptor, (CFDictionaryRef)attributes); + CFArrayAppendValue(array, descriptor); + } + fonts = array; } } else { @@ -980,5 +987,10 @@ QList QCoreTextFontDatabase::standardSizes() const return ret; } +bool QCoreTextFontDatabase::supportsVariableApplicationFonts() const +{ + return true; +} + QT_END_NAMESPACE diff --git a/src/gui/text/coretext/qcoretextfontdatabase_p.h b/src/gui/text/coretext/qcoretextfontdatabase_p.h index 74c3f30b79c..eeea9ad6407 100644 --- a/src/gui/text/coretext/qcoretextfontdatabase_p.h +++ b/src/gui/text/coretext/qcoretextfontdatabase_p.h @@ -46,6 +46,7 @@ public: QFont defaultFont() const override; bool fontsAlwaysScalable() const override; QList standardSizes() const override; + bool supportsVariableApplicationFonts() const override; // For iOS and macOS platform themes QFont *themeFont(QPlatformTheme::Font) const; diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index fb61037c95d..3995f64e07b 100644 --- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -534,9 +534,9 @@ void tst_QFontDatabase::variableFont() { QFont font(family); - font.setWeight(QFont::ExtraBold); + font.setWeight(QFont::Black); QCOMPARE(QFontInfo(font).styleName(), u"QtExtraBold"_s); - QCOMPARE(QFontInfo(font).weight(), QFont::ExtraBold); + QCOMPARE(QFontInfo(font).weight(), int(QFont::Black)); } { diff --git a/tests/auto/shared/resources/testfont_variable.ttf b/tests/auto/shared/resources/testfont_variable.ttf index 70f76444842..b3d7be61808 100644 Binary files a/tests/auto/shared/resources/testfont_variable.ttf and b/tests/auto/shared/resources/testfont_variable.ttf differ