• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef TXT_ASSET_FONT_MANAGER_H_
18 #define TXT_ASSET_FONT_MANAGER_H_
19 
20 #include <memory>
21 #include "flutter/fml/macros.h"
22 #include "third_party/skia/include/core/SkFontMgr.h"
23 #include "third_party/skia/include/core/SkStream.h"
24 #include "txt/font_asset_provider.h"
25 #include "txt/typeface_font_asset_provider.h"
26 
27 namespace txt {
28 
29 class AssetFontManager : public SkFontMgr {
30  public:
31   AssetFontManager(std::unique_ptr<FontAssetProvider> font_provider);
32 
33   ~AssetFontManager() override;
34 
35  protected:
36   // |SkFontMgr|
37   SkFontStyleSet* onMatchFamily(const char familyName[]) const override;
38 
39   std::unique_ptr<FontAssetProvider> font_provider_;
40 
41  private:
42   // |SkFontMgr|
43   int onCountFamilies() const override;
44 
45   // |SkFontMgr|
46   void onGetFamilyName(int index, SkString* familyName) const override;
47 
48   // |SkFontMgr|
49   SkFontStyleSet* onCreateStyleSet(int index) const override;
50 
51   // |SkFontMgr|
52   SkTypeface* onMatchFamilyStyle(const char familyName[],
53                                  const SkFontStyle&) const override;
54 
55   // |SkFontMgr|
56   SkTypeface* onMatchFamilyStyleCharacter(const char familyName[],
57                                           const SkFontStyle&,
58                                           const char* bcp47[],
59                                           int bcp47Count,
60                                           SkUnichar character) const override;
61 
62   // |SkFontMgr|
63   SkTypeface* onMatchFaceStyle(const SkTypeface*,
64                                const SkFontStyle&) const override;
65 
66   // |SkFontMgr|
67   sk_sp<SkTypeface> onMakeFromData(sk_sp<SkData>, int ttcIndex) const override;
68 
69   // |SkFontMgr|
70   sk_sp<SkTypeface> onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>,
71                                           int ttcIndex) const override;
72 
73   // |SkFontMgr|
74   sk_sp<SkTypeface> onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>,
75                                          const SkFontArguments&) const override;
76 
77   // |SkFontMgr|
78   sk_sp<SkTypeface> onMakeFromFile(const char path[],
79                                    int ttcIndex) const override;
80 
81   // |SkFontMgr|
82   sk_sp<SkTypeface> onLegacyMakeTypeface(const char familyName[],
83                                          SkFontStyle) const override;
84 
85   FML_DISALLOW_COPY_AND_ASSIGN(AssetFontManager);
86 };
87 
88 class DynamicFontManager : public AssetFontManager {
89  public:
DynamicFontManager()90   DynamicFontManager()
91       : AssetFontManager(std::make_unique<TypefaceFontAssetProvider>()) {}
92 
font_provider()93   TypefaceFontAssetProvider& font_provider() {
94     return static_cast<TypefaceFontAssetProvider&>(*font_provider_);
95   }
96 };
97 
98 }  // namespace txt
99 
100 #endif  // TXT_ASSET_FONT_MANAGER_H_
101