| // Copyright 2019 Google LLC | |
| #ifndef FontCollection_DEFINED | |
| #define FontCollection_DEFINED | |
| #include <memory> | |
| #include <optional> | |
| #include <set> | |
| #include "include/core/SkFontMgr.h" | |
| #include "include/core/SkRefCnt.h" | |
| #include "include/core/SkSpan.h" | |
| #include "modules/skparagraph/include/FontArguments.h" | |
| #include "modules/skparagraph/include/ParagraphCache.h" | |
| #include "modules/skparagraph/include/TextStyle.h" | |
| namespace skia { | |
| namespace textlayout { | |
| class TextStyle; | |
| class Paragraph; | |
| class FontCollection : public SkRefCnt { | |
| public: | |
| FontCollection(); | |
| ~FontCollection() override; | |
| size_t getFontManagersCount() const; | |
| void setAssetFontManager(sk_sp<SkFontMgr> fontManager); | |
| void setDynamicFontManager(sk_sp<SkFontMgr> fontManager); | |
| 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; } | |
| std::vector<sk_sp<SkTypeface>> findTypefaces(const std::vector<SkString>& familyNames, SkFontStyle fontStyle); | |
| std::vector<sk_sp<SkTypeface>> findTypefaces(const std::vector<SkString>& familyNames, SkFontStyle fontStyle, const std::optional<FontArguments>& fontArgs); | |
| sk_sp<SkTypeface> defaultFallback(SkUnichar unicode, const std::vector<SkString>& families, | |
| SkFontStyle fontStyle, const SkString& locale, | |
| const std::optional<FontArguments>& fontArgs); | |
| sk_sp<SkTypeface> defaultEmojiFallback(SkUnichar emojiStart, SkFontStyle fontStyle, const SkString& locale); | |
| sk_sp<SkTypeface> defaultFallback(); | |
| void disableFontFallback(); | |
| void enableFontFallback(); | |
| bool fontFallbackEnabled() { return fEnableFontFallback; } | |
| ParagraphCache* getParagraphCache() { return &fParagraphCache; } | |
| void clearCaches(); | |
| private: | |
| std::vector<sk_sp<SkFontMgr>> getFontManagerOrder() const; | |
| sk_sp<SkTypeface> matchTypeface(const SkString& familyName, SkFontStyle fontStyle); | |
| sk_sp<SkTypeface> cloneTypeface(const sk_sp<SkTypeface>& typeface, const FontArguments& args); | |
| struct FaceCache; | |
| std::unique_ptr<FaceCache> fFaceCache; | |
| struct VariationCache; | |
| std::unique_ptr<VariationCache> fVariationCache; | |
| bool fEnableFontFallback; | |
| sk_sp<SkFontMgr> fDefaultFontManager; | |
| sk_sp<SkFontMgr> fAssetFontManager; | |
| sk_sp<SkFontMgr> fDynamicFontManager; | |
| sk_sp<SkFontMgr> fTestFontManager; | |
| std::vector<SkString> fDefaultFamilyNames; | |
| ParagraphCache fParagraphCache; | |
| }; | |
| } // namespace textlayout | |
| } // namespace skia | |
| #endif // FontCollection_DEFINED |