1 /*
2  * Copyright 2013 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "SkFontConfigInterface.h"
9 #include "SkFontHost_FreeType_common.h"
10 #include "SkStream.h"
11 #include "SkTypefaceCache.h"
12 
13 class SkFontDescriptor;
14 
15 class FontConfigTypeface : public SkTypeface_FreeType {
16     SkFontConfigInterface::FontIdentity fIdentity;
17     SkString fFamilyName;
18     SkAutoTDelete<SkStreamAsset> fLocalStream;
19 
20 public:
Create(const SkFontStyle & style,const SkFontConfigInterface::FontIdentity & fi,const SkString & familyName)21     static FontConfigTypeface* Create(const SkFontStyle& style,
22                                       const SkFontConfigInterface::FontIdentity& fi,
23                                       const SkString& familyName) {
24         return new FontConfigTypeface(style, fi, familyName);
25     }
26 
Create(const SkFontStyle & style,bool fixedWidth,SkStreamAsset * localStream)27     static FontConfigTypeface* Create(const SkFontStyle& style, bool fixedWidth,
28                                       SkStreamAsset* localStream) {
29         return new FontConfigTypeface(style, fixedWidth, localStream);
30     }
31 
getIdentity()32     const SkFontConfigInterface::FontIdentity& getIdentity() const {
33         return fIdentity;
34     }
35 
getLocalStream()36     SkStreamAsset* getLocalStream() const { return fLocalStream.get(); }
37 
isFamilyName(const char * name)38     bool isFamilyName(const char* name) const {
39         return fFamilyName.equals(name);
40     }
41 
42     static SkTypeface* LegacyCreateTypeface(const char familyName[], SkTypeface::Style);
43 
44 protected:
FontConfigTypeface(const SkFontStyle & style,const SkFontConfigInterface::FontIdentity & fi,const SkString & familyName)45     FontConfigTypeface(const SkFontStyle& style,
46                        const SkFontConfigInterface::FontIdentity& fi,
47                        const SkString& familyName)
48             : INHERITED(style, SkTypefaceCache::NewFontID(), false)
49             , fIdentity(fi)
50             , fFamilyName(familyName)
51             , fLocalStream(nullptr) {}
52 
FontConfigTypeface(const SkFontStyle & style,bool fixedWidth,SkStreamAsset * localStream)53     FontConfigTypeface(const SkFontStyle& style, bool fixedWidth, SkStreamAsset* localStream)
54             : INHERITED(style, SkTypefaceCache::NewFontID(), fixedWidth)
55             , fLocalStream(localStream) {
56         // we default to empty fFamilyName and fIdentity
57     }
58 
59     void onGetFamilyName(SkString* familyName) const override;
60     void onGetFontDescriptor(SkFontDescriptor*, bool*) const override;
61     SkStreamAsset* onOpenStream(int* ttcIndex) const override;
62 
63 private:
64     typedef SkTypeface_FreeType INHERITED;
65 };
66