OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2008 Google Inc. | 2 * Copyright 2008 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkFontConfigInterface.h" | 8 #include "SkFontConfigInterface.h" |
9 #include "SkFontConfigTypeface.h" | 9 #include "SkFontConfigTypeface.h" |
10 #include "SkFontDescriptor.h" | 10 #include "SkFontDescriptor.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 SkTypeface::Style fStyle; | 65 SkTypeface::Style fStyle; |
66 }; | 66 }; |
67 | 67 |
68 static bool find_proc(SkTypeface* face, SkTypeface::Style style, void* ctx) { | 68 static bool find_proc(SkTypeface* face, SkTypeface::Style style, void* ctx) { |
69 FontConfigTypeface* fci = (FontConfigTypeface*)face; | 69 FontConfigTypeface* fci = (FontConfigTypeface*)face; |
70 const FindRec* rec = (const FindRec*)ctx; | 70 const FindRec* rec = (const FindRec*)ctx; |
71 | 71 |
72 return rec->fStyle == style && fci->isFamilyName(rec->fFamilyName); | 72 return rec->fStyle == style && fci->isFamilyName(rec->fFamilyName); |
73 } | 73 } |
74 | 74 |
75 SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, | 75 SkTypeface* FontConfigTypeface::LegacyCreateTypeface( |
76 const char familyName[], | 76 const SkTypeface* familyFace, |
77 SkTypeface::Style style) { | 77 const char familyName[], |
| 78 SkTypeface::Style style) { |
78 SkAutoTUnref<SkFontConfigInterface> fci(RefFCI()); | 79 SkAutoTUnref<SkFontConfigInterface> fci(RefFCI()); |
79 if (NULL == fci.get()) { | 80 if (NULL == fci.get()) { |
80 return NULL; | 81 return NULL; |
81 } | 82 } |
82 | 83 |
83 if (familyFace) { | 84 if (familyFace) { |
84 FontConfigTypeface* fct = (FontConfigTypeface*)familyFace; | 85 FontConfigTypeface* fct = (FontConfigTypeface*)familyFace; |
85 familyName = fct->getFamilyName(); | 86 familyName = fct->getFamilyName(); |
86 } | 87 } |
87 | 88 |
(...skipping 12 matching lines...) Expand all Loading... |
100 &indentity, &outFamilyName, &outStyle)) { | 101 &indentity, &outFamilyName, &outStyle)) { |
101 return NULL; | 102 return NULL; |
102 } | 103 } |
103 | 104 |
104 face = SkNEW_ARGS(FontConfigTypeface, (outStyle, indentity, outFamilyName)); | 105 face = SkNEW_ARGS(FontConfigTypeface, (outStyle, indentity, outFamilyName)); |
105 SkTypefaceCache::Add(face, style); | 106 SkTypefaceCache::Add(face, style); |
106 // SkDebugf("add face <%s> <%s> %p [%d]\n", familyName, outFamilyName.c_str()
, face, face->getRefCnt()); | 107 // SkDebugf("add face <%s> <%s> %p [%d]\n", familyName, outFamilyName.c_str()
, face, face->getRefCnt()); |
107 return face; | 108 return face; |
108 } | 109 } |
109 | 110 |
| 111 #ifndef SK_FONTHOST_USES_FONTMGR |
| 112 |
| 113 SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, |
| 114 const char familyName[], |
| 115 SkTypeface::Style style) { |
| 116 return FontConfigTypeface::LegacyCreateTypeface(familyFace, familyName, |
| 117 style); |
| 118 } |
| 119 |
110 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) { | 120 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) { |
111 if (!stream) { | 121 if (!stream) { |
112 return NULL; | 122 return NULL; |
113 } | 123 } |
114 const size_t length = stream->getLength(); | 124 const size_t length = stream->getLength(); |
115 if (!length) { | 125 if (!length) { |
116 return NULL; | 126 return NULL; |
117 } | 127 } |
118 if (length >= 1024 * 1024 * 1024) { | 128 if (length >= 1024 * 1024 * 1024) { |
119 return NULL; // don't accept too large fonts (>= 1GB) for safety. | 129 return NULL; // don't accept too large fonts (>= 1GB) for safety. |
120 } | 130 } |
121 | 131 |
122 // TODO should the caller give us the style? | 132 // TODO should the caller give us the style? |
123 SkTypeface::Style style = SkTypeface::kNormal; | 133 SkTypeface::Style style = SkTypeface::kNormal; |
124 SkTypeface* face = SkNEW_ARGS(FontConfigTypeface, (style, stream)); | 134 SkTypeface* face = SkNEW_ARGS(FontConfigTypeface, (style, stream)); |
125 return face; | 135 return face; |
126 } | 136 } |
127 | 137 |
128 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { | 138 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { |
129 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); | 139 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); |
130 return stream.get() ? CreateTypefaceFromStream(stream) : NULL; | 140 return stream.get() ? CreateTypefaceFromStream(stream) : NULL; |
131 } | 141 } |
132 | 142 |
| 143 #endif |
| 144 |
133 /////////////////////////////////////////////////////////////////////////////// | 145 /////////////////////////////////////////////////////////////////////////////// |
134 | 146 |
135 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { | 147 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { |
136 SkStream* stream = this->getLocalStream(); | 148 SkStream* stream = this->getLocalStream(); |
137 if (stream) { | 149 if (stream) { |
138 // should have been provided by CreateFromStream() | 150 // should have been provided by CreateFromStream() |
139 *ttcIndex = 0; | 151 *ttcIndex = 0; |
140 | 152 |
141 SkAutoTUnref<SkStream> dupStream(stream->duplicate()); | 153 SkAutoTUnref<SkStream> dupStream(stream->duplicate()); |
142 if (dupStream) { | 154 if (dupStream) { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 tag, offset, length, data) | 201 tag, offset, length, data) |
190 : 0; | 202 : 0; |
191 } | 203 } |
192 | 204 |
193 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc, | 205 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc, |
194 bool* isLocalStream) const { | 206 bool* isLocalStream) const { |
195 desc->setFamilyName(this->getFamilyName()); | 207 desc->setFamilyName(this->getFamilyName()); |
196 *isLocalStream = SkToBool(this->getLocalStream()); | 208 *isLocalStream = SkToBool(this->getLocalStream()); |
197 } | 209 } |
198 | 210 |
199 /////////////////////////////////////////////////////////////////////////////// | 211 SkTypeface* FontConfigTypeface::onRefMatchingStyle(Style style) const { |
| 212 return LegacyCreateTypeface(this, NULL, style); |
| 213 } |
| 214 |
| 215 |
OLD | NEW |