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