summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Wagner <bungeman@google.com>2015-01-12 20:32:01 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-01-12 20:32:02 +0000
commit8d2e8e2bf7341aa8d4b5c0ea5ce038e745275324 (patch)
treeb4ed4454ba29171e456bac6143b7a39eb0770367
parent57f2a47ef17f792a93fb42a4190db59bad965d50 (diff)
parentf462c2491bae67815ae9e4a2ff7ce77db97b49c6 (diff)
downloadframeworks_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.cpp19
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;