Home | History | Annotate | Download | only in jni
      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 "jni.h"
     18 #include "GraphicsJNI.h"
     19 #include <android_runtime/AndroidRuntime.h>
     20 
     21 #include "Picture.h"
     22 
     23 #include "SkCanvas.h"
     24 #include "SkStream.h"
     25 #include "SkTemplates.h"
     26 #include "CreateJavaOutputStreamAdaptor.h"
     27 
     28 namespace android {
     29 
     30 static jlong android_graphics_Picture_newPicture(JNIEnv* env, jobject, jlong srcHandle) {
     31     const Picture* src = reinterpret_cast<Picture*>(srcHandle);
     32     return reinterpret_cast<jlong>(new Picture(src));
     33 }
     34 
     35 static jlong android_graphics_Picture_deserialize(JNIEnv* env, jobject, jobject jstream,
     36                                                   jbyteArray jstorage) {
     37     Picture* picture = NULL;
     38     SkStream* strm = CreateJavaInputStreamAdaptor(env, jstream, jstorage);
     39     if (strm) {
     40         picture = Picture::CreateFromStream(strm);
     41         delete strm;
     42     }
     43     return reinterpret_cast<jlong>(picture);
     44 }
     45 
     46 static void android_graphics_Picture_killPicture(JNIEnv* env, jobject, jlong pictureHandle) {
     47     Picture* picture = reinterpret_cast<Picture*>(pictureHandle);
     48     SkASSERT(picture);
     49     delete picture;
     50 }
     51 
     52 static void android_graphics_Picture_draw(JNIEnv* env, jobject, jlong canvasHandle,
     53                                           jlong pictureHandle) {
     54     Canvas* canvas = reinterpret_cast<Canvas*>(canvasHandle);
     55     Picture* picture = reinterpret_cast<Picture*>(pictureHandle);
     56     SkASSERT(canvas);
     57     SkASSERT(picture);
     58     picture->draw(canvas);
     59 }
     60 
     61 static jboolean android_graphics_Picture_serialize(JNIEnv* env, jobject, jlong pictureHandle,
     62                                                    jobject jstream, jbyteArray jstorage) {
     63     Picture* picture = reinterpret_cast<Picture*>(pictureHandle);
     64     SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage);
     65 
     66     if (NULL != strm) {
     67         picture->serialize(strm);
     68         delete strm;
     69         return JNI_TRUE;
     70     }
     71     return JNI_FALSE;
     72 }
     73 
     74 static jint android_graphics_Picture_getWidth(JNIEnv* env, jobject, jlong pictureHandle) {
     75     Picture* pict = reinterpret_cast<Picture*>(pictureHandle);
     76     return static_cast<jint>(pict->width());
     77 }
     78 
     79 static jint android_graphics_Picture_getHeight(JNIEnv* env, jobject, jlong pictureHandle) {
     80     Picture* pict = reinterpret_cast<Picture*>(pictureHandle);
     81     return static_cast<jint>(pict->height());
     82 }
     83 
     84 static jlong android_graphics_Picture_beginRecording(JNIEnv* env, jobject, jlong pictHandle,
     85                                                      jint w, jint h) {
     86     Picture* pict = reinterpret_cast<Picture*>(pictHandle);
     87     Canvas* canvas = pict->beginRecording(w, h);
     88     return reinterpret_cast<jlong>(canvas);
     89 }
     90 
     91 static void android_graphics_Picture_endRecording(JNIEnv* env, jobject, jlong pictHandle) {
     92     Picture* pict = reinterpret_cast<Picture*>(pictHandle);
     93     pict->endRecording();
     94 }
     95 
     96 static JNINativeMethod gMethods[] = {
     97     {"nativeGetWidth", "(J)I", (void*) android_graphics_Picture_getWidth},
     98     {"nativeGetHeight", "(J)I", (void*) android_graphics_Picture_getHeight},
     99     {"nativeConstructor", "(J)J", (void*) android_graphics_Picture_newPicture},
    100     {"nativeCreateFromStream", "(Ljava/io/InputStream;[B)J", (void*)android_graphics_Picture_deserialize},
    101     {"nativeBeginRecording", "(JII)J", (void*) android_graphics_Picture_beginRecording},
    102     {"nativeEndRecording", "(J)V", (void*) android_graphics_Picture_endRecording},
    103     {"nativeDraw", "(JJ)V", (void*) android_graphics_Picture_draw},
    104     {"nativeWriteToStream", "(JLjava/io/OutputStream;[B)Z", (void*)android_graphics_Picture_serialize},
    105     {"nativeDestructor","(J)V", (void*) android_graphics_Picture_killPicture}
    106 };
    107 
    108 int register_android_graphics_Picture(JNIEnv* env) {
    109     return AndroidRuntime::registerNativeMethods(env, "android/graphics/Picture", gMethods, NELEM(gMethods));
    110 }
    111 
    112 }; // namespace android
    113