diff -r ae942d28ec0e -r 2455ef1f5bbc javauis/m3g_akn/src/jni/transformable.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/m3g_akn/src/jni/transformable.inl Wed Sep 01 12:33:18 2010 +0100 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "javax_microedition_m3g_Transformable.h" + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1preRotate +(JNIEnv* aEnv, jclass, jint aHandle, jfloat aAngle, jfloat aAx, jfloat aAy, jfloat aAz) +{ + M3G_DO_LOCK + m3gPreRotate((M3GTransformable)aHandle, aAngle, aAx, aAy, aAz); + M3G_DO_UNLOCK(aEnv) +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1getComposite +(JNIEnv* aEnv, jclass, jint aHandle, jbyteArray aDstArray) +{ + if (validateArray(aEnv, aDstArray, sizeof(M3GMatrix))) + { + jbyte* dstArray = aEnv->GetByteArrayElements(aDstArray, NULL); + if (dstArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + + M3G_DO_LOCK + m3gGetCompositeTransform((M3GTransformable)aHandle, (M3GMatrix *)dstArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseByteArrayElements(aDstArray, dstArray, 0); + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1setTransform +(JNIEnv* aEnv, jclass, jint aHandle, jbyteArray aSrcArray) +{ + if (aSrcArray != NULL) + { + jbyte* srcArray = aEnv->GetByteArrayElements(aSrcArray, NULL); + if (srcArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + M3G_DO_LOCK + m3gSetTransform((M3GTransformable)aHandle, (const M3GMatrix *)srcArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseByteArrayElements(aSrcArray, srcArray, JNI_ABORT); + } + else + { + M3G_DO_LOCK + m3gSetTransform((M3GTransformable)aHandle, NULL); + M3G_DO_UNLOCK(aEnv) + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1setTranslation +(JNIEnv* aEnv, jclass, jint aHandle, jfloat aTx, jfloat aTy, jfloat aTz, jboolean aAbsolute) +{ + + if (aAbsolute) + { + M3G_DO_LOCK + m3gSetTranslation((M3GTransformable)aHandle, aTx, aTy, aTz); + M3G_DO_UNLOCK(aEnv) + } + else + { + M3G_DO_LOCK + m3gTranslate((M3GTransformable)aHandle, aTx, aTy, aTz); + M3G_DO_UNLOCK(aEnv) + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1setOrientation +(JNIEnv* aEnv, jclass, jint aHandle, jfloat aAngle, jfloat aAx, jfloat aAy, jfloat aAz, jboolean aAbsolute) +{ + + if (aAbsolute) + { + M3G_DO_LOCK + m3gSetOrientation((M3GTransformable)aHandle, aAngle, aAx, aAy, aAz); + M3G_DO_UNLOCK(aEnv) + } + else + { + M3G_DO_LOCK + m3gPostRotate((M3GTransformable)aHandle, aAngle, aAx, aAy, aAz); + M3G_DO_UNLOCK(aEnv) + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1getTransform +(JNIEnv* aEnv, jclass, jint aHandle, jbyteArray aDstArray) +{ + if (validateArray(aEnv, aDstArray, sizeof(M3GMatrix))) + { + jbyte* dstArray = aEnv->GetByteArrayElements(aDstArray, NULL); + if (dstArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + M3G_DO_LOCK + m3gGetTransform((M3GTransformable)aHandle, (M3GMatrix *)dstArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseByteArrayElements(aDstArray, dstArray, 0); + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1setScale +(JNIEnv* aEnv, jclass, jint aHandle, jfloat aSx, jfloat aSy, jfloat aSz, jboolean aAbsolute) +{ + + if (aAbsolute) + { + M3G_DO_LOCK + m3gSetScale((M3GTransformable)aHandle, aSx, aSy, aSz); + M3G_DO_UNLOCK(aEnv) + } + else + { + M3G_DO_LOCK + m3gScale((M3GTransformable)aHandle, aSx, aSy, aSz); + M3G_DO_UNLOCK(aEnv) + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1getTranslation +(JNIEnv* aEnv, jclass, jint aHandle, jfloatArray aDstArray) +{ + if (validateArray(aEnv, (jbyteArray)aDstArray, 3)) + { + jfloat* dstArray = aEnv->GetFloatArrayElements(aDstArray, NULL); + if (dstArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + M3G_DO_LOCK + m3gGetTranslation((M3GTransformable)aHandle, (M3Gfloat*)dstArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseFloatArrayElements(aDstArray, dstArray, 0); + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1getScale +(JNIEnv* aEnv, jclass, jint aHandle, jfloatArray aDstArray) +{ + if (validateArray(aEnv, (jbyteArray)aDstArray, 3)) + { + jfloat* dstArray = aEnv->GetFloatArrayElements(aDstArray, NULL); + if (dstArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + M3G_DO_LOCK + m3gGetScale((M3GTransformable)aHandle, (M3Gfloat*)dstArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseFloatArrayElements(aDstArray, dstArray, 0); + } +} + +JNIEXPORT void JNICALL Java_javax_microedition_m3g_Transformable__1getOrientation +(JNIEnv* aEnv, jclass, jint aHandle, jfloatArray aDstArray) +{ + if (validateArray(aEnv, (jbyteArray)aDstArray, 4)) + { + jfloat* dstArray = aEnv->GetFloatArrayElements(aDstArray, NULL); + if (dstArray == NULL) + { + M3G_RAISE_EXCEPTION(aEnv, "java/lang/OutOfMemoryError"); + return; + } + M3G_DO_LOCK + m3gGetOrientation((M3GTransformable)aHandle, (M3Gfloat*)dstArray); + M3G_DO_UNLOCK(aEnv) + aEnv->ReleaseFloatArrayElements(aDstArray, dstArray, 0); + } +}