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