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