diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-03-22 15:17:21 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-03-22 15:17:21 +0000 |
commit | 0228856899175169649e2efd9aeb8b8c7185a934 (patch) | |
tree | 7a2efdc695fe11efd0302f9e9336a71dbfc0de38 | |
parent | 253ac10622c12df82e0d3955af9e4260ad62b2de (diff) |
revert 8331 (broke android text)
git-svn-id: http://skia.googlecode.com/svn/trunk@8339 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | src/ports/SkFontHost_android.cpp | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp index 1c1db12f07..5d3b583892 100644 --- a/src/ports/SkFontHost_android.cpp +++ b/src/ports/SkFontHost_android.cpp @@ -313,6 +313,7 @@ public: bool isSysFont() const { return fIsSysFont; } + virtual SkStream* openStream() = 0; virtual const char* getUniqueString() const = 0; virtual const char* getFilePath() const = 0; @@ -337,22 +338,17 @@ public: fStream->unref(); } - virtual const char* getUniqueString() const SK_OVERRIDE { return NULL; } - virtual const char* getFilePath() const SK_OVERRIDE { return NULL; } - -protected: - virtual SkStream* openStream(int* ttcIndex) const SK_OVERRIDE { - // TODO: we should be given this when we were created - *ttcIndex = 0; - + // overrides + virtual SkStream* openStream() { // we just ref our existing stream, since the caller will call unref() // when they are through - // TODO: replace with shallow-copy when we have that for streams fStream->ref(); // must rewind each time, since the caller assumes a "new" stream fStream->rewind(); return fStream; } + virtual const char* getUniqueString() const { return NULL; } + virtual const char* getFilePath() const { return NULL; } private: SkStream* fStream; @@ -374,6 +370,10 @@ public: fPath.set(path); } + virtual SkStream* openStream() SK_OVERRIDE { + return SkStream::NewFromFile(fPath.c_str()); + } + virtual const char* getUniqueString() const SK_OVERRIDE { const char* str = strrchr(fPath.c_str(), '/'); if (str) { @@ -386,14 +386,6 @@ public: return fPath.c_str(); } -protected: - virtual SkStream* openStream(int* ttcIndex) const SK_OVERRIDE { - // TODO: we should be given this when we were created - *ttcIndex = 0; - - return SkStream::NewFromFile(fPath.c_str()); - } - private: SkString fPath; @@ -757,7 +749,7 @@ void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) { const bool isCustomFont = !((FamilyTypeface*)face)->isSysFont(); if (isCustomFont) { // store the entire font in the fontData - SkStream* fontStream = face->openStream(NULL); + SkStream* fontStream = ((FamilyTypeface*)face)->openStream(); const uint32_t length = fontStream->getLength(); stream->writePackedUInt(length); @@ -842,7 +834,16 @@ SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, } SkStream* SkFontHost::OpenStream(uint32_t fontID) { - return NULL; + SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); + + FamilyTypeface* tf = (FamilyTypeface*)find_from_uniqueID(fontID); + SkStream* stream = tf ? tf->openStream() : NULL; + + if (stream && stream->getLength() == 0) { + stream->unref(); + stream = NULL; + } + return stream; } SkTypeface* SkFontHost::NextLogicalTypeface(SkFontID currFontID, SkFontID origFontID) { |