diff options
author | Ben Wagner <bungeman@google.com> | 2015-01-12 20:32:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-01-12 20:32:02 +0000 |
commit | 8d2e8e2bf7341aa8d4b5c0ea5ce038e745275324 (patch) | |
tree | b4ed4454ba29171e456bac6143b7a39eb0770367 | |
parent | 57f2a47ef17f792a93fb42a4190db59bad965d50 (diff) | |
parent | f462c2491bae67815ae9e4a2ff7ce77db97b49c6 (diff) | |
download | frameworks_base-8d2e8e2bf7341aa8d4b5c0ea5ce038e745275324.zip frameworks_base-8d2e8e2bf7341aa8d4b5c0ea5ce038e745275324.tar.gz frameworks_base-8d2e8e2bf7341aa8d4b5c0ea5ce038e745275324.tar.bz2 |
Merge "Use at least SkStreamAsset for SkTypefaces."
-rw-r--r-- | core/jni/android/graphics/FontFamily.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp index 8a85d62..3e6327b 100644 --- a/core/jni/android/graphics/FontFamily.cpp +++ b/core/jni/android/graphics/FontFamily.cpp @@ -19,6 +19,8 @@ #include "JNIHelp.h" #include <core_jni_helpers.h> +#include "SkData.h" +#include "SkRefCnt.h" #include "SkTypeface.h" #include "GraphicsJNI.h" #include <ScopedPrimitiveArray.h> @@ -82,6 +84,10 @@ static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong return true; } +static void releaseAsset(const void* ptr, size_t length, void* context) { + delete static_cast<Asset*>(context); +} + static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPtr, jobject jassetMgr, jstring jpath) { NPE_CHECK_RETURN_ZERO(env, jassetMgr); @@ -98,12 +104,15 @@ static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPt return false; } - SkStream* stream = new AssetStreamAdaptor(asset, - AssetStreamAdaptor::kYes_OwnAsset, - AssetStreamAdaptor::kYes_HasMemoryBase); + const void* buf = asset->getBuffer(false); + if (NULL == buf) { + delete asset; + return false; + } + + SkAutoTUnref<SkData> data(SkData::NewWithProc(buf, asset->getLength(), releaseAsset, asset)); + SkAutoTUnref<SkMemoryStream> stream(new SkMemoryStream(data)); SkTypeface* face = SkTypeface::CreateFromStream(stream); - // Note: SkTypeface::CreateFromStream holds its own reference to the stream - stream->unref(); if (face == NULL) { ALOGE("addFontFromAsset failed to create font %s", str.c_str()); return false; |