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 SkStream* fLocalStream; 19 20 public: 21 FontConfigTypeface(Style style, 22 const SkFontConfigInterface::FontIdentity& fi, 23 const SkString& familyName) 24 : INHERITED(style, SkTypefaceCache::NewFontID(), false) 25 , fIdentity(fi) 26 , fFamilyName(familyName) 27 , fLocalStream(NULL) {} 28 29 FontConfigTypeface(Style style, bool fixedWidth, SkStream* localStream) 30 : INHERITED(style, SkTypefaceCache::NewFontID(), fixedWidth) { 31 // we default to empty fFamilyName and fIdentity 32 fLocalStream = localStream; 33 SkSafeRef(localStream); 34 } 35 36 virtual ~FontConfigTypeface() { 37 SkSafeUnref(fLocalStream); 38 } 39 40 const SkFontConfigInterface::FontIdentity& getIdentity() const { 41 return fIdentity; 42 } 43 44 const char* getFamilyName() const { return fFamilyName.c_str(); } 45 SkStream* getLocalStream() const { return fLocalStream; } 46 47 bool isFamilyName(const char* name) const { 48 return fFamilyName.equals(name); 49 } 50 51 static SkTypeface* LegacyCreateTypeface(const SkTypeface* family, 52 const char familyName[], 53 SkTypeface::Style); 54 55 protected: 56 friend class SkFontHost; // hack until we can make public versions 57 58 virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE; 59 virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE; 60 virtual SkTypeface* onRefMatchingStyle(Style) const SK_OVERRIDE; 61 62 private: 63 typedef SkTypeface_FreeType INHERITED; 64 }; 65