diff options
Diffstat (limited to 'core/jni/android/graphics/NinePatch.cpp')
-rw-r--r-- | core/jni/android/graphics/NinePatch.cpp | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp index 7e6aeae..871e24d 100644 --- a/core/jni/android/graphics/NinePatch.cpp +++ b/core/jni/android/graphics/NinePatch.cpp @@ -46,22 +46,22 @@ class SkNinePatchGlue { public: static jboolean isNinePatchChunk(JNIEnv* env, jobject, jbyteArray obj) { if (NULL == obj) { - return false; + return JNI_FALSE; } if (env->GetArrayLength(obj) < (int)sizeof(Res_png_9patch)) { - return false; + return JNI_FALSE; } const jbyte* array = env->GetByteArrayElements(obj, 0); if (array != NULL) { const Res_png_9patch* chunk = reinterpret_cast<const Res_png_9patch*>(array); int8_t wasDeserialized = chunk->wasDeserialized; env->ReleaseByteArrayElements(obj, const_cast<jbyte*>(array), JNI_ABORT); - return wasDeserialized != -1; + return (wasDeserialized != -1) ? JNI_TRUE : JNI_FALSE; } - return false; + return JNI_FALSE; } - static int8_t* validateNinePatchChunk(JNIEnv* env, jobject, jint, jbyteArray obj) { + static jlong validateNinePatchChunk(JNIEnv* env, jobject, jlong, jbyteArray obj) { size_t chunkSize = env->GetArrayLength(obj); if (chunkSize < (int) (sizeof(Res_png_9patch))) { jniThrowRuntimeException(env, "Array too small for chunk."); @@ -72,10 +72,11 @@ public: // This call copies the content of the jbyteArray env->GetByteArrayRegion(obj, 0, chunkSize, reinterpret_cast<jbyte*>(storage)); // Deserialize in place, return the array we just allocated - return (int8_t*) Res_png_9patch::deserialize(storage); + return reinterpret_cast<jlong>(Res_png_9patch::deserialize(storage)); } - static void finalize(JNIEnv* env, jobject, int8_t* patch) { + static void finalize(JNIEnv* env, jobject, jlong patchHandle) { + int8_t* patch = reinterpret_cast<int8_t*>(patchHandle); #ifdef USE_OPENGL_RENDERER if (android::uirenderer::Caches::hasInstance()) { Res_png_9patch* p = (Res_png_9patch*) patch; @@ -115,9 +116,13 @@ public: } } - static void drawF(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRectF, - const SkBitmap* bitmap, Res_png_9patch* chunk, const SkPaint* paint, + static void drawF(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRectF, + jlong bitmapHandle, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { + SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle); + const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); + Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); + const SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRectF); SkASSERT(bitmap); @@ -130,9 +135,13 @@ public: draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } - static void drawI(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRect, - const SkBitmap* bitmap, Res_png_9patch* chunk, const SkPaint* paint, + static void drawI(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRect, + jlong bitmapHandle, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { + SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle); + const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); + Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); + const SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRect); SkASSERT(bitmap); @@ -144,8 +153,10 @@ public: draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } - static jint getTransparentRegion(JNIEnv* env, jobject, const SkBitmap* bitmap, - Res_png_9patch* chunk, jobject boundsRect) { + static jlong getTransparentRegion(JNIEnv* env, jobject, jlong bitmapHandle, + jlong chunkHandle, jobject boundsRect) { + const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); + Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); SkASSERT(bitmap); SkASSERT(chunk); SkASSERT(boundsRect); @@ -156,7 +167,7 @@ public: SkRegion* region = NULL; NinePatch_Draw(NULL, bounds, *bitmap, *chunk, NULL, ®ion); - return (jint) region; + return reinterpret_cast<jlong>(region); } }; @@ -167,11 +178,11 @@ public: static JNINativeMethod gNinePatchMethods[] = { { "isNinePatchChunk", "([B)Z", (void*) SkNinePatchGlue::isNinePatchChunk }, - { "validateNinePatchChunk", "(I[B)I", (void*) SkNinePatchGlue::validateNinePatchChunk }, - { "nativeFinalize", "(I)V", (void*) SkNinePatchGlue::finalize }, - { "nativeDraw", "(ILandroid/graphics/RectF;IIIII)V", (void*) SkNinePatchGlue::drawF }, - { "nativeDraw", "(ILandroid/graphics/Rect;IIIII)V", (void*) SkNinePatchGlue::drawI }, - { "nativeGetTransparentRegion", "(IILandroid/graphics/Rect;)I", + { "validateNinePatchChunk", "(J[B)J", (void*) SkNinePatchGlue::validateNinePatchChunk }, + { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize }, + { "nativeDraw", "(JLandroid/graphics/RectF;JJJII)V", (void*) SkNinePatchGlue::drawF }, + { "nativeDraw", "(JLandroid/graphics/Rect;JJJII)V", (void*) SkNinePatchGlue::drawI }, + { "nativeGetTransparentRegion", "(JJLandroid/graphics/Rect;)J", (void*) SkNinePatchGlue::getTransparentRegion } }; |