1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "include/utils/SkOrderedFontMgr.h" 9cb93a386Sopenharmony_ci#include "src/core/SkFontDescriptor.h" 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ciSkOrderedFontMgr::SkOrderedFontMgr() {} 12cb93a386Sopenharmony_ciSkOrderedFontMgr::~SkOrderedFontMgr() {} 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_civoid SkOrderedFontMgr::append(sk_sp<SkFontMgr> fm) { 15cb93a386Sopenharmony_ci fList.push_back(std::move(fm)); 16cb93a386Sopenharmony_ci} 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciint SkOrderedFontMgr::onCountFamilies() const { 19cb93a386Sopenharmony_ci int count = 0; 20cb93a386Sopenharmony_ci for (const auto& fm : fList) { 21cb93a386Sopenharmony_ci count += fm->countFamilies(); 22cb93a386Sopenharmony_ci } 23cb93a386Sopenharmony_ci return count; 24cb93a386Sopenharmony_ci} 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_civoid SkOrderedFontMgr::onGetFamilyName(int index, SkString* familyName) const { 27cb93a386Sopenharmony_ci for (const auto& fm : fList) { 28cb93a386Sopenharmony_ci const int count = fm->countFamilies(); 29cb93a386Sopenharmony_ci if (index < count) { 30cb93a386Sopenharmony_ci return fm->getFamilyName(index, familyName); 31cb93a386Sopenharmony_ci } 32cb93a386Sopenharmony_ci index -= count; 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci} 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ciSkFontStyleSet* SkOrderedFontMgr::onCreateStyleSet(int index) const { 37cb93a386Sopenharmony_ci for (const auto& fm : fList) { 38cb93a386Sopenharmony_ci const int count = fm->countFamilies(); 39cb93a386Sopenharmony_ci if (index < count) { 40cb93a386Sopenharmony_ci return fm->createStyleSet(index); 41cb93a386Sopenharmony_ci } 42cb93a386Sopenharmony_ci index -= count; 43cb93a386Sopenharmony_ci } 44cb93a386Sopenharmony_ci return nullptr; 45cb93a386Sopenharmony_ci} 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ciSkFontStyleSet* SkOrderedFontMgr::onMatchFamily(const char familyName[]) const { 48cb93a386Sopenharmony_ci for (const auto& fm : fList) { 49cb93a386Sopenharmony_ci if (auto fs = fm->matchFamily(familyName)) { 50cb93a386Sopenharmony_ci return fs; 51cb93a386Sopenharmony_ci } 52cb93a386Sopenharmony_ci } 53cb93a386Sopenharmony_ci return nullptr; 54cb93a386Sopenharmony_ci} 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ciSkTypeface* SkOrderedFontMgr::onMatchFamilyStyle(const char family[], 57cb93a386Sopenharmony_ci const SkFontStyle& style) const { 58cb93a386Sopenharmony_ci for (const auto& fm : fList) { 59cb93a386Sopenharmony_ci if (auto tf = fm->matchFamilyStyle(family, style)) { 60cb93a386Sopenharmony_ci return tf; 61cb93a386Sopenharmony_ci } 62cb93a386Sopenharmony_ci } 63cb93a386Sopenharmony_ci return nullptr; 64cb93a386Sopenharmony_ci} 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ciSkTypeface* SkOrderedFontMgr::onMatchFamilyStyleCharacter(const char familyName[], 67cb93a386Sopenharmony_ci const SkFontStyle& style, 68cb93a386Sopenharmony_ci const char* bcp47[], int bcp47Count, 69cb93a386Sopenharmony_ci SkUnichar uni) const { 70cb93a386Sopenharmony_ci for (const auto& fm : fList) { 71cb93a386Sopenharmony_ci if (auto tf = fm->matchFamilyStyleCharacter(familyName, style, bcp47, bcp47Count, uni)) { 72cb93a386Sopenharmony_ci return tf; 73cb93a386Sopenharmony_ci } 74cb93a386Sopenharmony_ci } 75cb93a386Sopenharmony_ci return nullptr; 76cb93a386Sopenharmony_ci} 77cb93a386Sopenharmony_ci 78cb93a386Sopenharmony_ci// All of these are defined to fail by returning null 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_cisk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromData(sk_sp<SkData>, int ttcIndex) const { 81cb93a386Sopenharmony_ci return nullptr; 82cb93a386Sopenharmony_ci} 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_cisk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>, 85cb93a386Sopenharmony_ci int ttcIndex) const { 86cb93a386Sopenharmony_ci return nullptr; 87cb93a386Sopenharmony_ci} 88cb93a386Sopenharmony_ci 89cb93a386Sopenharmony_cisk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>, 90cb93a386Sopenharmony_ci const SkFontArguments&) const { 91cb93a386Sopenharmony_ci return nullptr; 92cb93a386Sopenharmony_ci} 93cb93a386Sopenharmony_ci 94cb93a386Sopenharmony_cisk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromFile(const char path[], int ttcIndex) const { 95cb93a386Sopenharmony_ci return nullptr; 96cb93a386Sopenharmony_ci} 97cb93a386Sopenharmony_ci 98cb93a386Sopenharmony_cisk_sp<SkTypeface> SkOrderedFontMgr::onLegacyMakeTypeface(const char family[], SkFontStyle) const { 99cb93a386Sopenharmony_ci return nullptr; 100cb93a386Sopenharmony_ci} 101