Index: src/core/SkTypeface.cpp |
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp |
index 0f5d70b1a8ccbe28ce2c51252223e2e70f11ed31..342c41553d15da8e98a2764eb46e40fe808ec4e7 100644 |
--- a/src/core/SkTypeface.cpp |
+++ b/src/core/SkTypeface.cpp |
@@ -143,6 +143,11 @@ SkTypeface* SkTypeface::CreateFromStream(SkStreamAsset* stream, int index) { |
return fm->createFromStream(stream, index); |
} |
+SkTypeface* SkTypeface::CreateFromFontData(SkFontData* data) { |
+ SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault()); |
+ return fm->createFromFontData(data); |
+} |
+ |
SkTypeface* SkTypeface::CreateFromFile(const char path[], int index) { |
SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault()); |
return fm->createFromFile(path, index); |
@@ -157,9 +162,7 @@ void SkTypeface::serialize(SkWStream* wstream) const { |
// Embed font data if it's a local font. |
if (isLocal && !desc.hasFontData()) { |
- int ttcIndex; |
- desc.setFontData(this->onOpenStream(&ttcIndex)); |
- desc.setFontIndex(ttcIndex); |
+ desc.setFontData(this->onCreateFontData()); |
} |
desc.serialize(wstream); |
} |
@@ -171,18 +174,16 @@ void SkTypeface::serializeForcingEmbedding(SkWStream* wstream) const { |
// Always embed font data. |
if (!desc.hasFontData()) { |
- int ttcIndex; |
- desc.setFontData(this->onOpenStream(&ttcIndex)); |
- desc.setFontIndex(ttcIndex); |
+ desc.setFontData(this->onCreateFontData()); |
} |
desc.serialize(wstream); |
} |
SkTypeface* SkTypeface::Deserialize(SkStream* stream) { |
SkFontDescriptor desc(stream); |
- SkStreamAsset* data = desc.transferFontData(); |
+ SkFontData* data = desc.detachFontData(); |
if (data) { |
- SkTypeface* typeface = SkTypeface::CreateFromStream(data, desc.getFontIndex()); |
+ SkTypeface* typeface = SkTypeface::CreateFromFontData(data); |
if (typeface) { |
return typeface; |
} |
@@ -218,6 +219,17 @@ SkStreamAsset* SkTypeface::openStream(int* ttcIndex) const { |
return this->onOpenStream(ttcIndex); |
} |
+SkFontData* SkTypeface::createFontData() const { |
+ return this->onCreateFontData(); |
+} |
+ |
+// This implementation is temporary until this method can be made pure virtual. |
+SkFontData* SkTypeface::onCreateFontData() const { |
+ int index; |
+ SkAutoTDelete<SkStreamAsset> stream(this->onOpenStream(&index)); |
+ return new SkFontData(stream.detach(), index, NULL, 0); |
+}; |
+ |
int SkTypeface::charsToGlyphs(const void* chars, Encoding encoding, |
uint16_t glyphs[], int glyphCount) const { |
if (glyphCount <= 0) { |