blob: 5e5155e9ae0eb143baa374cfd9c351e7b622ecd0 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "examples/ui/lib/skia_font_loader.h"
#include <utility>
#include "examples/ui/lib/skia_vmo_data.h"
#include "third_party/skia/include/core/SkFontMgr.h"
namespace mozart {
SkiaFontLoader::SkiaFontLoader(fuchsia::fonts::ProviderPtr font_provider)
: font_provider_(std::move(font_provider)) {}
SkiaFontLoader::~SkiaFontLoader() {}
void SkiaFontLoader::LoadFont(fuchsia::fonts::Request request,
FontCallback callback) {
// TODO(jeffbrown): Handle errors in case the font provider itself dies.
font_provider_->GetFont(
std::move(request), [this, callback = std::move(callback)](
fuchsia::fonts::ResponsePtr response) {
if (response) {
fsl::SizedVmo vmo;
if (!fsl::SizedVmo::FromTransport(std::move(response->buffer),
&vmo)) {
callback(nullptr);
return;
}
sk_sp<SkData> font_data = MakeSkDataFromVMO(vmo);
if (font_data) {
callback(
SkFontMgr::RefDefault()->makeFromData(std::move(font_data)));
return;
}
}
callback(nullptr);
});
}
void SkiaFontLoader::LoadDefaultFont(FontCallback callback) {
fuchsia::fonts::Request request;
request.family = "Roboto";
LoadFont(std::move(request), std::move(callback));
}
} // namespace mozart