Support multiple default font families
Change-Id: I79da6b47bad97968b54f8b0288c65c037998d19b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375316
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Jason Simmons <jsimmons@google.com>
diff --git a/modules/skparagraph/include/FontCollection.h b/modules/skparagraph/include/FontCollection.h
index 3336c35..e654858 100644
--- a/modules/skparagraph/include/FontCollection.h
+++ b/modules/skparagraph/include/FontCollection.h
@@ -26,6 +26,7 @@
void setTestFontManager(sk_sp<SkFontMgr> fontManager);
void setDefaultFontManager(sk_sp<SkFontMgr> fontManager);
void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const char defaultFamilyName[]);
+ void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const std::vector<SkString>& defaultFamilyNames);
sk_sp<SkFontMgr> getFallbackManager() const { return fDefaultFontManager; }
@@ -70,7 +71,7 @@
sk_sp<SkFontMgr> fDynamicFontManager;
sk_sp<SkFontMgr> fTestFontManager;
- SkString fDefaultFamilyName;
+ std::vector<SkString> fDefaultFamilyNames;
ParagraphCache fParagraphCache;
};
} // namespace textlayout
diff --git a/modules/skparagraph/src/FontCollection.cpp b/modules/skparagraph/src/FontCollection.cpp
index 73fffae..9571afb 100644
--- a/modules/skparagraph/src/FontCollection.cpp
+++ b/modules/skparagraph/src/FontCollection.cpp
@@ -24,7 +24,7 @@
FontCollection::FontCollection()
: fEnableFontFallback(true)
- , fDefaultFamilyName(DEFAULT_FONT_FAMILY) { }
+ , fDefaultFamilyNames({SkString(DEFAULT_FONT_FAMILY)}) { }
size_t FontCollection::getFontManagersCount() const { return this->getFontManagerOrder().size(); }
@@ -43,7 +43,13 @@
void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager,
const char defaultFamilyName[]) {
fDefaultFontManager = std::move(fontManager);
- fDefaultFamilyName = defaultFamilyName;
+ fDefaultFamilyNames.emplace_back(defaultFamilyName);
+}
+
+void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager,
+ const std::vector<SkString>& defaultFamilyNames) {
+ fDefaultFontManager = std::move(fontManager);
+ fDefaultFamilyNames = defaultFamilyNames;
}
void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager) {
@@ -85,7 +91,13 @@
}
if (typefaces.empty()) {
- sk_sp<SkTypeface> match = matchTypeface(fDefaultFamilyName, fontStyle);
+ sk_sp<SkTypeface> match;
+ for (const SkString& familyName : fDefaultFamilyNames) {
+ match = matchTypeface(familyName, fontStyle);
+ if (match) {
+ break;
+ }
+ }
if (!match) {
for (const auto& manager : this->getFontManagerOrder()) {
match = manager->legacyMakeTypeface(nullptr, fontStyle);
@@ -140,8 +152,14 @@
if (fDefaultFontManager == nullptr) {
return nullptr;
}
- return sk_sp<SkTypeface>(fDefaultFontManager->matchFamilyStyle(fDefaultFamilyName.c_str(),
- SkFontStyle()));
+ for (const SkString& familyName : fDefaultFamilyNames) {
+ SkTypeface* match = fDefaultFontManager->matchFamilyStyle(familyName.c_str(),
+ SkFontStyle());
+ if (match) {
+ return sk_sp<SkTypeface>(match);
+ }
+ }
+ return nullptr;
}