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 "SkFontDescriptor.h" | 9 #include "SkFontDescriptor.h" |
10 #include "SkFontHost.h" | 10 #include "SkFontHost.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 bool isFamilyName(const char* name) const { | 82 bool isFamilyName(const char* name) const { |
83 return fFamilyName.equals(name); | 83 return fFamilyName.equals(name); |
84 } | 84 } |
85 | 85 |
86 protected: | 86 protected: |
87 friend class SkFontHost; // hack until we can make public versions | 87 friend class SkFontHost; // hack until we can make public versions |
88 | 88 |
89 virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE; | 89 virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE; |
90 virtual size_t onGetTableData(SkFontTableTag, size_t offset, | 90 virtual size_t onGetTableData(SkFontTableTag, size_t offset, |
91 size_t length, void* data) const SK_OVERRIDE; | 91 size_t length, void* data) const SK_OVERRIDE; |
92 virtual void onGetFontDescriptor(SkFontDescriptor*) const SK_OVERRIDE; | 92 virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE
; |
93 virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE; | 93 virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE; |
94 | 94 |
95 private: | 95 private: |
96 typedef SkTypeface_FreeType INHERITED; | 96 typedef SkTypeface_FreeType INHERITED; |
97 }; | 97 }; |
98 | 98 |
99 /////////////////////////////////////////////////////////////////////////////// | 99 /////////////////////////////////////////////////////////////////////////////// |
100 | 100 |
101 struct FindRec { | 101 struct FindRec { |
102 FindRec(const char* name, SkTypeface::Style style) | 102 FindRec(const char* name, SkTypeface::Style style) |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 /////////////////////////////////////////////////////////////////////////////// | 176 /////////////////////////////////////////////////////////////////////////////// |
177 | 177 |
178 // DEPRECATED | 178 // DEPRECATED |
179 SkTypeface* SkFontHost::NextLogicalTypeface(SkFontID curr, SkFontID orig) { | 179 SkTypeface* SkFontHost::NextLogicalTypeface(SkFontID curr, SkFontID orig) { |
180 // We don't handle font fallback. | 180 // We don't handle font fallback. |
181 return NULL; | 181 return NULL; |
182 } | 182 } |
183 | 183 |
184 /////////////////////////////////////////////////////////////////////////////// | 184 /////////////////////////////////////////////////////////////////////////////// |
185 | 185 |
186 // Serialize, Deserialize need to be compatible across platforms, hence the use | |
187 // of SkFontDescriptor. | |
188 | |
189 void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) { | |
190 FontConfigTypeface* fct = (FontConfigTypeface*)face; | |
191 | |
192 SkFontDescriptor desc; | |
193 fct->onGetFontDescriptor(&desc); | |
194 desc.serialize(stream); | |
195 | |
196 // by convention, we also write out the actual sfnt data, preceeded by | |
197 // a packed-length. For now we skip that, so we just write the zero. | |
198 stream->writePackedUInt(0); | |
199 } | |
200 | |
201 SkTypeface* SkFontHost::Deserialize(SkStream* stream) { | |
202 SkFontDescriptor descriptor(stream); | |
203 const char* familyName = descriptor.getFamilyName(); | |
204 const SkTypeface::Style style = descriptor.getStyle(); | |
205 | |
206 size_t length = stream->readPackedUInt(); | |
207 if (length > 0) { | |
208 void* addr = sk_malloc_flags(length, 0); | |
209 if (addr) { | |
210 SkAutoTUnref<SkStream> localStream(SkNEW_ARGS(SkMemoryStream, | |
211 (addr, length, false))); | |
212 return SkFontHost::CreateTypefaceFromStream(localStream.get()); | |
213 } | |
214 // failed to allocate, so just skip and create-from-name | |
215 stream->skip(length); | |
216 } | |
217 | |
218 return SkFontHost::CreateTypeface(NULL, familyName, style); | |
219 } | |
220 | |
221 /////////////////////////////////////////////////////////////////////////////// | |
222 | |
223 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { | 186 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { |
224 SkStream* stream = this->getLocalStream(); | 187 SkStream* stream = this->getLocalStream(); |
225 if (stream) { | 188 if (stream) { |
226 // TODO: fix issue 1176. | 189 // TODO: fix issue 1176. |
227 // As of now open_stream will return a stream and unwind it, but the | 190 // As of now open_stream will return a stream and unwind it, but the |
228 // SkStream is not thread safe, and if two threads use the stream they | 191 // SkStream is not thread safe, and if two threads use the stream they |
229 // may collide and print preview for example could still fail, | 192 // may collide and print preview for example could still fail, |
230 // or there could be some failures in rendering if this stream is used | 193 // or there could be some failures in rendering if this stream is used |
231 // there. | 194 // there. |
232 stream->rewind(); | 195 stream->rewind(); |
(...skipping 22 matching lines...) Expand all Loading... |
255 size_t FontConfigTypeface::onGetTableData(SkFontTableTag tag, size_t offset, | 218 size_t FontConfigTypeface::onGetTableData(SkFontTableTag tag, size_t offset, |
256 size_t length, void* data) const { | 219 size_t length, void* data) const { |
257 int ttcIndex; | 220 int ttcIndex; |
258 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); | 221 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); |
259 return stream.get() | 222 return stream.get() |
260 ? SkFontStream::GetTableData(stream, ttcIndex, | 223 ? SkFontStream::GetTableData(stream, ttcIndex, |
261 tag, offset, length, data) | 224 tag, offset, length, data) |
262 : 0; | 225 : 0; |
263 } | 226 } |
264 | 227 |
265 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc) const { | 228 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc, |
266 desc->setStyle(this->style()); | 229 bool* isLocalStream) const { |
267 desc->setFamilyName(this->getFamilyName()); | 230 desc->setFamilyName(this->getFamilyName()); |
| 231 *isLocalStream = SkToBool(this->getLocalStream()); |
268 } | 232 } |
| 233 |
OLD | NEW |