70 const std::shared_ptr<AssetManager>& asset_manager) {
71#if FML_OS_MACOSX || FML_OS_IOS
72 RegisterSystemFonts(*dynamic_font_manager_);
74 std::unique_ptr<fml::Mapping> manifest_mapping =
75 asset_manager->GetAsMapping(
"FontManifest.json");
76 if (manifest_mapping ==
nullptr) {
77 FML_DLOG(WARNING) <<
"Could not find the font manifest in the asset store.";
81 rapidjson::Document document;
82 static_assert(
sizeof(
decltype(document)::Ch) ==
sizeof(uint8_t),
"");
83 document.Parse(
reinterpret_cast<const decltype(document)::Ch*
>(
84 manifest_mapping->GetMapping()),
85 manifest_mapping->GetSize());
87 if (document.HasParseError()) {
88 FML_DLOG(WARNING) <<
"Error parsing the font manifest in the asset store.";
92 if (!document.IsArray()) {
97 std::make_unique<AssetManagerFontProvider>(asset_manager);
99 for (
const auto& family : document.GetArray()) {
100 auto family_name = family.FindMember(
"family");
101 if (family_name == family.MemberEnd() || !family_name->value.IsString()) {
105 auto family_fonts = family.FindMember(
"fonts");
106 if (family_fonts == family.MemberEnd() || !family_fonts->value.IsArray()) {
110 for (
const auto& family_font : family_fonts->value.GetArray()) {
111 if (!family_font.IsObject()) {
115 auto font_asset = family_font.FindMember(
"asset");
116 if (font_asset == family_font.MemberEnd() ||
117 !font_asset->value.IsString()) {
122 font_provider->RegisterAsset(family_name->value.GetString(),
123 font_asset->value.GetString());
127 collection_->SetAssetFontManager(
128 sk_make_sp<txt::AssetFontManager>(std::move(font_provider)));
133 std::unique_ptr<txt::TypefaceFontAssetProvider> font_provider =
134 std::make_unique<txt::TypefaceFontAssetProvider>();
140 font_provider->RegisterTypeface(std::move(typeface), names[index]);
145 collection_->SetTestFontManager(
146 sk_make_sp<txt::TestFontManager>(std::move(font_provider), names));
148 collection_->DisableFontFallback();