1a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase/* 2a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * Copyright (C) 2012 The Android Open Source Project 3a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * 4a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * you may not use this file except in compliance with the License. 6a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * You may obtain a copy of the License at 7a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * 8a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * 10a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * Unless required by applicable law or agreed to in writing, software 11a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * See the License for the specific language governing permissions and 14a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * limitations under the License. 15a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase */ 16a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 17a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#define LOG_TAG "OpenGLRenderer" 18a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 19a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include <EGL/egl.h> 20a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 21a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include "jni.h" 22a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include "GraphicsJNI.h" 23a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include <nativehelper/JNIHelp.h> 24a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include <android_runtime/AndroidRuntime.h> 25a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 26e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include <Animator.h> 27a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#include <DisplayListRenderer.h> 28113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <RenderNode.h> 296ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod#include <Paint.h> 30a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 31a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasenamespace android { 32a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 33a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haaseusing namespace uirenderer; 34a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 35a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase/** 36a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * Note: OpenGLRenderer JNI layer is generated and compiled only on supported 37a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * devices. This means all the logic must be compiled only when the 38a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase * preprocessor variable USE_OPENGL_RENDERER is defined. 39a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase */ 40a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#ifdef USE_OPENGL_RENDERER 41a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 4279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck#define SET_AND_DIRTY(prop, val, dirtyFlag) \ 4379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck (reinterpret_cast<RenderNode*>(renderNodePtr)->mutateStagingProperties().prop(val) \ 4479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck ? (reinterpret_cast<RenderNode*>(renderNodePtr)->setPropertyFieldsDirty(dirtyFlag), true) \ 4579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck : false) 4679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck 4752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy// ---------------------------------------------------------------------------- 4852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy// DisplayList view properties 4952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy// ---------------------------------------------------------------------------- 5052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 518de65a8e05285df52a1e6f0c1d5616dd233298a7John Reckstatic void android_view_RenderNode_output(JNIEnv* env, 528de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 538de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 548de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->output(); 558de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck} 568de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck 57fe5e7b7346a54537b980796ceeca66bfdbd05561John Reckstatic jint android_view_RenderNode_getDebugSize(JNIEnv* env, 58fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck jobject clazz, jlong renderNodePtr) { 59fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 60fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck return renderNode->getDebugSize(); 61fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck} 62fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck 638de65a8e05285df52a1e6f0c1d5616dd233298a7John Reckstatic jlong android_view_RenderNode_create(JNIEnv* env, jobject clazz, jstring name) { 648de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = new RenderNode(); 658de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->incStrong(0); 6652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy if (name != NULL) { 6752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy const char* textArray = env->GetStringUTFChars(name, NULL); 688de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->setName(textArray); 6952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy env->ReleaseStringUTFChars(name, textArray); 7052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 718de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return reinterpret_cast<jlong>(renderNode); 7252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 7352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 748de65a8e05285df52a1e6f0c1d5616dd233298a7John Reckstatic void android_view_RenderNode_destroyRenderNode(JNIEnv* env, 758de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 768de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->decStrong(0); 7844fd8d24f761f82d21e9b00932648a1b6bf91449John Reck} 7944fd8d24f761f82d21e9b00932648a1b6bf91449John Reck 808de65a8e05285df52a1e6f0c1d5616dd233298a7John Reckstatic void android_view_RenderNode_setDisplayListData(JNIEnv* env, 818de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jlong newDataPtr) { 828de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 838de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck DisplayListData* newData = reinterpret_cast<DisplayListData*>(newDataPtr); 848de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->setStagingDisplayList(newData); 8552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 8652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 87a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase// ---------------------------------------------------------------------------- 8849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// RenderProperties - setters 89a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase// ---------------------------------------------------------------------------- 90a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 9125fbb3fa1138675379102a44405852555cefccbdJohn Reckstatic jboolean android_view_RenderNode_setLayerType(JNIEnv* env, 9225fbb3fa1138675379102a44405852555cefccbdJohn Reck jobject clazz, jlong renderNodePtr, jint jlayerType) { 9325fbb3fa1138675379102a44405852555cefccbdJohn Reck LayerType layerType = static_cast<LayerType>(jlayerType); 9425fbb3fa1138675379102a44405852555cefccbdJohn Reck return SET_AND_DIRTY(mutateLayerProperties().setType, layerType, RenderNode::GENERIC); 9525fbb3fa1138675379102a44405852555cefccbdJohn Reck} 9625fbb3fa1138675379102a44405852555cefccbdJohn Reck 9725fbb3fa1138675379102a44405852555cefccbdJohn Reckstatic jboolean android_view_RenderNode_setLayerPaint(JNIEnv* env, 9825fbb3fa1138675379102a44405852555cefccbdJohn Reck jobject clazz, jlong renderNodePtr, jlong paintPtr) { 996ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod Paint* paint = reinterpret_cast<Paint*>(paintPtr); 10025fbb3fa1138675379102a44405852555cefccbdJohn Reck return SET_AND_DIRTY(mutateLayerProperties().setFromPaint, paint, RenderNode::GENERIC); 101a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 102a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 10379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setStaticMatrix(JNIEnv* env, 1048de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jlong matrixPtr) { 1057a02ea3eaafac782b532ef366863a0b2554ae536Chris Craik SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr); 10679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setStaticMatrix, matrix, RenderNode::GENERIC); 1079420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase} 1089420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 10979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setAnimationMatrix(JNIEnv* env, 1108de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jlong matrixPtr) { 1117a02ea3eaafac782b532ef366863a0b2554ae536Chris Craik SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr); 11279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setAnimationMatrix, matrix, RenderNode::GENERIC); 113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 114a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 11579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setClipToBounds(JNIEnv* env, 1168de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jboolean clipToBounds) { 11779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setClipToBounds, clipToBounds, RenderNode::GENERIC); 118a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 119a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 120a753f4c6cb8558795e673df1896532cd148781e2Chris Craikstatic jboolean android_view_RenderNode_setClipBounds(JNIEnv* env, 121a753f4c6cb8558795e673df1896532cd148781e2Chris Craik jobject clazz, jlong renderNodePtr, jint left, jint top, jint right, jint bottom) { 122a753f4c6cb8558795e673df1896532cd148781e2Chris Craik android::uirenderer::Rect clipBounds(left, top, right, bottom); 123a753f4c6cb8558795e673df1896532cd148781e2Chris Craik return SET_AND_DIRTY(setClipBounds, clipBounds, RenderNode::GENERIC); 124a753f4c6cb8558795e673df1896532cd148781e2Chris Craik} 125a753f4c6cb8558795e673df1896532cd148781e2Chris Craik 126a753f4c6cb8558795e673df1896532cd148781e2Chris Craikstatic jboolean android_view_RenderNode_setClipBoundsEmpty(JNIEnv* env, 127a753f4c6cb8558795e673df1896532cd148781e2Chris Craik jobject clazz, jlong renderNodePtr) { 128a753f4c6cb8558795e673df1896532cd148781e2Chris Craik return SET_AND_DIRTY(setClipBoundsEmpty,, RenderNode::GENERIC); 129a753f4c6cb8558795e673df1896532cd148781e2Chris Craik} 130a753f4c6cb8558795e673df1896532cd148781e2Chris Craik 13179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setProjectBackwards(JNIEnv* env, 1328de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jboolean shouldProject) { 13379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setProjectBackwards, shouldProject, RenderNode::GENERIC); 13458f09b352417c4ff7e01365727cbf8a09b9bed23Alan Viverette} 13558f09b352417c4ff7e01365727cbf8a09b9bed23Alan Viverette 13679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setProjectionReceiver(JNIEnv* env, 1378de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jboolean shouldRecieve) { 13879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setProjectionReceiver, shouldRecieve, RenderNode::GENERIC); 1391df26446b7eac7050767c38ca977fde03a41a033Chris Craik} 1401df26446b7eac7050767c38ca977fde03a41a033Chris Craik 14179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setOutlineRoundRect(JNIEnv* env, 1428de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jint left, jint top, 14377b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik jint right, jint bottom, jfloat radius, jfloat alpha) { 1448de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 14577b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik renderNode->mutateStagingProperties().mutableOutline().setRoundRect(left, top, right, bottom, 14677b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik radius, alpha); 147ff941dcd815021bb20d6504eb486acb1e50592c3John Reck renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 14879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 149b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik} 1508c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 15179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setOutlineConvexPath(JNIEnv* env, 15277b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik jobject clazz, jlong renderNodePtr, jlong outlinePathPtr, jfloat alpha) { 1538de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 154b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik SkPath* outlinePath = reinterpret_cast<SkPath*>(outlinePathPtr); 15577b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik renderNode->mutateStagingProperties().mutableOutline().setConvexPath(outlinePath, alpha); 156ff941dcd815021bb20d6504eb486acb1e50592c3John Reck renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 15779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 158b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik} 1598c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 16079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setOutlineEmpty(JNIEnv* env, 1618de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 1628de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 1638de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().mutableOutline().setEmpty(); 164ff941dcd815021bb20d6504eb486acb1e50592c3John Reck renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 16579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 166a2fe7affd3d077ac163da90996cb2e5e0ca3b8d1Chris Craik} 167a2fe7affd3d077ac163da90996cb2e5e0ca3b8d1Chris Craik 1680645128b80621edee70f8cab4afb208fe0c26becChris Craikstatic jboolean android_view_RenderNode_setOutlineNone(JNIEnv* env, 1690645128b80621edee70f8cab4afb208fe0c26becChris Craik jobject clazz, jlong renderNodePtr) { 1700645128b80621edee70f8cab4afb208fe0c26becChris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 1710645128b80621edee70f8cab4afb208fe0c26becChris Craik renderNode->mutateStagingProperties().mutableOutline().setNone(); 1720645128b80621edee70f8cab4afb208fe0c26becChris Craik renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 1730645128b80621edee70f8cab4afb208fe0c26becChris Craik return true; 1740645128b80621edee70f8cab4afb208fe0c26becChris Craik} 1750645128b80621edee70f8cab4afb208fe0c26becChris Craik 1765c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craikstatic jboolean android_view_RenderNode_hasShadow(JNIEnv* env, 1775c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craik jobject clazz, jlong renderNodePtr) { 1785c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 1795c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craik return renderNode->stagingProperties().hasShadow(); 1805c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craik} 1815c75c52e048a01c23b18f4e31ae624b5fe43e23cChris Craik 18279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setClipToOutline(JNIEnv* env, 1838de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jboolean clipToOutline) { 1848de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 1858de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().mutableOutline().setShouldClip(clipToOutline); 186ff941dcd815021bb20d6504eb486acb1e50592c3John Reck renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 18779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 1888c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik} 1898c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 19079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setRevealClip(JNIEnv* env, 191af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik jobject clazz, jlong renderNodePtr, jboolean shouldClip, 1928c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik jfloat x, jfloat y, jfloat radius) { 1938de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 1948de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().mutableRevealClip().set( 195af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik shouldClip, x, y, radius); 196ff941dcd815021bb20d6504eb486acb1e50592c3John Reck renderNode->setPropertyFieldsDirty(RenderNode::GENERIC); 19779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 198fad4593a3c9db193a4308c34168cc91c28218e2bztenghui} 199fad4593a3c9db193a4308c34168cc91c28218e2bztenghui 20079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setAlpha(JNIEnv* env, 2018de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float alpha) { 20279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setAlpha, alpha, RenderNode::ALPHA); 203a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 204a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 20579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setHasOverlappingRendering(JNIEnv* env, 2068de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, bool hasOverlappingRendering) { 20779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setHasOverlappingRendering, hasOverlappingRendering, 20879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck RenderNode::GENERIC); 209db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase} 210db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase 21179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setElevation(JNIEnv* env, 212cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik jobject clazz, jlong renderNodePtr, float elevation) { 21379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setElevation, elevation, RenderNode::Z); 214cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik} 215cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 21679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setTranslationX(JNIEnv* env, 2178de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float tx) { 21879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setTranslationX, tx, RenderNode::TRANSLATION_X | RenderNode::X); 219a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 220a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 22179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setTranslationY(JNIEnv* env, 2228de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float ty) { 22379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setTranslationY, ty, RenderNode::TRANSLATION_Y | RenderNode::Y); 224a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 225a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 22679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setTranslationZ(JNIEnv* env, 2278de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float tz) { 22879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setTranslationZ, tz, RenderNode::TRANSLATION_Z | RenderNode::Z); 229f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik} 230f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik 23179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setRotation(JNIEnv* env, 2328de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float rotation) { 23379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setRotation, rotation, RenderNode::ROTATION); 234a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 235a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 23679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setRotationX(JNIEnv* env, 2378de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float rx) { 23879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setRotationX, rx, RenderNode::ROTATION_X); 239a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 240a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 24179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setRotationY(JNIEnv* env, 2428de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float ry) { 24379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setRotationY, ry, RenderNode::ROTATION_Y); 244a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 245a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 24679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setScaleX(JNIEnv* env, 2478de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float sx) { 24879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setScaleX, sx, RenderNode::SCALE_X); 249a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 250a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 25179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setScaleY(JNIEnv* env, 2528de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float sy) { 25379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setScaleY, sy, RenderNode::SCALE_Y); 254a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 255a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 25679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setPivotX(JNIEnv* env, 2578de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float px) { 25879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setPivotX, px, RenderNode::GENERIC); 259a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 260a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 26179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setPivotY(JNIEnv* env, 2628de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float py) { 26379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setPivotY, py, RenderNode::GENERIC); 264a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 265a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 26679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setCameraDistance(JNIEnv* env, 2678de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, float distance) { 26879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setCameraDistance, distance, RenderNode::GENERIC); 269a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 270a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 27179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setLeft(JNIEnv* env, 2728de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, int left) { 27379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setLeft, left, RenderNode::X); 274a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 275a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 27679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setTop(JNIEnv* env, 2778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, int top) { 27879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setTop, top, RenderNode::Y); 279a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 280a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 28179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setRight(JNIEnv* env, 2828de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, int right) { 28379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setRight, right, RenderNode::X); 284a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 285a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 28679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setBottom(JNIEnv* env, 2878de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, int bottom) { 28879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(setBottom, bottom, RenderNode::Y); 289a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 290a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 29179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_setLeftTopRightBottom(JNIEnv* env, 2928de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, int left, int top, 293a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase int right, int bottom) { 2948de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 29579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (renderNode->mutateStagingProperties().setLeftTopRightBottom(left, top, right, bottom)) { 29679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck renderNode->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y); 29779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 29879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck } 29979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 300a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 301a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 30279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_offsetLeftAndRight(JNIEnv* env, 303a753f4c6cb8558795e673df1896532cd148781e2Chris Craik jobject clazz, jlong renderNodePtr, jint offset) { 30479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(offsetLeftRight, offset, RenderNode::X); 305a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 306a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 30779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reckstatic jboolean android_view_RenderNode_offsetTopAndBottom(JNIEnv* env, 308a753f4c6cb8558795e673df1896532cd148781e2Chris Craik jobject clazz, jlong renderNodePtr, jint offset) { 30979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return SET_AND_DIRTY(offsetTopBottom, offset, RenderNode::Y); 310a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 311a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 31249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// ---------------------------------------------------------------------------- 31349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// RenderProperties - getters 31449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// ---------------------------------------------------------------------------- 31549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 316f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jboolean android_view_RenderNode_hasOverlappingRendering(JNIEnv* env, 3178de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3188de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3198de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().hasOverlappingRendering(); 32052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 32152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 322deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craikstatic jboolean android_view_RenderNode_getClipToOutline(JNIEnv* env, 323deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craik jobject clazz, jlong renderNodePtr) { 324deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 325deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craik return renderNode->stagingProperties().getOutline().getShouldClip(); 326deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craik} 327deeda3d337aed1eee218b89a7aba5992ced371f0Chris Craik 328f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getAlpha(JNIEnv* env, 3298de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3308de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3318de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getAlpha(); 33252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 33352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 334f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getCameraDistance(JNIEnv* env, 3358de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3368de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3378de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getCameraDistance(); 33852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 33952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 340f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getScaleX(JNIEnv* env, 3418de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3428de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3438de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getScaleX(); 34452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 34552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 346f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getScaleY(JNIEnv* env, 3478de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3488de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3498de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getScaleY(); 35052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 35152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 352cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craikstatic jfloat android_view_RenderNode_getElevation(JNIEnv* env, 353cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik jobject clazz, jlong renderNodePtr) { 354cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 355cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return renderNode->stagingProperties().getElevation(); 356cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik} 357cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 358f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getTranslationX(JNIEnv* env, 3598de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3608de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3618de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getTranslationX(); 36252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 36352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 364f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getTranslationY(JNIEnv* env, 3658de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3668de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3678de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getTranslationY(); 36852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 36952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 37049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikstatic jfloat android_view_RenderNode_getTranslationZ(JNIEnv* env, 3718de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3728de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3738de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getTranslationZ(); 37449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik} 37549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 376f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getRotation(JNIEnv* env, 3778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3788de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3798de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getRotation(); 38052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 38152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 382f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getRotationX(JNIEnv* env, 3838de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3848de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3858de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getRotationX(); 38652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 38752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 388f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getRotationY(JNIEnv* env, 3898de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3908de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3918de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getRotationY(); 39252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 39352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 39449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikstatic jboolean android_view_RenderNode_isPivotExplicitlySet(JNIEnv* env, 3958de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 3968de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 3978de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().isPivotExplicitlySet(); 39849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik} 39949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 40049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikstatic jboolean android_view_RenderNode_hasIdentityMatrix(JNIEnv* env, 4018de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 4028de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 403f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck renderNode->mutateStagingProperties().updateMatrix(); 404f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return !renderNode->stagingProperties().hasTransformMatrix(); 40549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik} 40649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 40749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// ---------------------------------------------------------------------------- 40849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// RenderProperties - computed getters 40949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik// ---------------------------------------------------------------------------- 41049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 41149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikstatic void android_view_RenderNode_getTransformMatrix(JNIEnv* env, 4128de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jlong outMatrixPtr) { 4138de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 41449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik SkMatrix* outMatrix = reinterpret_cast<SkMatrix*>(outMatrixPtr); 41549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 4168de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().updateMatrix(); 4178de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck const SkMatrix* transformMatrix = renderNode->stagingProperties().getTransformMatrix(); 41849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 419f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (transformMatrix) { 42049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik *outMatrix = *transformMatrix; 42149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } else { 42249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik outMatrix->setIdentity(); 42349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 42449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik} 42549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 42649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikstatic void android_view_RenderNode_getInverseTransformMatrix(JNIEnv* env, 4278de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr, jlong outMatrixPtr) { 42849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // load transform matrix 4298de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck android_view_RenderNode_getTransformMatrix(env, clazz, renderNodePtr, outMatrixPtr); 43049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik SkMatrix* outMatrix = reinterpret_cast<SkMatrix*>(outMatrixPtr); 43149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 43249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // return it inverted 43349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik if (!outMatrix->invert(outMatrix)) { 43449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // failed to load inverse, pass back identity 43549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik outMatrix->setIdentity(); 43649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 43749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik} 43849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 439f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getPivotX(JNIEnv* env, 4408de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 4418de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 4428de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().updateMatrix(); 4438de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getPivotX(); 44452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 44552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 446f666ad7046c0b1b255835f75aeb7d1391067df93John Reckstatic jfloat android_view_RenderNode_getPivotY(JNIEnv* env, 4478de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck jobject clazz, jlong renderNodePtr) { 4488de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 4498de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck renderNode->mutateStagingProperties().updateMatrix(); 4508de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return renderNode->stagingProperties().getPivotY(); 45152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy} 45252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 453e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck// ---------------------------------------------------------------------------- 454e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck// RenderProperties - Animations 455e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck// ---------------------------------------------------------------------------- 456e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 457e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckstatic void android_view_RenderNode_addAnimator(JNIEnv* env, jobject clazz, 458e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck jlong renderNodePtr, jlong animatorPtr) { 459e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 460e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck RenderPropertyAnimator* animator = reinterpret_cast<RenderPropertyAnimator*>(animatorPtr); 461e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck renderNode->addAnimator(animator); 462e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck} 463e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 464119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reckstatic void android_view_RenderNode_endAllAnimators(JNIEnv* env, jobject clazz, 465119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck jlong renderNodePtr) { 466119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 467e2478d45ccbe5b6abb360ac9d44771b5f4a50bdeJohn Reck renderNode->animators().endAllStagingAnimators(); 468119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck} 469119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck 470a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif // USE_OPENGL_RENDERER 471a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 472a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase// ---------------------------------------------------------------------------- 473a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase// JNI Glue 474a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase// ---------------------------------------------------------------------------- 475a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 476f666ad7046c0b1b255835f75aeb7d1391067df93John Reckconst char* const kClassPathName = "android/view/RenderNode"; 477a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 478a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic JNINativeMethod gMethods[] = { 479a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#ifdef USE_OPENGL_RENDERER 4808de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck { "nCreate", "(Ljava/lang/String;)J", (void*) android_view_RenderNode_create }, 4818de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck { "nDestroyRenderNode", "(J)V", (void*) android_view_RenderNode_destroyRenderNode }, 4828de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck { "nSetDisplayListData", "(JJ)V", (void*) android_view_RenderNode_setDisplayListData }, 483f666ad7046c0b1b255835f75aeb7d1391067df93John Reck { "nOutput", "(J)V", (void*) android_view_RenderNode_output }, 484fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck { "nGetDebugSize", "(J)I", (void*) android_view_RenderNode_getDebugSize }, 485f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 4864136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetLayerType", "!(JI)Z", (void*) android_view_RenderNode_setLayerType }, 4874136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetLayerPaint", "!(JJ)Z", (void*) android_view_RenderNode_setLayerPaint }, 4884136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetStaticMatrix", "!(JJ)Z", (void*) android_view_RenderNode_setStaticMatrix }, 4894136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetAnimationMatrix", "!(JJ)Z", (void*) android_view_RenderNode_setAnimationMatrix }, 4904136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetClipToBounds", "!(JZ)Z", (void*) android_view_RenderNode_setClipToBounds }, 4914136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetClipBounds", "!(JIIII)Z", (void*) android_view_RenderNode_setClipBounds }, 4924136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetClipBoundsEmpty", "!(J)Z", (void*) android_view_RenderNode_setClipBoundsEmpty }, 4934136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetProjectBackwards", "!(JZ)Z", (void*) android_view_RenderNode_setProjectBackwards }, 4944136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetProjectionReceiver","!(JZ)Z", (void*) android_view_RenderNode_setProjectionReceiver }, 49579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck 49677b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik { "nSetOutlineRoundRect", "(JIIIIFF)Z", (void*) android_view_RenderNode_setOutlineRoundRect }, 49777b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik { "nSetOutlineConvexPath", "(JJF)Z", (void*) android_view_RenderNode_setOutlineConvexPath }, 49879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, 4990645128b80621edee70f8cab4afb208fe0c26becChris Craik { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, 5004136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nHasShadow", "!(J)Z", (void*) android_view_RenderNode_hasShadow }, 5014136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetClipToOutline", "!(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, 502af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, 50379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck 5044136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetAlpha", "!(JF)Z", (void*) android_view_RenderNode_setAlpha }, 5054136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetHasOverlappingRendering", "!(JZ)Z", 506f666ad7046c0b1b255835f75aeb7d1391067df93John Reck (void*) android_view_RenderNode_setHasOverlappingRendering }, 5074136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetElevation", "!(JF)Z", (void*) android_view_RenderNode_setElevation }, 5084136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetTranslationX", "!(JF)Z", (void*) android_view_RenderNode_setTranslationX }, 5094136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetTranslationY", "!(JF)Z", (void*) android_view_RenderNode_setTranslationY }, 5104136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetTranslationZ", "!(JF)Z", (void*) android_view_RenderNode_setTranslationZ }, 5114136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetRotation", "!(JF)Z", (void*) android_view_RenderNode_setRotation }, 5124136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetRotationX", "!(JF)Z", (void*) android_view_RenderNode_setRotationX }, 5134136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetRotationY", "!(JF)Z", (void*) android_view_RenderNode_setRotationY }, 5144136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetScaleX", "!(JF)Z", (void*) android_view_RenderNode_setScaleX }, 5154136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetScaleY", "!(JF)Z", (void*) android_view_RenderNode_setScaleY }, 5164136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetPivotX", "!(JF)Z", (void*) android_view_RenderNode_setPivotX }, 5174136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetPivotY", "!(JF)Z", (void*) android_view_RenderNode_setPivotY }, 5184136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetCameraDistance", "!(JF)Z", (void*) android_view_RenderNode_setCameraDistance }, 5194136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetLeft", "!(JI)Z", (void*) android_view_RenderNode_setLeft }, 5204136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetTop", "!(JI)Z", (void*) android_view_RenderNode_setTop }, 5214136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetRight", "!(JI)Z", (void*) android_view_RenderNode_setRight }, 5224136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetBottom", "!(JI)Z", (void*) android_view_RenderNode_setBottom }, 5234136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nSetLeftTopRightBottom","!(JIIII)Z", (void*) android_view_RenderNode_setLeftTopRightBottom }, 5244136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nOffsetLeftAndRight", "!(JI)Z", (void*) android_view_RenderNode_offsetLeftAndRight }, 5254136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nOffsetTopAndBottom", "!(JI)Z", (void*) android_view_RenderNode_offsetTopAndBottom }, 5264136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik 5274136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nHasOverlappingRendering", "!(J)Z", (void*) android_view_RenderNode_hasOverlappingRendering }, 5284136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetClipToOutline", "!(J)Z", (void*) android_view_RenderNode_getClipToOutline }, 5294136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetAlpha", "!(J)F", (void*) android_view_RenderNode_getAlpha }, 5304136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetCameraDistance", "!(J)F", (void*) android_view_RenderNode_getCameraDistance }, 5314136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetScaleX", "!(J)F", (void*) android_view_RenderNode_getScaleX }, 5324136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetScaleY", "!(J)F", (void*) android_view_RenderNode_getScaleY }, 5334136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetElevation", "!(J)F", (void*) android_view_RenderNode_getElevation }, 5344136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetTranslationX", "!(J)F", (void*) android_view_RenderNode_getTranslationX }, 5354136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetTranslationY", "!(J)F", (void*) android_view_RenderNode_getTranslationY }, 5364136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetTranslationZ", "!(J)F", (void*) android_view_RenderNode_getTranslationZ }, 5374136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetRotation", "!(J)F", (void*) android_view_RenderNode_getRotation }, 5384136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetRotationX", "!(J)F", (void*) android_view_RenderNode_getRotationX }, 5394136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetRotationY", "!(J)F", (void*) android_view_RenderNode_getRotationY }, 5404136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nIsPivotExplicitlySet", "!(J)Z", (void*) android_view_RenderNode_isPivotExplicitlySet }, 5414136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nHasIdentityMatrix", "!(J)Z", (void*) android_view_RenderNode_hasIdentityMatrix }, 5424136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik 5434136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetTransformMatrix", "!(JJ)V", (void*) android_view_RenderNode_getTransformMatrix }, 5444136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetInverseTransformMatrix","!(JJ)V", (void*) android_view_RenderNode_getInverseTransformMatrix }, 5454136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik 5464136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetPivotX", "!(J)F", (void*) android_view_RenderNode_getPivotX }, 5474136a0aeac9bb95aa615d4fc1f12378829d26c80Chris Craik { "nGetPivotY", "!(J)F", (void*) android_view_RenderNode_getPivotY }, 548e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 549e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck { "nAddAnimator", "(JJ)V", (void*) android_view_RenderNode_addAnimator }, 550119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck { "nEndAllAnimators", "(J)V", (void*) android_view_RenderNode_endAllAnimators }, 551a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 552a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase}; 553a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 554a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#ifdef USE_OPENGL_RENDERER 555a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase #define FIND_CLASS(var, className) \ 556a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase var = env->FindClass(className); \ 557a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase LOG_FATAL_IF(! var, "Unable to find class " className); 558a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 559a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ 560a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase var = env->GetMethodID(clazz, methodName, methodDescriptor); \ 561a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase LOG_FATAL_IF(! var, "Unable to find method " methodName); 562a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#else 563a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase #define FIND_CLASS(var, className) 564a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) 565a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 566a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 567f666ad7046c0b1b255835f75aeb7d1391067df93John Reckint register_android_view_RenderNode(JNIEnv* env) { 568a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); 569a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 570a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 571a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase}; 572a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 573