implement android.graphics.Matrix and View.getMatrix()

This is needed for androidx CoordinatorLayout and will also be required
for VectorDrawables
This commit is contained in:
Julian Winkler
2024-03-13 22:51:34 +01:00
parent f852c2bbc9
commit 796742c0fc
10 changed files with 369 additions and 180 deletions

View File

@@ -86,6 +86,7 @@ libtranslationlayer_so = shared_library('translation_layer_main', [
'src/api-impl-jni/graphics/android_graphics_BitmapFactory.c', 'src/api-impl-jni/graphics/android_graphics_BitmapFactory.c',
'src/api-impl-jni/graphics/android_graphics_drawable_Drawable.c', 'src/api-impl-jni/graphics/android_graphics_drawable_Drawable.c',
'src/api-impl-jni/graphics/android_graphics_drawable_DrawableContainer.c', 'src/api-impl-jni/graphics/android_graphics_drawable_DrawableContainer.c',
'src/api-impl-jni/graphics/android_graphics_Matrix.c',
'src/api-impl-jni/graphics/android_graphics_Typeface.c', 'src/api-impl-jni/graphics/android_graphics_Typeface.c',
'src/api-impl-jni/graphics/NinePatchPaintable.c', 'src/api-impl-jni/graphics/NinePatchPaintable.c',
'src/api-impl-jni/media/android_media_MediaCodec.c', 'src/api-impl-jni/media/android_media_MediaCodec.c',

View File

@@ -30,6 +30,8 @@
#define _GET_INT_FIELD(object, field) ((*env)->GetIntField(env, object, _FIELD_ID(_CLASS(object), field, "I"))) #define _GET_INT_FIELD(object, field) ((*env)->GetIntField(env, object, _FIELD_ID(_CLASS(object), field, "I")))
#define _SET_BOOL_FIELD(object, field, value) ((*env)->SetBooleanField(env, object, _FIELD_ID(_CLASS(object), field, "Z"), value)) #define _SET_BOOL_FIELD(object, field, value) ((*env)->SetBooleanField(env, object, _FIELD_ID(_CLASS(object), field, "Z"), value))
#define _GET_BOOL_FIELD(object, field) ((*env)->GetBooleanField(env, object, _FIELD_ID(_CLASS(object), field, "Z"))) #define _GET_BOOL_FIELD(object, field) ((*env)->GetBooleanField(env, object, _FIELD_ID(_CLASS(object), field, "Z")))
#define _GET_FLOAT_FIELD(object, field) ((*env)->GetFloatField(env, object, _FIELD_ID(_CLASS(object), field, "F")))
#define _SET_FLOAT_FIELD(object, field, value) ((*env)->SetFloatField(env, object, _FIELD_ID(_CLASS(object), field, "F"), value))
#define _SET_STATIC_INT_FIELD(class, field, value) ((*env)->SetStaticIntField(env, class, _STATIC_FIELD_ID(class, field, "I"), value)) #define _SET_STATIC_INT_FIELD(class, field, value) ((*env)->SetStaticIntField(env, class, _STATIC_FIELD_ID(class, field, "I"), value))
#define _SET_STATIC_OBJ_FIELD(class, field, type, value) ((*env)->SetStaticObjectField(env, class, _STATIC_FIELD_ID(class, field, type), value)) #define _SET_STATIC_OBJ_FIELD(class, field, type, value) ((*env)->SetStaticObjectField(env, class, _STATIC_FIELD_ID(class, field, type), value))
#define _GET_STATIC_OBJ_FIELD(class, field, type) ((*env)->GetStaticObjectField(env, class, _STATIC_FIELD_ID(class, field, type))) #define _GET_STATIC_OBJ_FIELD(class, field, type) ((*env)->GetStaticObjectField(env, class, _STATIC_FIELD_ID(class, field, type)))

View File

@@ -25,325 +25,333 @@ extern "C" {
#define android_graphics_Matrix_MPERSP_1 7L #define android_graphics_Matrix_MPERSP_1 7L
#undef android_graphics_Matrix_MPERSP_2 #undef android_graphics_Matrix_MPERSP_2
#define android_graphics_Matrix_MPERSP_2 8L #define android_graphics_Matrix_MPERSP_2 8L
/*
* Class: android_graphics_Matrix
* Method: native_create
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_android_graphics_Matrix_native_1create
(JNIEnv *, jclass, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_isIdentity * Method: native_isIdentity
* Signature: (I)Z * Signature: (J)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1isIdentity JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1isIdentity
(JNIEnv *, jclass, jint); (JNIEnv *, jclass, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_rectStaysRect * Method: native_rectStaysRect
* Signature: (I)Z * Signature: (J)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1rectStaysRect JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1rectStaysRect
(JNIEnv *, jclass, jint); (JNIEnv *, jclass, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_reset * Method: native_reset
* Signature: (I)V * Signature: (J)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1reset JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1reset
(JNIEnv *, jclass, jint); (JNIEnv *, jclass, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_set * Method: native_set
* Signature: (II)V * Signature: (JJ)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1set JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1set
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setTranslate * Method: native_setTranslate
* Signature: (IFF)V * Signature: (JFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setTranslate JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setTranslate
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setScale * Method: native_setScale
* Signature: (IFFFF)V * Signature: (JFFFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setScale__IFFFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setScale__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setScale * Method: native_setScale
* Signature: (IFF)V * Signature: (JFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setScale__IFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setScale__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setRotate * Method: native_setRotate
* Signature: (IFFF)V * Signature: (JFFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setRotate__IFFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setRotate__JFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setRotate * Method: native_setRotate
* Signature: (IF)V * Signature: (JF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setRotate__IF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setRotate__JF
(JNIEnv *, jclass, jint, jfloat); (JNIEnv *, jclass, jlong, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setSinCos * Method: native_setSinCos
* Signature: (IFFFF)V * Signature: (JFFFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSinCos__IFFFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSinCos__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setSinCos * Method: native_setSinCos
* Signature: (IFF)V * Signature: (JFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSinCos__IFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSinCos__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setSkew * Method: native_setSkew
* Signature: (IFFFF)V * Signature: (JFFFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSkew__IFFFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSkew__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setSkew * Method: native_setSkew
* Signature: (IFF)V * Signature: (JFF)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSkew__IFF JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setSkew__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setConcat * Method: native_setConcat
* Signature: (III)Z * Signature: (JJJ)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setConcat JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setConcat
(JNIEnv *, jclass, jint, jint, jint); (JNIEnv *, jclass, jlong, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preTranslate * Method: native_preTranslate
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preTranslate JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preTranslate
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preScale * Method: native_preScale
* Signature: (IFFFF)Z * Signature: (JFFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preScale__IFFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preScale__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preScale * Method: native_preScale
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preScale__IFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preScale__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preRotate * Method: native_preRotate
* Signature: (IFFF)Z * Signature: (JFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preRotate__IFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preRotate__JFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preRotate * Method: native_preRotate
* Signature: (IF)Z * Signature: (JF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preRotate__IF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preRotate__JF
(JNIEnv *, jclass, jint, jfloat); (JNIEnv *, jclass, jlong, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preSkew * Method: native_preSkew
* Signature: (IFFFF)Z * Signature: (JFFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preSkew__IFFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preSkew__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preSkew * Method: native_preSkew
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preSkew__IFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preSkew__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_preConcat * Method: native_preConcat
* Signature: (II)Z * Signature: (JJ)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preConcat JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preConcat
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postTranslate * Method: native_postTranslate
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postTranslate JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postTranslate
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postScale * Method: native_postScale
* Signature: (IFFFF)Z * Signature: (JFFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__IFFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postScale * Method: native_postScale
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__IFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postRotate * Method: native_postRotate
* Signature: (IFFF)Z * Signature: (JFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__IFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__JFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postRotate * Method: native_postRotate
* Signature: (IF)Z * Signature: (JF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__IF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__JF
(JNIEnv *, jclass, jint, jfloat); (JNIEnv *, jclass, jlong, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postSkew * Method: native_postSkew
* Signature: (IFFFF)Z * Signature: (JFFFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postSkew__IFFFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postSkew__JFFFF
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postSkew * Method: native_postSkew
* Signature: (IFF)Z * Signature: (JFF)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postSkew__IFF JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postSkew__JFF
(JNIEnv *, jclass, jint, jfloat, jfloat); (JNIEnv *, jclass, jlong, jfloat, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_postConcat * Method: native_postConcat
* Signature: (II)Z * Signature: (JJ)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postConcat JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postConcat
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setRectToRect * Method: native_setRectToRect
* Signature: (ILandroid/graphics/RectF;Landroid/graphics/RectF;I)Z * Signature: (JLandroid/graphics/RectF;Landroid/graphics/RectF;I)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setRectToRect JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setRectToRect
(JNIEnv *, jclass, jint, jobject, jobject, jint); (JNIEnv *, jclass, jlong, jobject, jobject, jint);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setPolyToPoly * Method: native_setPolyToPoly
* Signature: (I[FI[FII)Z * Signature: (J[FI[FII)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setPolyToPoly JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setPolyToPoly
(JNIEnv *, jclass, jint, jfloatArray, jint, jfloatArray, jint, jint); (JNIEnv *, jclass, jlong, jfloatArray, jint, jfloatArray, jint, jint);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_invert * Method: native_invert
* Signature: (II)Z * Signature: (JJ)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1invert JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1invert
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_mapPoints * Method: native_mapPoints
* Signature: (I[FI[FIIZ)V * Signature: (J[FI[FIIZ)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1mapPoints JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1mapPoints
(JNIEnv *, jclass, jint, jfloatArray, jint, jfloatArray, jint, jint, jboolean); (JNIEnv *, jclass, jlong, jfloatArray, jint, jfloatArray, jint, jint, jboolean);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_mapRect * Method: native_mapRect
* Signature: (ILandroid/graphics/RectF;Landroid/graphics/RectF;)Z * Signature: (JLandroid/graphics/RectF;Landroid/graphics/RectF;)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1mapRect JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1mapRect
(JNIEnv *, jclass, jint, jobject, jobject); (JNIEnv *, jclass, jlong, jobject, jobject);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_mapRadius * Method: native_mapRadius
* Signature: (IF)F * Signature: (JF)F
*/ */
JNIEXPORT jfloat JNICALL Java_android_graphics_Matrix_native_1mapRadius JNIEXPORT jfloat JNICALL Java_android_graphics_Matrix_native_1mapRadius
(JNIEnv *, jclass, jint, jfloat); (JNIEnv *, jclass, jlong, jfloat);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_getValues * Method: native_getValues
* Signature: (I[F)V * Signature: (J[F)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1getValues JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1getValues
(JNIEnv *, jclass, jint, jfloatArray); (JNIEnv *, jclass, jlong, jfloatArray);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_setValues * Method: native_setValues
* Signature: (I[F)V * Signature: (J[F)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setValues JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setValues
(JNIEnv *, jclass, jint, jfloatArray); (JNIEnv *, jclass, jlong, jfloatArray);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: native_equals * Method: native_equals
* Signature: (II)Z * Signature: (JJ)Z
*/ */
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1equals JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1equals
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jlong, jlong);
/* /*
* Class: android_graphics_Matrix * Class: android_graphics_Matrix
* Method: finalizer * Method: finalizer
* Signature: (I)V * Signature: (J)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Matrix_finalizer JNIEXPORT void JNICALL Java_android_graphics_Matrix_finalizer
(JNIEnv *, jclass, jint); (JNIEnv *, jclass, jlong);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -250,10 +250,10 @@ JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addPath__II
/* /*
* Class: android_graphics_Path * Class: android_graphics_Path
* Method: native_addPath * Method: native_addPath
* Signature: (III)V * Signature: (IIJ)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addPath__III JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addPath__IIJ
(JNIEnv *, jclass, jint, jint, jint); (JNIEnv *, jclass, jint, jint, jlong);
/* /*
* Class: android_graphics_Path * Class: android_graphics_Path
@@ -282,18 +282,18 @@ JNIEXPORT void JNICALL Java_android_graphics_Path_native_1setLastPoint
/* /*
* Class: android_graphics_Path * Class: android_graphics_Path
* Method: native_transform * Method: native_transform
* Signature: (III)V * Signature: (IJI)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Path_native_1transform__III JNIEXPORT void JNICALL Java_android_graphics_Path_native_1transform__IJI
(JNIEnv *, jclass, jint, jint, jint); (JNIEnv *, jclass, jint, jlong, jint);
/* /*
* Class: android_graphics_Path * Class: android_graphics_Path
* Method: native_transform * Method: native_transform
* Signature: (II)V * Signature: (IJ)V
*/ */
JNIEXPORT void JNICALL Java_android_graphics_Path_native_1transform__II JNIEXPORT void JNICALL Java_android_graphics_Path_native_1transform__IJ
(JNIEnv *, jclass, jint, jint); (JNIEnv *, jclass, jint, jlong);
/* /*
* Class: android_graphics_Path * Class: android_graphics_Path

View File

@@ -319,6 +319,14 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1setVisibility
JNIEXPORT void JNICALL Java_android_view_View_setOnLongClickListener JNIEXPORT void JNICALL Java_android_view_View_setOnLongClickListener
(JNIEnv *, jobject, jobject); (JNIEnv *, jobject, jobject);
/*
* Class: android_view_View
* Method: native_getMatrix
* Signature: (JJ)Z
*/
JNIEXPORT jboolean JNICALL Java_android_view_View_native_1getMatrix
(JNIEnv *, jobject, jlong, jlong);
/* /*
* Class: android_view_View * Class: android_view_View
* Method: native_getGlobalVisibleRect * Method: native_getGlobalVisibleRect

View File

@@ -0,0 +1,167 @@
#include <graphene.h>
#include <stdint.h>
#include "../defines.h"
#include "../util.h"
#include "../generated_headers/android_graphics_Matrix.h"
JNIEXPORT jlong JNICALL Java_android_graphics_Matrix_native_1create(JNIEnv *env, jclass class, jlong src)
{
return _INTPTR(graphene_matrix_init_identity(graphene_matrix_alloc()));
}
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1getValues(JNIEnv *env, jclass class, jlong src, jfloatArray values_ref)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(src);
jfloat *value = (*env)->GetFloatArrayElements(env, values_ref, NULL);
value[android_graphics_Matrix_MSCALE_X] = graphene_matrix_get_value(matrix, 0, 0);
value[android_graphics_Matrix_MSKEW_X] = graphene_matrix_get_value(matrix, 0, 1);
value[android_graphics_Matrix_MTRANS_X] = graphene_matrix_get_value(matrix, 0, 3);
value[android_graphics_Matrix_MSKEW_Y] = graphene_matrix_get_value(matrix, 1, 0);
value[android_graphics_Matrix_MSCALE_Y] = graphene_matrix_get_value(matrix, 1, 1);
value[android_graphics_Matrix_MTRANS_Y] = graphene_matrix_get_value(matrix, 1, 3);
value[android_graphics_Matrix_MPERSP_0] = graphene_matrix_get_value(matrix, 3, 0);
value[android_graphics_Matrix_MPERSP_1] = graphene_matrix_get_value(matrix, 3, 1);
value[android_graphics_Matrix_MPERSP_2] = graphene_matrix_get_value(matrix, 3, 3);
(*env)->ReleaseFloatArrayElements(env, values_ref, value, 0);
}
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1set(JNIEnv *env, jclass class, jlong dest_ptr, jlong src_ptr)
{
graphene_matrix_t *dest = (graphene_matrix_t *)_PTR(dest_ptr);
graphene_matrix_t *src = (graphene_matrix_t *)_PTR(src_ptr);
graphene_matrix_init_from_matrix(dest, src);
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1isIdentity(JNIEnv *env, jclass class, jlong matrix_ptr)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
return graphene_matrix_is_identity(matrix);
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preConcat(JNIEnv *env, jclass class, jlong matrix_ptr, jlong other_ptr)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_t *other = (graphene_matrix_t *)_PTR(other_ptr);
graphene_matrix_multiply(matrix, other, matrix);
return true;
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1mapRect(JNIEnv *env, jclass class, jlong matrix_ptr, jobject dest, jobject src)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_rect_t src_rect = GRAPHENE_RECT_INIT(
_GET_FLOAT_FIELD(src, "left"),
_GET_FLOAT_FIELD(src, "top"),
_GET_FLOAT_FIELD(src, "right") - _GET_FLOAT_FIELD(src, "left"),
_GET_FLOAT_FIELD(src, "bottom") - _GET_FLOAT_FIELD(src, "top")
);
graphene_quad_t dest_quad;
graphene_matrix_transform_rect(matrix, &src_rect, &dest_quad);
graphene_rect_t dest_rect;
graphene_quad_bounds(&dest_quad, &dest_rect);
_SET_FLOAT_FIELD(dest, "left", dest_rect.origin.x);
_SET_FLOAT_FIELD(dest, "top", dest_rect.origin.y);
_SET_FLOAT_FIELD(dest, "right", dest_rect.origin.x + dest_rect.size.width);
_SET_FLOAT_FIELD(dest, "bottom", dest_rect.origin.y + dest_rect.size.height);
return true;
}
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1reset(JNIEnv *env, jclass class, jlong matrix_ptr)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_init_identity(matrix);
}
JNIEXPORT void JNICALL Java_android_graphics_Matrix_finalizer(JNIEnv *env, jclass class, jlong matrix_ptr)
{
graphene_matrix_free((graphene_matrix_t *)_PTR(matrix_ptr));
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postTranslate(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_point3d_t translation = GRAPHENE_POINT3D_INIT(x, y, 0);
graphene_matrix_translate(matrix, &translation);
return true;
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__JFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_scale(matrix, x, y, 1.f);
return true;
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__JFFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat degrees, jfloat px, jfloat py)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(-px, -py, 0));
graphene_matrix_rotate_z(matrix, degrees);
graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(px, py, 0));
return true;
}
JNIEXPORT void Java_android_graphics_Matrix_native_1setScale__JFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_init_scale(matrix, x, y, 1.f);
}
JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setScale__JFFFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y, jfloat px, jfloat py)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_init_translate(matrix, &GRAPHENE_POINT3D_INIT(-px, -py, 0));
graphene_matrix_scale(matrix, x, y, 1.f);
graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(px, py, 0));
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postScale__JFFFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y, jfloat px, jfloat py)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(-px, -py, 0));
graphene_matrix_scale(matrix, x, y, 1.f);
graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(px, py, 0));
return true;
}
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1postRotate__JF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat degrees)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_rotate_z(matrix, degrees);
return true;
}
#define SCALE_TO_FIT_FILL 0
#define SCALE_TO_FIT_START 1
#define SCALE_TO_FIT_CENTER 2
#define SCALE_TO_FIT_END 3
JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1setRectToRect(JNIEnv *env, jclass class, jlong matrix_ptr, jobject src, jobject dest, jint stf)
{
graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr);
graphene_matrix_init_translate(matrix, &GRAPHENE_POINT3D_INIT(-_GET_FLOAT_FIELD(src, "left"), -_GET_FLOAT_FIELD(src, "top"), 0));
float src_width = _GET_FLOAT_FIELD(src, "right") - _GET_FLOAT_FIELD(src, "left");
float src_height = _GET_FLOAT_FIELD(src, "bottom") - _GET_FLOAT_FIELD(src, "top");
float dest_width = _GET_FLOAT_FIELD(dest, "right") - _GET_FLOAT_FIELD(dest, "left");
float dest_height = _GET_FLOAT_FIELD(dest, "bottom") - _GET_FLOAT_FIELD(dest, "top");
float factor_x = dest_width / src_width;
float factor_y = dest_height / src_height;
if (stf != SCALE_TO_FIT_FILL) {
factor_x = factor_y = (factor_x < factor_y) ? factor_x : factor_y;
}
graphene_matrix_scale(matrix, factor_x, factor_y, 1.f);
graphene_point3d_t translation = GRAPHENE_POINT3D_INIT(_GET_FLOAT_FIELD(dest, "left"), _GET_FLOAT_FIELD(dest, "top"), 0);
if (stf == SCALE_TO_FIT_CENTER) {
translation.x += (dest_width - src_width * factor_x) / 2;
translation.y += (dest_height - src_height * factor_y) / 2;
} else if (stf == SCALE_TO_FIT_END) {
translation.x += (dest_width - src_width * factor_x);
translation.y += (dest_height - src_height * factor_y);
}
graphene_matrix_translate(matrix, &translation);
return true;
}

View File

@@ -523,3 +523,9 @@ JNIEXPORT void JNICALL Java_android_view_View_setOnLongClickListener(JNIEnv *env
gtk_widget_add_controller(widget, controller); gtk_widget_add_controller(widget, controller);
g_object_set_data(G_OBJECT(widget), "on_long_click_listener", controller); g_object_set_data(G_OBJECT(widget), "on_long_click_listener", controller);
} }
JNIEXPORT jboolean JNICALL Java_android_view_View_native_1getMatrix(JNIEnv *env, jobject this, jlong widget_ptr, jlong matrix_ptr)
{
GtkWidget *widget = GTK_WIDGET(_PTR(widget_ptr));
return gtk_widget_compute_transform(gtk_widget_get_parent(gtk_widget_get_parent(widget)), widget, _PTR(matrix_ptr));
}

View File

@@ -183,7 +183,7 @@ public class Matrix {
/** /**
* @hide * @hide
*/ */
public int native_instance; public long native_instance;
/** /**
* Create an identity matrix * Create an identity matrix
*/ */
@@ -202,8 +202,7 @@ public class Matrix {
* This maybe faster than testing if (getType() == 0) * This maybe faster than testing if (getType() == 0)
*/ */
public boolean isIdentity() { public boolean isIdentity() {
return true; return native_isIdentity(native_instance);
// return native_isIdentity(native_instance);
} }
/** /**
* Returns true if will map a rectangle to another rectangle. This can be * Returns true if will map a rectangle to another rectangle. This can be
@@ -221,7 +220,7 @@ public class Matrix {
if (src == null) { if (src == null) {
reset(); reset();
} else { } else {
// native_set(native_instance, src.native_instance); native_set(native_instance, src.native_instance);
} }
} }
/** /**
@@ -246,7 +245,7 @@ public class Matrix {
* Set the matrix to identity * Set the matrix to identity
*/ */
public void reset() { public void reset() {
// native_reset(native_instance); native_reset(native_instance);
} }
/** /**
* Set the matrix to translate by (dx, dy). * Set the matrix to translate by (dx, dy).
@@ -260,13 +259,13 @@ public class Matrix {
* specified transformation. * specified transformation.
*/ */
public void setScale(float sx, float sy, float px, float py) { public void setScale(float sx, float sy, float px, float py) {
// native_setScale(native_instance, sx, sy, px, py); native_setScale(native_instance, sx, sy, px, py);
} }
/** /**
* Set the matrix to scale by sx and sy. * Set the matrix to scale by sx and sy.
*/ */
public void setScale(float sx, float sy) { public void setScale(float sx, float sy) {
// native_setScale(native_instance, sx, sy); native_setScale(native_instance, sx, sy);
} }
/** /**
* Set the matrix to rotate by the specified number of degrees, with a pivot * Set the matrix to rotate by the specified number of degrees, with a pivot
@@ -381,32 +380,28 @@ public class Matrix {
* M' = T(dx, dy) * M * M' = T(dx, dy) * M
*/ */
public boolean postTranslate(float dx, float dy) { public boolean postTranslate(float dx, float dy) {
// return native_postTranslate(native_instance, dx, dy); return native_postTranslate(native_instance, dx, dy);
return true;
} }
/** /**
* Postconcats the matrix with the specified scale. * Postconcats the matrix with the specified scale.
* M' = S(sx, sy, px, py) * M * M' = S(sx, sy, px, py) * M
*/ */
public boolean postScale(float sx, float sy, float px, float py) { public boolean postScale(float sx, float sy, float px, float py) {
// return native_postScale(native_instance, sx, sy, px, py); return native_postScale(native_instance, sx, sy, px, py);
return true;
} }
/** /**
* Postconcats the matrix with the specified scale. * Postconcats the matrix with the specified scale.
* M' = S(sx, sy) * M * M' = S(sx, sy) * M
*/ */
public boolean postScale(float sx, float sy) { public boolean postScale(float sx, float sy) {
// return native_postScale(native_instance, sx, sy); return native_postScale(native_instance, sx, sy);
return true;
} }
/** /**
* Postconcats the matrix with the specified rotation. * Postconcats the matrix with the specified rotation.
* M' = R(degrees, px, py) * M * M' = R(degrees, px, py) * M
*/ */
public boolean postRotate(float degrees, float px, float py) { public boolean postRotate(float degrees, float px, float py) {
// return native_postRotate(native_instance, degrees, px, py); return native_postRotate(native_instance, degrees, px, py);
return true;
} }
/** /**
* Postconcats the matrix with the specified rotation. * Postconcats the matrix with the specified rotation.
@@ -486,8 +481,7 @@ public class Matrix {
if (dst == null || src == null) { if (dst == null || src == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
// return native_setRectToRect(native_instance, src, dst, stf.nativeInt); return native_setRectToRect(native_instance, src, dst, stf.nativeInt);
return true;
} }
// private helper to perform range checks on arrays of "points" // private helper to perform range checks on arrays of "points"
private static void checkPointArrays(float[] src, int srcIndex, private static void checkPointArrays(float[] src, int srcIndex,
@@ -634,8 +628,7 @@ public class Matrix {
if (dst == null || src == null) { if (dst == null || src == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
// return native_mapRect(native_instance, dst, src); return native_mapRect(native_instance, dst, src);
return false;
} }
/** /**
* Apply this matrix to the rectangle, and write the transformed rectangle * Apply this matrix to the rectangle, and write the transformed rectangle
@@ -747,89 +740,87 @@ public class Matrix {
@Override @Override
protected void finalize() throws Throwable { protected void finalize() throws Throwable {
try { try {
// finalizer(native_instance); finalizer(native_instance);
} finally { } finally {
super.finalize(); super.finalize();
} }
} }
/*package*/ final int ni() { /*package*/ final long ni() {
return native_instance; return native_instance;
} }
private static /*native*/ int native_create(int native_src_or_zero) { private static native long native_create(long native_src_or_zero);
return 0; private static native boolean native_isIdentity(long native_object);
} private static native boolean native_rectStaysRect(long native_object);
private static native boolean native_isIdentity(int native_object); private static native void native_reset(long native_object);
private static native boolean native_rectStaysRect(int native_object); private static native void native_set(long native_object, long other);
private static native void native_reset(int native_object); private static native void native_setTranslate(long native_object,
private static native void native_set(int native_object, int other);
private static native void native_setTranslate(int native_object,
float dx, float dy); float dx, float dy);
private static native void native_setScale(int native_object, private static native void native_setScale(long native_object,
float sx, float sy, float px, float py); float sx, float sy, float px, float py);
private static native void native_setScale(int native_object, private static native void native_setScale(long native_object,
float sx, float sy); float sx, float sy);
private static native void native_setRotate(int native_object, private static native void native_setRotate(long native_object,
float degrees, float px, float py); float degrees, float px, float py);
private static native void native_setRotate(int native_object, private static native void native_setRotate(long native_object,
float degrees); float degrees);
private static native void native_setSinCos(int native_object, private static native void native_setSinCos(long native_object,
float sinValue, float cosValue, float px, float py); float sinValue, float cosValue, float px, float py);
private static native void native_setSinCos(int native_object, private static native void native_setSinCos(long native_object,
float sinValue, float cosValue); float sinValue, float cosValue);
private static native void native_setSkew(int native_object, private static native void native_setSkew(long native_object,
float kx, float ky, float px, float py); float kx, float ky, float px, float py);
private static native void native_setSkew(int native_object, private static native void native_setSkew(long native_object,
float kx, float ky); float kx, float ky);
private static native boolean native_setConcat(int native_object, private static native boolean native_setConcat(long native_object,
int a, int b); long a, long b);
private static native boolean native_preTranslate(int native_object, private static native boolean native_preTranslate(long native_object,
float dx, float dy); float dx, float dy);
private static native boolean native_preScale(int native_object, private static native boolean native_preScale(long native_object,
float sx, float sy, float px, float py); float sx, float sy, float px, float py);
private static native boolean native_preScale(int native_object, private static native boolean native_preScale(long native_object,
float sx, float sy); float sx, float sy);
private static native boolean native_preRotate(int native_object, private static native boolean native_preRotate(long native_object,
float degrees, float px, float py); float degrees, float px, float py);
private static native boolean native_preRotate(int native_object, private static native boolean native_preRotate(long native_object,
float degrees); float degrees);
private static native boolean native_preSkew(int native_object, private static native boolean native_preSkew(long native_object,
float kx, float ky, float px, float py); float kx, float ky, float px, float py);
private static native boolean native_preSkew(int native_object, private static native boolean native_preSkew(long native_object,
float kx, float ky); float kx, float ky);
private static native boolean native_preConcat(int native_object, private static native boolean native_preConcat(long native_object,
int other_matrix); long other_matrix);
private static native boolean native_postTranslate(int native_object, private static native boolean native_postTranslate(long native_object,
float dx, float dy); float dx, float dy);
private static native boolean native_postScale(int native_object, private static native boolean native_postScale(long native_object,
float sx, float sy, float px, float py); float sx, float sy, float px, float py);
private static native boolean native_postScale(int native_object, private static native boolean native_postScale(long native_object,
float sx, float sy); float sx, float sy);
private static native boolean native_postRotate(int native_object, private static native boolean native_postRotate(long native_object,
float degrees, float px, float py); float degrees, float px, float py);
private static native boolean native_postRotate(int native_object, private static native boolean native_postRotate(long native_object,
float degrees); float degrees);
private static native boolean native_postSkew(int native_object, private static native boolean native_postSkew(long native_object,
float kx, float ky, float px, float py); float kx, float ky, float px, float py);
private static native boolean native_postSkew(int native_object, private static native boolean native_postSkew(long native_object,
float kx, float ky); float kx, float ky);
private static native boolean native_postConcat(int native_object, private static native boolean native_postConcat(long native_object,
int other_matrix); long other_matrix);
private static native boolean native_setRectToRect(int native_object, private static native boolean native_setRectToRect(long native_object,
RectF src, RectF dst, int stf); RectF src, RectF dst, int stf);
private static native boolean native_setPolyToPoly(int native_object, private static native boolean native_setPolyToPoly(long native_object,
float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount); float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount);
private static native boolean native_invert(int native_object, int inverse); private static native boolean native_invert(long native_object, long inverse);
private static native void native_mapPoints(int native_object, private static native void native_mapPoints(long native_object,
float[] dst, int dstIndex, float[] src, int srcIndex, float[] dst, int dstIndex, float[] src, int srcIndex,
int ptCount, boolean isPts); int ptCount, boolean isPts);
private static native boolean native_mapRect(int native_object, private static native boolean native_mapRect(long native_object,
RectF dst, RectF src); RectF dst, RectF src);
private static native float native_mapRadius(int native_object, private static native float native_mapRadius(long native_object,
float radius); float radius);
private static native void native_getValues(int native_object, private static native void native_getValues(long native_object,
float[] values); float[] values);
private static native void native_setValues(int native_object, private static native void native_setValues(long native_object,
float[] values); float[] values);
private static native boolean native_equals(int native_a, int native_b); private static native boolean native_equals(long native_a, long native_b);
private static native void finalizer(int native_instance); private static native void finalizer(long native_instance);
} }

View File

@@ -709,12 +709,12 @@ mDetectSimplePaths = HardwareRenderer.isAvailable();
private static native void native_addRoundRect(int nPath, RectF r, float[] radii, int dir); private static native void native_addRoundRect(int nPath, RectF r, float[] radii, int dir);
private static native void native_addPath(int nPath, int src, float dx, float dy); private static native void native_addPath(int nPath, int src, float dx, float dy);
private static native void native_addPath(int nPath, int src); private static native void native_addPath(int nPath, int src);
private static native void native_addPath(int nPath, int src, int matrix); private static native void native_addPath(int nPath, int src, long matrix);
private static native void native_offset(int nPath, float dx, float dy, int dst_path); private static native void native_offset(int nPath, float dx, float dy, int dst_path);
private static native void native_offset(int nPath, float dx, float dy); private static native void native_offset(int nPath, float dx, float dy);
private static native void native_setLastPoint(int nPath, float dx, float dy); private static native void native_setLastPoint(int nPath, float dx, float dy);
private static native void native_transform(int nPath, int matrix, int dst_path); private static native void native_transform(int nPath, long matrix, int dst_path);
private static native void native_transform(int nPath, int matrix); private static native void native_transform(int nPath, long matrix);
private static native boolean native_op(int path1, int path2, int op, int result); private static native boolean native_op(int path1, int path2, int op, int result);
private static native void finalizer(int nPath); private static native void finalizer(int nPath);
} }

View File

@@ -1374,7 +1374,13 @@ public class View extends Object {
public boolean onGenericMotionEvent(MotionEvent event) {return false;} public boolean onGenericMotionEvent(MotionEvent event) {return false;}
protected boolean awakenScrollBars() {return false;} protected boolean awakenScrollBars() {return false;}
public Matrix getMatrix() {return new Matrix();}
protected native boolean native_getMatrix(long widget, long matrix);
public Matrix getMatrix() {
Matrix matrix = new Matrix();
native_getMatrix(widget, matrix.native_instance);
return matrix;
}
protected static final int[] EMPTY_STATE_SET = new int[0]; protected static final int[] EMPTY_STATE_SET = new int[0];