未验证 提交 0890783d 编写于 作者: S Sarah Zakarias 提交者: GitHub

Add zip asset store to AssetFontSelector (#4475)

上级 1c6eef1b
......@@ -88,10 +88,20 @@ void AssetFontSelector::Install(
UIDartState::Current()->set_font_selector(font_selector);
}
void AssetFontSelector::Install(fxl::RefPtr<ZipAssetStore> asset_store) {
RefPtr<AssetFontSelector> font_selector =
adoptRef(new AssetFontSelector(std::move(asset_store)));
font_selector->parseFontManifest();
UIDartState::Current()->set_font_selector(font_selector);
}
AssetFontSelector::AssetFontSelector(
fxl::RefPtr<DirectoryAssetBundle> directory_asset_bundle)
: directory_asset_bundle_(std::move(directory_asset_bundle)) {}
AssetFontSelector::AssetFontSelector(fxl::RefPtr<ZipAssetStore> asset_store)
: asset_store_(std::move(asset_store)) {}
AssetFontSelector::~AssetFontSelector() {}
AssetFontSelector::TypefaceAsset::TypefaceAsset() {}
......@@ -108,9 +118,13 @@ AssetFontSelector::FlutterFontAttributes::~FlutterFontAttributes() {}
void AssetFontSelector::parseFontManifest() {
std::vector<uint8_t> font_manifest_data;
if (!directory_asset_bundle_->GetAsBuffer(kFontManifestAssetPath,
&font_manifest_data))
return;
if (!directory_asset_bundle_ ||
!directory_asset_bundle_->GetAsBuffer(kFontManifestAssetPath,
&font_manifest_data)) {
if (!asset_store_ ||
!asset_store_->GetAsBuffer(kFontManifestAssetPath, &font_manifest_data))
return;
}
rapidjson::Document document;
document.Parse(reinterpret_cast<const char*>(font_manifest_data.data()),
......@@ -225,10 +239,13 @@ sk_sp<SkTypeface> AssetFontSelector::getTypefaceAsset(
}
std::unique_ptr<TypefaceAsset> typeface_asset(new TypefaceAsset);
if (!directory_asset_bundle_->GetAsBuffer(asset_path,
&typeface_asset->data)) {
typeface_cache_.insert(std::make_pair(asset_path, nullptr));
return nullptr;
if (!directory_asset_bundle_ || !directory_asset_bundle_->GetAsBuffer(
asset_path, &typeface_asset->data)) {
if (!asset_store_ ||
!asset_store_->GetAsBuffer(asset_path, &typeface_asset->data)) {
typeface_cache_.insert(std::make_pair(asset_path, nullptr));
return nullptr;
}
}
sk_sp<SkFontMgr> font_mgr(SkFontMgr::RefDefault());
......
......@@ -9,6 +9,7 @@
#include <vector>
#include "flutter/assets/directory_asset_bundle.h"
#include "flutter/assets/zip_asset_store.h"
#include "flutter/sky/engine/platform/fonts/FontCacheKey.h"
#include "flutter/sky/engine/platform/fonts/FontSelector.h"
#include "flutter/sky/engine/platform/fonts/SimpleFontData.h"
......@@ -25,6 +26,10 @@ class AssetFontSelector : public FontSelector {
static void Install(fxl::RefPtr<DirectoryAssetBundle> directory_asset_bundle);
// TODO(zarah): Remove this and related code using asset_store once flx is
// removed.
static void Install(fxl::RefPtr<ZipAssetStore> asset_store);
PassRefPtr<FontData> getFontData(const FontDescription& font_description,
const AtomicString& family_name) override;
......@@ -42,6 +47,8 @@ class AssetFontSelector : public FontSelector {
explicit AssetFontSelector(
fxl::RefPtr<DirectoryAssetBundle> directory_asset_bundle);
explicit AssetFontSelector(fxl::RefPtr<ZipAssetStore> asset_store);
void parseFontManifest();
sk_sp<SkTypeface> getTypefaceAsset(const FontDescription& font_description,
......@@ -49,6 +56,8 @@ class AssetFontSelector : public FontSelector {
fxl::RefPtr<DirectoryAssetBundle> directory_asset_bundle_;
fxl::RefPtr<ZipAssetStore> asset_store_;
HashMap<AtomicString, std::vector<FlutterFontAttributes>> font_family_map_;
std::unordered_map<std::string, std::unique_ptr<TypefaceAsset>>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册