blob: 5f7912b1043e91c278e4071cbbdf770a50b188a0 [file] [log] [blame]
Chris Craik54389792013-12-20 13:28:11 -08001/*
2 * Copyright (C) 2012 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#define LOG_TAG "OpenGLRenderer"
18
19#include <EGL/egl.h>
20
21#include "jni.h"
22#include "GraphicsJNI.h"
23#include <nativehelper/JNIHelp.h>
24#include <android_runtime/AndroidRuntime.h>
25
26#include <DisplayList.h>
27#include <DisplayListRenderer.h>
28
29namespace android {
30
31using namespace uirenderer;
32
33/**
34 * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
35 * devices. This means all the logic must be compiled only when the
36 * preprocessor variable USE_OPENGL_RENDERER is defined.
37 */
38#ifdef USE_OPENGL_RENDERER
39
40// ----------------------------------------------------------------------------
41// DisplayList view properties
42// ----------------------------------------------------------------------------
43
44static void android_view_DisplayList_reset(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000045 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080046 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080047 displayList->reset();
48}
49
50static jint android_view_DisplayList_getDisplayListSize(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000051 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080052 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080053 return displayList->getSize();
54}
55
56static void android_view_DisplayList_setDisplayListName(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000057 jobject clazz, jlong displayListPtr, jstring name) {
Chris Craik7a02ea32013-12-27 16:43:22 -080058 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080059 if (name != NULL) {
60 const char* textArray = env->GetStringUTFChars(name, NULL);
61 displayList->setName(textArray);
62 env->ReleaseStringUTFChars(name, textArray);
63 }
64}
65
66static void android_view_DisplayList_output(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000067 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080068 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080069 displayList->output();
70}
71
72static void android_view_DisplayList_destroyDisplayList(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000073 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080074 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080075 DisplayList::destroyDisplayListDeferred(displayList);
76}
77
78// ----------------------------------------------------------------------------
79// DisplayList view properties
80// ----------------------------------------------------------------------------
81
82static void android_view_DisplayList_setCaching(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000083 jobject clazz, jlong displayListPtr, jboolean caching) {
Chris Craik7a02ea32013-12-27 16:43:22 -080084 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -080085 displayList->setCaching(caching);
86}
87
88static void android_view_DisplayList_setStaticMatrix(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000089 jobject clazz, jlong displayListPtr, jlong matrixPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080090 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
91 SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
Chris Craik54389792013-12-20 13:28:11 -080092 displayList->setStaticMatrix(matrix);
93}
94
95static void android_view_DisplayList_setAnimationMatrix(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000096 jobject clazz, jlong displayListPtr, jlong matrixPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -080097 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
98 SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
Chris Craik54389792013-12-20 13:28:11 -080099 displayList->setAnimationMatrix(matrix);
100}
101
102static void android_view_DisplayList_setClipToBounds(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000103 jobject clazz, jlong displayListPtr, jboolean clipToBounds) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800104 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800105 displayList->setClipToBounds(clipToBounds);
106}
107
Chris Craik6657a6c2014-01-26 11:30:58 -0800108static void android_view_DisplayList_setIsolatedZVolume(JNIEnv* env,
109 jobject clazz, jlong displayListPtr, jboolean shouldIsolate) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800110 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik6657a6c2014-01-26 11:30:58 -0800111 displayList->setIsolatedZVolume(shouldIsolate);
Chris Craikd863a102013-12-19 13:31:15 -0800112}
113
Chris Craik6657a6c2014-01-26 11:30:58 -0800114static void android_view_DisplayList_setProjectBackwards(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000115 jobject clazz, jlong displayListPtr, jboolean shouldProject) {
Alan Viverette58f09b32014-01-08 17:18:19 -0800116 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik6657a6c2014-01-26 11:30:58 -0800117 displayList->setProjectBackwards(shouldProject);
Alan Viverette58f09b32014-01-08 17:18:19 -0800118}
119
Chris Craik1df26442014-02-05 16:50:41 -0800120static void android_view_DisplayList_setProjectionReceiver(JNIEnv* env,
121 jobject clazz, jlong displayListPtr, jboolean shouldRecieve) {
122 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
123 displayList->setProjectionReceiver(shouldRecieve);
124}
125
Chris Craika2fe7af2014-01-28 17:25:06 -0800126static void android_view_DisplayList_setOutline(JNIEnv* env,
127 jobject clazz, jlong displayListPtr, jlong outlinePathPtr) {
128 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
129 SkPath* outline = reinterpret_cast<SkPath*>(outlinePathPtr);
130 displayList->setOutline(outline);
131}
132
ztenghuifad45932014-02-06 10:33:58 -0800133static void android_view_DisplayList_setClipToOutline(JNIEnv* env,
134 jobject clazz, jlong displayListPtr, jboolean clipToOutline) {
135 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
136 displayList->setClipToOutline(clipToOutline);
137}
138
Chris Craik54389792013-12-20 13:28:11 -0800139static void android_view_DisplayList_setAlpha(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000140 jobject clazz, jlong displayListPtr, float alpha) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800141 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800142 displayList->setAlpha(alpha);
143}
144
145static void android_view_DisplayList_setHasOverlappingRendering(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000146 jobject clazz, jlong displayListPtr, bool hasOverlappingRendering) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800147 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800148 displayList->setHasOverlappingRendering(hasOverlappingRendering);
149}
150
151static void android_view_DisplayList_setTranslationX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000152 jobject clazz, jlong displayListPtr, float tx) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800153 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800154 displayList->setTranslationX(tx);
155}
156
157static void android_view_DisplayList_setTranslationY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000158 jobject clazz, jlong displayListPtr, float ty) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800159 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800160 displayList->setTranslationY(ty);
161}
162
163static void android_view_DisplayList_setTranslationZ(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000164 jobject clazz, jlong displayListPtr, float tz) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800165 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800166 displayList->setTranslationZ(tz);
167}
168
169static void android_view_DisplayList_setRotation(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000170 jobject clazz, jlong displayListPtr, float rotation) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800171 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800172 displayList->setRotation(rotation);
173}
174
175static void android_view_DisplayList_setRotationX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000176 jobject clazz, jlong displayListPtr, float rx) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800177 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800178 displayList->setRotationX(rx);
179}
180
181static void android_view_DisplayList_setRotationY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000182 jobject clazz, jlong displayListPtr, float ry) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800183 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800184 displayList->setRotationY(ry);
185}
186
187static void android_view_DisplayList_setScaleX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000188 jobject clazz, jlong displayListPtr, float sx) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800189 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800190 displayList->setScaleX(sx);
191}
192
193static void android_view_DisplayList_setScaleY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000194 jobject clazz, jlong displayListPtr, float sy) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800195 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800196 displayList->setScaleY(sy);
197}
198
199static void android_view_DisplayList_setTransformationInfo(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000200 jobject clazz, jlong displayListPtr, float alpha,
Chris Craik54389792013-12-20 13:28:11 -0800201 float translationX, float translationY, float translationZ,
202 float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800203 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800204 displayList->setAlpha(alpha);
205 displayList->setTranslationX(translationX);
206 displayList->setTranslationY(translationY);
207 displayList->setTranslationZ(translationZ);
208 displayList->setRotation(rotation);
209 displayList->setRotationX(rotationX);
210 displayList->setRotationY(rotationY);
211 displayList->setScaleX(scaleX);
212 displayList->setScaleY(scaleY);
213}
214
215static void android_view_DisplayList_setPivotX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000216 jobject clazz, jlong displayListPtr, float px) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800217 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800218 displayList->setPivotX(px);
219}
220
221static void android_view_DisplayList_setPivotY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000222 jobject clazz, jlong displayListPtr, float py) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800223 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800224 displayList->setPivotY(py);
225}
226
227static void android_view_DisplayList_setCameraDistance(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000228 jobject clazz, jlong displayListPtr, float distance) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800229 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800230 displayList->setCameraDistance(distance);
231}
232
233static void android_view_DisplayList_setLeft(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000234 jobject clazz, jlong displayListPtr, int left) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800235 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800236 displayList->setLeft(left);
237}
238
239static void android_view_DisplayList_setTop(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000240 jobject clazz, jlong displayListPtr, int top) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800241 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800242 displayList->setTop(top);
243}
244
245static void android_view_DisplayList_setRight(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000246 jobject clazz, jlong displayListPtr, int right) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800247 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800248 displayList->setRight(right);
249}
250
251static void android_view_DisplayList_setBottom(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000252 jobject clazz, jlong displayListPtr, int bottom) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800253 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800254 displayList->setBottom(bottom);
255}
256
257static void android_view_DisplayList_setLeftTopRightBottom(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000258 jobject clazz, jlong displayListPtr, int left, int top,
Chris Craik54389792013-12-20 13:28:11 -0800259 int right, int bottom) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800260 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800261 displayList->setLeftTopRightBottom(left, top, right, bottom);
262}
263
264static void android_view_DisplayList_offsetLeftAndRight(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000265 jobject clazz, jlong displayListPtr, float offset) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800266 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800267 displayList->offsetLeftRight(offset);
268}
269
270static void android_view_DisplayList_offsetTopAndBottom(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000271 jobject clazz, jlong displayListPtr, float offset) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800272 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800273 displayList->offsetTopBottom(offset);
274}
275
276static void android_view_DisplayList_getMatrix(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000277 jobject clazz, jlong displayListPtr, jlong matrixPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800278 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
279 SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
Chris Craik54389792013-12-20 13:28:11 -0800280 SkMatrix* source = displayList->getStaticMatrix();
281 if (source) {
282 matrix->setConcat(SkMatrix::I(), *source);
283 } else {
284 matrix->setIdentity();
285 }
286}
287
288static jboolean android_view_DisplayList_hasOverlappingRendering(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000289 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800290 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800291 return displayList->hasOverlappingRendering();
292}
293
294static jfloat android_view_DisplayList_getAlpha(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000295 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800296 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800297 return displayList->getAlpha();
298}
299
300static jfloat android_view_DisplayList_getLeft(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000301 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800302 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800303 return displayList->getLeft();
304}
305
306static jfloat android_view_DisplayList_getTop(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000307 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800308 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800309 return displayList->getTop();
310}
311
312static jfloat android_view_DisplayList_getRight(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000313 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800314 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800315 return displayList->getRight();
316}
317
318static jfloat android_view_DisplayList_getBottom(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000319 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800320 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800321 return displayList->getBottom();
322}
323
324static jfloat android_view_DisplayList_getCameraDistance(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000325 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800326 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800327 return displayList->getCameraDistance();
328}
329
330static jfloat android_view_DisplayList_getScaleX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000331 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800332 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800333 return displayList->getScaleX();
334}
335
336static jfloat android_view_DisplayList_getScaleY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000337 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800338 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800339 return displayList->getScaleY();
340}
341
342static jfloat android_view_DisplayList_getTranslationX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000343 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800344 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800345 return displayList->getTranslationX();
346}
347
348static jfloat android_view_DisplayList_getTranslationY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000349 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800350 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800351 return displayList->getTranslationY();
352}
353
354static jfloat android_view_DisplayList_getRotation(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000355 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800356 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800357 return displayList->getRotation();
358}
359
360static jfloat android_view_DisplayList_getRotationX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000361 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800362 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800363 return displayList->getRotationX();
364}
365
366static jfloat android_view_DisplayList_getRotationY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000367 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800368 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800369 return displayList->getRotationY();
370}
371
372static jfloat android_view_DisplayList_getPivotX(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000373 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800374 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800375 return displayList->getPivotX();
376}
377
378static jfloat android_view_DisplayList_getPivotY(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000379 jobject clazz, jlong displayListPtr) {
Chris Craik7a02ea32013-12-27 16:43:22 -0800380 DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr);
Chris Craik54389792013-12-20 13:28:11 -0800381 return displayList->getPivotY();
382}
383
384#endif // USE_OPENGL_RENDERER
385
386// ----------------------------------------------------------------------------
387// JNI Glue
388// ----------------------------------------------------------------------------
389
390const char* const kClassPathName = "android/view/DisplayList";
391
392static JNINativeMethod gMethods[] = {
393#ifdef USE_OPENGL_RENDERER
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000394 { "nDestroyDisplayList", "(J)V", (void*) android_view_DisplayList_destroyDisplayList },
395 { "nGetDisplayListSize", "(J)I", (void*) android_view_DisplayList_getDisplayListSize },
396 { "nSetDisplayListName", "(JLjava/lang/String;)V",
Chris Craik54389792013-12-20 13:28:11 -0800397 (void*) android_view_DisplayList_setDisplayListName },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000398 { "nOutput", "(J)V", (void*) android_view_DisplayList_output },
Chris Craik54389792013-12-20 13:28:11 -0800399
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000400 { "nReset", "(J)V", (void*) android_view_DisplayList_reset },
401 { "nSetCaching", "(JZ)V", (void*) android_view_DisplayList_setCaching },
402 { "nSetStaticMatrix", "(JJ)V", (void*) android_view_DisplayList_setStaticMatrix },
403 { "nSetAnimationMatrix", "(JJ)V", (void*) android_view_DisplayList_setAnimationMatrix },
404 { "nSetClipToBounds", "(JZ)V", (void*) android_view_DisplayList_setClipToBounds },
Chris Craik6657a6c2014-01-26 11:30:58 -0800405 { "nSetIsolatedZVolume", "(JZ)V", (void*) android_view_DisplayList_setIsolatedZVolume },
Chris Craik1df26442014-02-05 16:50:41 -0800406 { "nSetProjectBackwards", "(JZ)V", (void*) android_view_DisplayList_setProjectBackwards },
407 { "nSetProjectionReceiver","(JZ)V", (void*) android_view_DisplayList_setProjectionReceiver },
Chris Craika2fe7af2014-01-28 17:25:06 -0800408 { "nSetOutline", "(JJ)V", (void*) android_view_DisplayList_setOutline },
ztenghuifad45932014-02-06 10:33:58 -0800409 { "nSetClipToOutline", "(JZ)V", (void*) android_view_DisplayList_setClipToOutline },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000410 { "nSetAlpha", "(JF)V", (void*) android_view_DisplayList_setAlpha },
411 { "nSetHasOverlappingRendering", "(JZ)V",
Chris Craik54389792013-12-20 13:28:11 -0800412 (void*) android_view_DisplayList_setHasOverlappingRendering },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000413 { "nSetTranslationX", "(JF)V", (void*) android_view_DisplayList_setTranslationX },
414 { "nSetTranslationY", "(JF)V", (void*) android_view_DisplayList_setTranslationY },
415 { "nSetTranslationZ", "(JF)V", (void*) android_view_DisplayList_setTranslationZ },
416 { "nSetRotation", "(JF)V", (void*) android_view_DisplayList_setRotation },
417 { "nSetRotationX", "(JF)V", (void*) android_view_DisplayList_setRotationX },
418 { "nSetRotationY", "(JF)V", (void*) android_view_DisplayList_setRotationY },
419 { "nSetScaleX", "(JF)V", (void*) android_view_DisplayList_setScaleX },
420 { "nSetScaleY", "(JF)V", (void*) android_view_DisplayList_setScaleY },
421 { "nSetTransformationInfo","(JFFFFFFFFF)V",
Chris Craik54389792013-12-20 13:28:11 -0800422 (void*) android_view_DisplayList_setTransformationInfo },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000423 { "nSetPivotX", "(JF)V", (void*) android_view_DisplayList_setPivotX },
424 { "nSetPivotY", "(JF)V", (void*) android_view_DisplayList_setPivotY },
425 { "nSetCameraDistance", "(JF)V", (void*) android_view_DisplayList_setCameraDistance },
426 { "nSetLeft", "(JI)V", (void*) android_view_DisplayList_setLeft },
427 { "nSetTop", "(JI)V", (void*) android_view_DisplayList_setTop },
428 { "nSetRight", "(JI)V", (void*) android_view_DisplayList_setRight },
429 { "nSetBottom", "(JI)V", (void*) android_view_DisplayList_setBottom },
430 { "nSetLeftTopRightBottom","(JIIII)V", (void*) android_view_DisplayList_setLeftTopRightBottom },
431 { "nOffsetLeftAndRight", "(JF)V", (void*) android_view_DisplayList_offsetLeftAndRight },
432 { "nOffsetTopAndBottom", "(JF)V", (void*) android_view_DisplayList_offsetTopAndBottom },
Chris Craik54389792013-12-20 13:28:11 -0800433
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000434 { "nGetMatrix", "(JJ)V", (void*) android_view_DisplayList_getMatrix },
435 { "nHasOverlappingRendering", "(J)Z", (void*) android_view_DisplayList_hasOverlappingRendering },
436 { "nGetAlpha", "(J)F", (void*) android_view_DisplayList_getAlpha },
437 { "nGetLeft", "(J)F", (void*) android_view_DisplayList_getLeft },
438 { "nGetTop", "(J)F", (void*) android_view_DisplayList_getTop },
439 { "nGetRight", "(J)F", (void*) android_view_DisplayList_getRight },
440 { "nGetBottom", "(J)F", (void*) android_view_DisplayList_getBottom },
441 { "nGetCameraDistance", "(J)F", (void*) android_view_DisplayList_getCameraDistance },
442 { "nGetScaleX", "(J)F", (void*) android_view_DisplayList_getScaleX },
443 { "nGetScaleY", "(J)F", (void*) android_view_DisplayList_getScaleY },
444 { "nGetTranslationX", "(J)F", (void*) android_view_DisplayList_getTranslationX },
445 { "nGetTranslationY", "(J)F", (void*) android_view_DisplayList_getTranslationY },
446 { "nGetRotation", "(J)F", (void*) android_view_DisplayList_getRotation },
447 { "nGetRotationX", "(J)F", (void*) android_view_DisplayList_getRotationX },
448 { "nGetRotationY", "(J)F", (void*) android_view_DisplayList_getRotationY },
449 { "nGetPivotX", "(J)F", (void*) android_view_DisplayList_getPivotX },
450 { "nGetPivotY", "(J)F", (void*) android_view_DisplayList_getPivotY },
Chris Craik54389792013-12-20 13:28:11 -0800451#endif
452};
453
454#ifdef USE_OPENGL_RENDERER
455 #define FIND_CLASS(var, className) \
456 var = env->FindClass(className); \
457 LOG_FATAL_IF(! var, "Unable to find class " className);
458
459 #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
460 var = env->GetMethodID(clazz, methodName, methodDescriptor); \
461 LOG_FATAL_IF(! var, "Unable to find method " methodName);
462#else
463 #define FIND_CLASS(var, className)
464 #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor)
465#endif
466
467int register_android_view_DisplayList(JNIEnv* env) {
468 return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
469}
470
471};
472