1 /*
2  * Copyright (C) 2022 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 package org.robolectric.nativeruntime;
18 
19 import android.graphics.RectF;
20 
21 /**
22  * Native methods for Matrix JNI registration.
23  *
24  * <p>Native method signatures are derived from
25  * https://cs.android.com/android/platform/superproject/+/android-12.0.0_r1:frameworks/base/graphics/java/android/graphics/Matrix.java
26  */
27 public class MatrixNatives {
28 
nCreate(long nSrcOrZero)29   public static native long nCreate(long nSrcOrZero);
30 
nGetNativeFinalizer()31   public static native long nGetNativeFinalizer();
32 
nSetRectToRect(long nObject, RectF src, RectF dst, int stf)33   public static native boolean nSetRectToRect(long nObject, RectF src, RectF dst, int stf);
34 
nSetPolyToPoly( long nObject, float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount)35   public static native boolean nSetPolyToPoly(
36       long nObject, float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount);
37 
nMapPoints( long nObject, float[] dst, int dstIndex, float[] src, int srcIndex, int ptCount, boolean isPts)38   public static native void nMapPoints(
39       long nObject,
40       float[] dst,
41       int dstIndex,
42       float[] src,
43       int srcIndex,
44       int ptCount,
45       boolean isPts);
46 
nMapRect(long nObject, RectF dst, RectF src)47   public static native boolean nMapRect(long nObject, RectF dst, RectF src);
48 
nGetValues(long nObject, float[] values)49   public static native void nGetValues(long nObject, float[] values);
50 
nSetValues(long nObject, float[] values)51   public static native void nSetValues(long nObject, float[] values);
52 
53   // ------------------ Critical JNI ------------------------
54 
nIsIdentity(long nObject)55   public static native boolean nIsIdentity(long nObject);
56 
nIsAffine(long nObject)57   public static native boolean nIsAffine(long nObject);
58 
nRectStaysRect(long nObject)59   public static native boolean nRectStaysRect(long nObject);
60 
nReset(long nObject)61   public static native void nReset(long nObject);
62 
nSet(long nObject, long nOther)63   public static native void nSet(long nObject, long nOther);
64 
nSetTranslate(long nObject, float dx, float dy)65   public static native void nSetTranslate(long nObject, float dx, float dy);
66 
nSetScale(long nObject, float sx, float sy, float px, float py)67   public static native void nSetScale(long nObject, float sx, float sy, float px, float py);
68 
nSetScale(long nObject, float sx, float sy)69   public static native void nSetScale(long nObject, float sx, float sy);
70 
nSetRotate(long nObject, float degrees, float px, float py)71   public static native void nSetRotate(long nObject, float degrees, float px, float py);
72 
nSetRotate(long nObject, float degrees)73   public static native void nSetRotate(long nObject, float degrees);
74 
nSetSinCos( long nObject, float sinValue, float cosValue, float px, float py)75   public static native void nSetSinCos(
76       long nObject, float sinValue, float cosValue, float px, float py);
77 
nSetSinCos(long nObject, float sinValue, float cosValue)78   public static native void nSetSinCos(long nObject, float sinValue, float cosValue);
79 
nSetSkew(long nObject, float kx, float ky, float px, float py)80   public static native void nSetSkew(long nObject, float kx, float ky, float px, float py);
81 
nSetSkew(long nObject, float kx, float ky)82   public static native void nSetSkew(long nObject, float kx, float ky);
83 
nSetConcat(long nObject, long nA, long nB)84   public static native void nSetConcat(long nObject, long nA, long nB);
85 
nPreTranslate(long nObject, float dx, float dy)86   public static native void nPreTranslate(long nObject, float dx, float dy);
87 
nPreScale(long nObject, float sx, float sy, float px, float py)88   public static native void nPreScale(long nObject, float sx, float sy, float px, float py);
89 
nPreScale(long nObject, float sx, float sy)90   public static native void nPreScale(long nObject, float sx, float sy);
91 
nPreRotate(long nObject, float degrees, float px, float py)92   public static native void nPreRotate(long nObject, float degrees, float px, float py);
93 
nPreRotate(long nObject, float degrees)94   public static native void nPreRotate(long nObject, float degrees);
95 
nPreSkew(long nObject, float kx, float ky, float px, float py)96   public static native void nPreSkew(long nObject, float kx, float ky, float px, float py);
97 
nPreSkew(long nObject, float kx, float ky)98   public static native void nPreSkew(long nObject, float kx, float ky);
99 
nPreConcat(long nObject, long nOtherMatrix)100   public static native void nPreConcat(long nObject, long nOtherMatrix);
101 
nPostTranslate(long nObject, float dx, float dy)102   public static native void nPostTranslate(long nObject, float dx, float dy);
103 
nPostScale(long nObject, float sx, float sy, float px, float py)104   public static native void nPostScale(long nObject, float sx, float sy, float px, float py);
105 
nPostScale(long nObject, float sx, float sy)106   public static native void nPostScale(long nObject, float sx, float sy);
107 
nPostRotate(long nObject, float degrees, float px, float py)108   public static native void nPostRotate(long nObject, float degrees, float px, float py);
109 
nPostRotate(long nObject, float degrees)110   public static native void nPostRotate(long nObject, float degrees);
111 
nPostSkew(long nObject, float kx, float ky, float px, float py)112   public static native void nPostSkew(long nObject, float kx, float ky, float px, float py);
113 
nPostSkew(long nObject, float kx, float ky)114   public static native void nPostSkew(long nObject, float kx, float ky);
115 
nPostConcat(long nObject, long nOtherMatrix)116   public static native void nPostConcat(long nObject, long nOtherMatrix);
117 
nInvert(long nObject, long nInverse)118   public static native boolean nInvert(long nObject, long nInverse);
119 
nMapRadius(long nObject, float radius)120   public static native float nMapRadius(long nObject, float radius);
121 
nEquals(long nA, long nB)122   public static native boolean nEquals(long nA, long nB);
123 }
124