1cb93a386Sopenharmony_ci// Copyright 2019 Google LLC. 2cb93a386Sopenharmony_ci#include "modules/skparagraph/src/ParagraphImpl.h" 3cb93a386Sopenharmony_ci#include "modules/skparagraph/utils/TestFontCollection.h" 4cb93a386Sopenharmony_ci#include "src/base/SkUTF.h" 5cb93a386Sopenharmony_ci#include "src/core/SkOSFile.h" 6cb93a386Sopenharmony_ci#include "tools/Resources.h" 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_cinamespace skia { 9cb93a386Sopenharmony_cinamespace textlayout { 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ciTestFontCollection::TestFontCollection(const std::string& resourceDir, bool testOnly, bool loadFonts) 12cb93a386Sopenharmony_ci : fResourceDir(resourceDir) 13cb93a386Sopenharmony_ci , fFontsFound(0) { 14cb93a386Sopenharmony_ci if (fDirs == resourceDir) { 15cb93a386Sopenharmony_ci return; 16cb93a386Sopenharmony_ci } 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci fFontProvider = sk_make_sp<TypefaceFontProvider>(); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci if (loadFonts) { 21cb93a386Sopenharmony_ci SkOSFile::Iter iter(fResourceDir.c_str()); 22cb93a386Sopenharmony_ci SkString path; 23cb93a386Sopenharmony_ci while (iter.next(&path)) { 24cb93a386Sopenharmony_ci addFontFromFile(path.c_str()); 25cb93a386Sopenharmony_ci } 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci fFontsFound = fFontProvider->countFamilies(); 29cb93a386Sopenharmony_ci if (testOnly) { 30cb93a386Sopenharmony_ci this->setTestFontManager(fFontProvider); 31cb93a386Sopenharmony_ci } else { 32cb93a386Sopenharmony_ci this->setAssetFontManager(fFontProvider); 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci this->disableFontFallback(); 35cb93a386Sopenharmony_ci fDirs = resourceDir; 36cb93a386Sopenharmony_ci} 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_cibool TestFontCollection::addFontFromFile(const std::string& path, const std::string& familyName) { 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci SkString file_path; 41cb93a386Sopenharmony_ci file_path.printf("%s/%s", fResourceDir.c_str(), path.c_str()); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci auto data = SkData::MakeFromFileName(file_path.c_str()); 44cb93a386Sopenharmony_ci if (!data) { 45cb93a386Sopenharmony_ci return false; 46cb93a386Sopenharmony_ci } 47cb93a386Sopenharmony_ci if (familyName.empty()) { 48cb93a386Sopenharmony_ci fFontProvider->registerTypeface(SkTypeface::MakeFromData(data)); 49cb93a386Sopenharmony_ci } else { 50cb93a386Sopenharmony_ci fFontProvider->registerTypeface(SkTypeface::MakeFromData(data), SkString(familyName.c_str())); 51cb93a386Sopenharmony_ci } 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ci return true; 54cb93a386Sopenharmony_ci} 55cb93a386Sopenharmony_ci} // namespace textlayout 56cb93a386Sopenharmony_ci} // namespace skia 57