101 {
103 if (index >= assets_.size()) {
104 return nullptr;
105 }
106
107 TypefaceAsset& asset = assets_[index];
108 if (!asset.typeface) {
109 std::unique_ptr<fml::Mapping> asset_mapping =
110 asset_manager_->GetAsMapping(asset.asset);
111 if (asset_mapping == nullptr) {
112 return nullptr;
113 }
114
115 fml::Mapping* asset_mapping_ptr = asset_mapping.release();
116 sk_sp<SkData> asset_data = SkData::MakeWithProc(
118 MappingReleaseProc, asset_mapping_ptr);
119 std::unique_ptr<SkMemoryStream> stream = SkMemoryStream::Make(asset_data);
120
122
123 asset.typeface = font_mgr->makeFromStream(std::move(stream));
124 if (!asset.typeface) {
125 FML_DLOG(ERROR) <<
"Unable to load font asset for family: "
126 << family_name_;
127 return nullptr;
128 }
129 }
130
132}
decltype(std::declval< SkFontStyleSet >().createTypeface(0)) CreateTypefaceRet
virtual const uint8_t * GetMapping() const =0
virtual size_t GetSize() const =0
#define FML_DLOG(severity)
sk_sp< SkFontMgr > GetDefaultFontManager(uint32_t font_initialization_data)