1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC. 2*c8dee2aaSAndroid Build Coastguard Worker #ifndef FontCollection_DEFINED 3*c8dee2aaSAndroid Build Coastguard Worker #define FontCollection_DEFINED 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 6*c8dee2aaSAndroid Build Coastguard Worker #include <optional> 7*c8dee2aaSAndroid Build Coastguard Worker #include <set> 8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontMgr.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSpan.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skparagraph/include/FontArguments.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skparagraph/include/ParagraphCache.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skparagraph/include/TextStyle.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkTHash.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker namespace skia { 17*c8dee2aaSAndroid Build Coastguard Worker namespace textlayout { 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class TextStyle; 20*c8dee2aaSAndroid Build Coastguard Worker class Paragraph; 21*c8dee2aaSAndroid Build Coastguard Worker class FontCollection : public SkRefCnt { 22*c8dee2aaSAndroid Build Coastguard Worker public: 23*c8dee2aaSAndroid Build Coastguard Worker FontCollection(); 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker size_t getFontManagersCount() const; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker void setAssetFontManager(sk_sp<SkFontMgr> fontManager); 28*c8dee2aaSAndroid Build Coastguard Worker void setDynamicFontManager(sk_sp<SkFontMgr> fontManager); 29*c8dee2aaSAndroid Build Coastguard Worker void setTestFontManager(sk_sp<SkFontMgr> fontManager); 30*c8dee2aaSAndroid Build Coastguard Worker void setDefaultFontManager(sk_sp<SkFontMgr> fontManager); 31*c8dee2aaSAndroid Build Coastguard Worker void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const char defaultFamilyName[]); 32*c8dee2aaSAndroid Build Coastguard Worker void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const std::vector<SkString>& defaultFamilyNames); 33*c8dee2aaSAndroid Build Coastguard Worker getFallbackManager()34*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> getFallbackManager() const { return fDefaultFontManager; } 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker std::vector<sk_sp<SkTypeface>> findTypefaces(const std::vector<SkString>& familyNames, SkFontStyle fontStyle); 37*c8dee2aaSAndroid Build Coastguard Worker std::vector<sk_sp<SkTypeface>> findTypefaces(const std::vector<SkString>& familyNames, SkFontStyle fontStyle, const std::optional<FontArguments>& fontArgs); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> defaultFallback(SkUnichar unicode, SkFontStyle fontStyle, const SkString& locale); 40*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> defaultEmojiFallback(SkUnichar emojiStart, SkFontStyle fontStyle, const SkString& locale); 41*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> defaultFallback(); 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker void disableFontFallback(); 44*c8dee2aaSAndroid Build Coastguard Worker void enableFontFallback(); fontFallbackEnabled()45*c8dee2aaSAndroid Build Coastguard Worker bool fontFallbackEnabled() { return fEnableFontFallback; } 46*c8dee2aaSAndroid Build Coastguard Worker getParagraphCache()47*c8dee2aaSAndroid Build Coastguard Worker ParagraphCache* getParagraphCache() { return &fParagraphCache; } 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker void clearCaches(); 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker private: 52*c8dee2aaSAndroid Build Coastguard Worker std::vector<sk_sp<SkFontMgr>> getFontManagerOrder() const; 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> matchTypeface(const SkString& familyName, SkFontStyle fontStyle); 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker struct FamilyKey { FamilyKeyFamilyKey57*c8dee2aaSAndroid Build Coastguard Worker FamilyKey(const std::vector<SkString>& familyNames, SkFontStyle style, const std::optional<FontArguments>& args) 58*c8dee2aaSAndroid Build Coastguard Worker : fFamilyNames(familyNames), fFontStyle(style), fFontArguments(args) {} 59*c8dee2aaSAndroid Build Coastguard Worker FamilyKeyFamilyKey60*c8dee2aaSAndroid Build Coastguard Worker FamilyKey() {} 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker std::vector<SkString> fFamilyNames; 63*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle fFontStyle; 64*c8dee2aaSAndroid Build Coastguard Worker std::optional<FontArguments> fFontArguments; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const FamilyKey& other) const; 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker struct Hasher { 69*c8dee2aaSAndroid Build Coastguard Worker size_t operator()(const FamilyKey& key) const; 70*c8dee2aaSAndroid Build Coastguard Worker }; 71*c8dee2aaSAndroid Build Coastguard Worker }; 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker bool fEnableFontFallback; 74*c8dee2aaSAndroid Build Coastguard Worker skia_private::THashMap<FamilyKey, std::vector<sk_sp<SkTypeface>>, FamilyKey::Hasher> fTypefaces; 75*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fDefaultFontManager; 76*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fAssetFontManager; 77*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fDynamicFontManager; 78*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fTestFontManager; 79*c8dee2aaSAndroid Build Coastguard Worker 80*c8dee2aaSAndroid Build Coastguard Worker std::vector<SkString> fDefaultFamilyNames; 81*c8dee2aaSAndroid Build Coastguard Worker ParagraphCache fParagraphCache; 82*c8dee2aaSAndroid Build Coastguard Worker }; 83*c8dee2aaSAndroid Build Coastguard Worker } // namespace textlayout 84*c8dee2aaSAndroid Build Coastguard Worker } // namespace skia 85*c8dee2aaSAndroid Build Coastguard Worker 86*c8dee2aaSAndroid Build Coastguard Worker #endif // FontCollection_DEFINED 87