You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
4 months ago
|
// Copyright 2019 Google LLC.
|
||
|
#include "modules/skparagraph/src/ParagraphImpl.h"
|
||
|
#include "modules/skparagraph/utils/TestFontCollection.h"
|
||
|
#include "src/core/SkOSFile.h"
|
||
|
#include "src/utils/SkUTF.h"
|
||
|
#include "tools/Resources.h"
|
||
|
|
||
|
namespace skia {
|
||
|
namespace textlayout {
|
||
|
|
||
|
TestFontCollection::TestFontCollection(const std::string& resourceDir, bool testOnly, bool loadFonts)
|
||
|
: fResourceDir(resourceDir)
|
||
|
, fFontsFound(0) {
|
||
|
if (fDirs == resourceDir) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
fFontProvider = sk_make_sp<TypefaceFontProvider>();
|
||
|
|
||
|
if (loadFonts) {
|
||
|
SkOSFile::Iter iter(fResourceDir.c_str());
|
||
|
SkString path;
|
||
|
while (iter.next(&path)) {
|
||
|
addFontFromFile(path.c_str());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fFontsFound = fFontProvider->countFamilies();
|
||
|
if (testOnly) {
|
||
|
this->setTestFontManager(fFontProvider);
|
||
|
} else {
|
||
|
this->setAssetFontManager(fFontProvider);
|
||
|
}
|
||
|
this->disableFontFallback();
|
||
|
fDirs = resourceDir;
|
||
|
}
|
||
|
|
||
|
bool TestFontCollection::addFontFromFile(const std::string& path, const std::string& familyName) {
|
||
|
|
||
|
SkString file_path;
|
||
|
file_path.printf("%s/%s", fResourceDir.c_str(), path.c_str());
|
||
|
|
||
|
auto data = SkData::MakeFromFileName(file_path.c_str());
|
||
|
if (!data) {
|
||
|
return false;
|
||
|
}
|
||
|
if (familyName.empty()) {
|
||
|
fFontProvider->registerTypeface(SkTypeface::MakeFromData(data));
|
||
|
} else {
|
||
|
fFontProvider->registerTypeface(SkTypeface::MakeFromData(data), SkString(familyName.c_str()));
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
} // namespace textlayout
|
||
|
} // namespace skia
|