| // 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); |
| |
| struct FaceCache; |
| std::unique_ptr<FaceCache> fFaceCache; |
| 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 |