1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "CreateJavaOutputStreamAdaptor.h" 18 #include "GraphicsJNI.h" 19 #include "Picture.h" 20 #include "SkCanvas.h" 21 #include "SkStream.h" 22 #include "core_jni_helpers.h" 23 24 #include <jni.h> 25 26 namespace android { 27 28 static jlong android_graphics_Picture_newPicture(JNIEnv* env, jobject, jlong srcHandle) { 29 const Picture* src = reinterpret_cast<Picture*>(srcHandle); 30 return reinterpret_cast<jlong>(new Picture(src)); 31 } 32 33 static jlong android_graphics_Picture_deserialize(JNIEnv* env, jobject, jobject jstream, 34 jbyteArray jstorage) { 35 Picture* picture = NULL; 36 SkStream* strm = CreateJavaInputStreamAdaptor(env, jstream, jstorage); 37 if (strm) { 38 picture = Picture::CreateFromStream(strm); 39 delete strm; 40 } 41 return reinterpret_cast<jlong>(picture); 42 } 43 44 static void android_graphics_Picture_killPicture(JNIEnv* env, jobject, jlong pictureHandle) { 45 Picture* picture = reinterpret_cast<Picture*>(pictureHandle); 46 SkASSERT(picture); 47 delete picture; 48 } 49 50 static void android_graphics_Picture_draw(JNIEnv* env, jobject, jlong canvasHandle, 51 jlong pictureHandle) { 52 Canvas* canvas = reinterpret_cast<Canvas*>(canvasHandle); 53 Picture* picture = reinterpret_cast<Picture*>(pictureHandle); 54 SkASSERT(canvas); 55 SkASSERT(picture); 56 picture->draw(canvas); 57 } 58 59 static jboolean android_graphics_Picture_serialize(JNIEnv* env, jobject, jlong pictureHandle, 60 jobject jstream, jbyteArray jstorage) { 61 Picture* picture = reinterpret_cast<Picture*>(pictureHandle); 62 SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage); 63 64 if (NULL != strm) { 65 picture->serialize(strm); 66 delete strm; 67 return JNI_TRUE; 68 } 69 return JNI_FALSE; 70 } 71 72 static jint android_graphics_Picture_getWidth(JNIEnv* env, jobject, jlong pictureHandle) { 73 Picture* pict = reinterpret_cast<Picture*>(pictureHandle); 74 return static_cast<jint>(pict->width()); 75 } 76 77 static jint android_graphics_Picture_getHeight(JNIEnv* env, jobject, jlong pictureHandle) { 78 Picture* pict = reinterpret_cast<Picture*>(pictureHandle); 79 return static_cast<jint>(pict->height()); 80 } 81 82 static jlong android_graphics_Picture_beginRecording(JNIEnv* env, jobject, jlong pictHandle, 83 jint w, jint h) { 84 Picture* pict = reinterpret_cast<Picture*>(pictHandle); 85 Canvas* canvas = pict->beginRecording(w, h); 86 return reinterpret_cast<jlong>(canvas); 87 } 88 89 static void android_graphics_Picture_endRecording(JNIEnv* env, jobject, jlong pictHandle) { 90 Picture* pict = reinterpret_cast<Picture*>(pictHandle); 91 pict->endRecording(); 92 } 93 94 static const JNINativeMethod gMethods[] = { 95 {"nativeGetWidth", "(J)I", (void*) android_graphics_Picture_getWidth}, 96 {"nativeGetHeight", "(J)I", (void*) android_graphics_Picture_getHeight}, 97 {"nativeConstructor", "(J)J", (void*) android_graphics_Picture_newPicture}, 98 {"nativeCreateFromStream", "(Ljava/io/InputStream;[B)J", (void*)android_graphics_Picture_deserialize}, 99 {"nativeBeginRecording", "(JII)J", (void*) android_graphics_Picture_beginRecording}, 100 {"nativeEndRecording", "(J)V", (void*) android_graphics_Picture_endRecording}, 101 {"nativeDraw", "(JJ)V", (void*) android_graphics_Picture_draw}, 102 {"nativeWriteToStream", "(JLjava/io/OutputStream;[B)Z", (void*)android_graphics_Picture_serialize}, 103 {"nativeDestructor","(J)V", (void*) android_graphics_Picture_killPicture} 104 }; 105 106 int register_android_graphics_Picture(JNIEnv* env) { 107 return RegisterMethodsOrDie(env, "android/graphics/Picture", gMethods, NELEM(gMethods)); 108 } 109 110 }; // namespace android 111