| /* | |
| * Copyright 2024 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "include/core/SkFontArguments.h" | |
| #include "include/core/SkFontMgr.h" | |
| #include "include/core/SkFontStyle.h" | |
| #include "include/core/SkRefCnt.h" | |
| #include "include/core/SkStream.h" | |
| #include "include/core/SkTypeface.h" | |
| #include "include/core/SkTypes.h" | |
| #include "include/ports/SkFontMgr_Fontations.h" | |
| #include "src/ports/SkTypeface_fontations_priv.h" | |
| #include <memory> | |
| #include <utility> | |
| class SkData; | |
| class SkString; | |
| namespace { | |
| /** | |
| * SkFontMgr_Fontations_Empty | |
| * | |
| * A SkFontMgr with an empty list of fonts, meant as a basic tool for font instantiation from | |
| * data in testing, see TestFontMgr in FontToolUtils. | |
| */ | |
| class SkFontMgr_Fontations_Empty : public SkFontMgr { | |
| public: | |
| SkFontMgr_Fontations_Empty() = default; | |
| protected: | |
| int onCountFamilies() const override { return 0; } | |
| void onGetFamilyName(int index, SkString* familyName) const override {} | |
| sk_sp<SkFontStyleSet> onCreateStyleSet(int index) const override { | |
| return SkFontStyleSet::CreateEmpty(); | |
| } | |
| sk_sp<SkFontStyleSet> onMatchFamily(const char familyName[]) const override { | |
| return SkFontStyleSet::CreateEmpty(); | |
| } | |
| sk_sp<SkTypeface> onMatchFamilyStyle(const char familyName[], | |
| const SkFontStyle& fontStyle) const override { | |
| return nullptr; | |
| } | |
| sk_sp<SkTypeface> onMatchFamilyStyleCharacter(const char familyName[], | |
| const SkFontStyle&, | |
| const char* bcp47[], | |
| int bcp47Count, | |
| SkUnichar character) const override { | |
| return nullptr; | |
| } | |
| sk_sp<SkTypeface> onMakeFromData(sk_sp<SkData> data, int ttcIndex) const override { | |
| return this->makeFromStream(std::make_unique<SkMemoryStream>(std::move(data)), ttcIndex); | |
| } | |
| sk_sp<SkTypeface> onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset> stream, | |
| int ttcIndex) const override { | |
| return this->makeFromStream(std::move(stream), | |
| SkFontArguments().setCollectionIndex(ttcIndex)); | |
| } | |
| sk_sp<SkTypeface> onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset> stream, | |
| const SkFontArguments& args) const override { | |
| return SkTypeface_Fontations::MakeFromStream(std::move(stream), args); | |
| } | |
| sk_sp<SkTypeface> onMakeFromFile(const char path[], int ttcIndex) const override { | |
| std::unique_ptr<SkStreamAsset> stream = SkStream::MakeFromFile(path); | |
| return stream ? this->makeFromStream(std::move(stream), ttcIndex) : nullptr; | |
| } | |
| sk_sp<SkTypeface> onLegacyMakeTypeface(const char familyName[], | |
| SkFontStyle style) const override { | |
| return nullptr; | |
| } | |
| }; | |
| } // namespace | |
| sk_sp<SkFontMgr> SkFontMgr_New_Fontations_Empty() { | |
| return sk_make_sp<SkFontMgr_Fontations_Empty>(); | |
| } |