1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkOrderedFontMgr_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkOrderedFontMgr_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontMgr.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 16*c8dee2aaSAndroid Build Coastguard Worker #include <vector> 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker class SkData; 19*c8dee2aaSAndroid Build Coastguard Worker class SkFontStyle; 20*c8dee2aaSAndroid Build Coastguard Worker class SkStreamAsset; 21*c8dee2aaSAndroid Build Coastguard Worker class SkString; 22*c8dee2aaSAndroid Build Coastguard Worker class SkTypeface; 23*c8dee2aaSAndroid Build Coastguard Worker struct SkFontArguments; 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker /** 26*c8dee2aaSAndroid Build Coastguard Worker * Collects an order list of other font managers, and visits them in order 27*c8dee2aaSAndroid Build Coastguard Worker * when a request to find or match is issued. 28*c8dee2aaSAndroid Build Coastguard Worker * 29*c8dee2aaSAndroid Build Coastguard Worker * Note: this explicitly fails on any attempt to Make a typeface: all of 30*c8dee2aaSAndroid Build Coastguard Worker * those requests will return null. 31*c8dee2aaSAndroid Build Coastguard Worker */ 32*c8dee2aaSAndroid Build Coastguard Worker class SK_API SkOrderedFontMgr : public SkFontMgr { 33*c8dee2aaSAndroid Build Coastguard Worker public: 34*c8dee2aaSAndroid Build Coastguard Worker SkOrderedFontMgr(); 35*c8dee2aaSAndroid Build Coastguard Worker ~SkOrderedFontMgr() override; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker void append(sk_sp<SkFontMgr>); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker protected: 40*c8dee2aaSAndroid Build Coastguard Worker int onCountFamilies() const override; 41*c8dee2aaSAndroid Build Coastguard Worker void onGetFamilyName(int index, SkString* familyName) const override; 42*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> onCreateStyleSet(int index)const override; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> onMatchFamily(const char familyName[]) const override; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMatchFamilyStyle(const char familyName[], 47*c8dee2aaSAndroid Build Coastguard Worker const SkFontStyle&) const override; 48*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMatchFamilyStyleCharacter(const char familyName[], const SkFontStyle&, 49*c8dee2aaSAndroid Build Coastguard Worker const char* bcp47[], int bcp47Count, 50*c8dee2aaSAndroid Build Coastguard Worker SkUnichar character) const override; 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // Note: all of these always return null 53*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMakeFromData(sk_sp<SkData>, int ttcIndex) const override; 54*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>, 55*c8dee2aaSAndroid Build Coastguard Worker int ttcIndex) const override; 56*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>, 57*c8dee2aaSAndroid Build Coastguard Worker const SkFontArguments&) const override; 58*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMakeFromFile(const char path[], int ttcIndex) const override; 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onLegacyMakeTypeface(const char familyName[], SkFontStyle) const override; 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker private: 63*c8dee2aaSAndroid Build Coastguard Worker std::vector<sk_sp<SkFontMgr>> fList; 64*c8dee2aaSAndroid Build Coastguard Worker }; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker #endif 67