1b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/* 2b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 4b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * you may not use this file except in compliance with the License. 6b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * You may obtain a copy of the License at 7b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 8b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 10b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Unless required by applicable law or agreed to in writing, software 11b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * See the License for the specific language governing permissions and 14b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * limitations under the License. 15b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 16b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 17b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypackage android.view; 18b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 19162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport android.graphics.Bitmap; 209420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.graphics.Matrix; 21162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 22162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport java.util.ArrayList; 23daf98e941e140e8739458126640183b9f296a2abChet Haase 24b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 25b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * An implementation of display list for OpenGL ES 2.0. 26b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 27b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass GLES20DisplayList extends DisplayList { 28162a0217563f4665da6eb183dfce0fef740f641fJeff Brown // These lists ensure that any Bitmaps recorded by a DisplayList are kept alive as long 29162a0217563f4665da6eb183dfce0fef740f641fJeff Brown // as the DisplayList is alive. The Bitmaps are populated by the GLES20RecordingCanvas. 30162a0217563f4665da6eb183dfce0fef740f641fJeff Brown final ArrayList<Bitmap> mBitmaps = new ArrayList<Bitmap>(5); 31b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 32162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private GLES20RecordingCanvas mCanvas; 33162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private boolean mValid; 34b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 3513631f3da855f200a151e7837ed9f6b079622b58Romain Guy // Used for debugging 3613631f3da855f200a151e7837ed9f6b079622b58Romain Guy private final String mName; 3713631f3da855f200a151e7837ed9f6b079622b58Romain Guy 38f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // The native display list will be destroyed when this object dies. 39f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // DO NOT overwrite this reference once it is set. 40f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy private DisplayListFinalizer mFinalizer; 41f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 4213631f3da855f200a151e7837ed9f6b079622b58Romain Guy GLES20DisplayList(String name) { 4313631f3da855f200a151e7837ed9f6b079622b58Romain Guy mName = name; 4413631f3da855f200a151e7837ed9f6b079622b58Romain Guy } 4513631f3da855f200a151e7837ed9f6b079622b58Romain Guy 460d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy boolean hasNativeDisplayList() { 470d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy return mValid && mFinalizer != null; 480d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy } 490d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy 50162a0217563f4665da6eb183dfce0fef740f641fJeff Brown int getNativeDisplayList() { 51162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!mValid || mFinalizer == null) { 52162a0217563f4665da6eb183dfce0fef740f641fJeff Brown throw new IllegalStateException("The display list is not valid."); 53162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 54162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return mFinalizer.mNativeDisplayList; 55daf98e941e140e8739458126640183b9f296a2abChet Haase } 56daf98e941e140e8739458126640183b9f296a2abChet Haase 57b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 58b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public HardwareCanvas start() { 599e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase if (mCanvas != null) { 60162a0217563f4665da6eb183dfce0fef740f641fJeff Brown throw new IllegalStateException("Recording has already started"); 619e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase } 62b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 63162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mValid = false; 64162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas = GLES20RecordingCanvas.obtain(this); 65162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas.start(); 66b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mCanvas; 67b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 68b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 69b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 70b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public void invalidate() { 71162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (mCanvas != null) { 72162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas.recycle(); 73162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas = null; 74162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 759e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase mValid = false; 769e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase } 779e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase 789e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase @Override 7938c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy public void clear() { 8038c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy if (!mValid) { 8138c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy mBitmaps.clear(); 8238c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy } 8338c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy } 8438c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy 8538c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy @Override 86b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public boolean isValid() { 879e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase return mValid; 889e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase } 899e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase 909e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase @Override 91b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public void end() { 92b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (mCanvas != null) { 93162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (mFinalizer != null) { 94162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas.end(mFinalizer.mNativeDisplayList); 95162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } else { 96162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mFinalizer = new DisplayListFinalizer(mCanvas.end(0)); 9713631f3da855f200a151e7837ed9f6b079622b58Romain Guy GLES20Canvas.setDisplayListName(mFinalizer.mNativeDisplayList, mName); 98162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 99162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas.recycle(); 100162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mCanvas = null; 101162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mValid = true; 102b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 103b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 104b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 10565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy @Override 106b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public int getSize() { 10765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy if (mFinalizer == null) return 0; 10865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return GLES20Canvas.getDisplayListSize(mFinalizer.mNativeDisplayList); 10965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy } 11065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 111a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase /////////////////////////////////////////////////////////////////////////// 112a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase // Native View Properties 113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase /////////////////////////////////////////////////////////////////////////// 114a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 115a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 116a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setCaching(boolean caching) { 1170d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1180d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetCaching(mFinalizer.mNativeDisplayList, caching); 119a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 120a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 121a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 122a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 123a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setClipChildren(boolean clipChildren) { 1240d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1250d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetClipChildren(mFinalizer.mNativeDisplayList, clipChildren); 126a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 127a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 128a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 129a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 1309420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void setStaticMatrix(Matrix matrix) { 1310d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1320d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetStaticMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance); 1339420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1349420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1359420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1369420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 1379420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void setAnimationMatrix(Matrix matrix) { 1380d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1390d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetAnimationMatrix(mFinalizer.mNativeDisplayList, 140afd5c3ee60c45ebb5d63d2d0d14f08130075883bChet Haase (matrix != null) ? matrix.native_instance : 0); 141a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 142a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 143a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 144a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 145a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setAlpha(float alpha) { 1460d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1470d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetAlpha(mFinalizer.mNativeDisplayList, alpha); 148a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 149a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 150a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 151a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 152db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase public void setHasOverlappingRendering(boolean hasOverlappingRendering) { 1530d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1540d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetHasOverlappingRendering(mFinalizer.mNativeDisplayList, hasOverlappingRendering); 155db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase } 156db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase } 157db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase 158db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase @Override 159a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setTranslationX(float translationX) { 1600d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1610d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetTranslationX(mFinalizer.mNativeDisplayList, translationX); 162a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 163a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 164a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 165a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 166a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setTranslationY(float translationY) { 1670d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1680d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetTranslationY(mFinalizer.mNativeDisplayList, translationY); 169a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 170a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 171a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 172a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 173a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setRotation(float rotation) { 1740d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1750d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetRotation(mFinalizer.mNativeDisplayList, rotation); 176a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 177a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 178a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 179a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 180a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setRotationX(float rotationX) { 1810d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1820d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetRotationX(mFinalizer.mNativeDisplayList, rotationX); 183a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 184a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 185a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 186a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 187a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setRotationY(float rotationY) { 1880d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1890d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetRotationY(mFinalizer.mNativeDisplayList, rotationY); 190a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 191a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 192a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 193a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 194a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setScaleX(float scaleX) { 1950d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 1960d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetScaleX(mFinalizer.mNativeDisplayList, scaleX); 197a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 198a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 199a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 200a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 201a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setScaleY(float scaleY) { 2020d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2030d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetScaleY(mFinalizer.mNativeDisplayList, scaleY); 204a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 205a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 206a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 207a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 208a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setTransformationInfo(float alpha, float translationX, float translationY, 209a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rotation, float rotationX, float rotationY, float scaleX, float scaleY) { 2100d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2110d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetTransformationInfo(mFinalizer.mNativeDisplayList, alpha, translationX, translationY, 212a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase rotation, rotationX, rotationY, scaleX, scaleY); 213a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 214a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 215a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 216a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 217a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setPivotX(float pivotX) { 2180d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2190d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetPivotX(mFinalizer.mNativeDisplayList, pivotX); 220a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 221a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 222a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 223a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 224a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setPivotY(float pivotY) { 2250d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2260d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetPivotY(mFinalizer.mNativeDisplayList, pivotY); 227a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 228a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 229a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 230a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 231a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setCameraDistance(float distance) { 2320d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2330d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetCameraDistance(mFinalizer.mNativeDisplayList, distance); 234a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 235a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 236a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 237a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 238a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setLeft(int left) { 2390d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2400d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetLeft(mFinalizer.mNativeDisplayList, left); 241a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 242a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 243a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 244a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 245a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setTop(int top) { 2460d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2470d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetTop(mFinalizer.mNativeDisplayList, top); 248a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 249a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 250a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 251a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 252a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setRight(int right) { 2530d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2540d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetRight(mFinalizer.mNativeDisplayList, right); 255a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 256a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 257a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 258a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 259a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setBottom(int bottom) { 2600d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2610d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetBottom(mFinalizer.mNativeDisplayList, bottom); 262a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 263a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 264a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 265a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 266a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setLeftTop(int left, int top) { 2670d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2680d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetLeftTop(mFinalizer.mNativeDisplayList, left, top); 269a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 270a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 271a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 272a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 273a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void setLeftTopRightBottom(int left, int top, int right, int bottom) { 2740d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2750d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nSetLeftTopRightBottom(mFinalizer.mNativeDisplayList, left, top, right, bottom); 276a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 277a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 278a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 279a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 280a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void offsetLeftRight(int offset) { 2810d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2820d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nOffsetLeftRight(mFinalizer.mNativeDisplayList, offset); 283a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 284a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 285a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 286a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase @Override 287a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase public void offsetTopBottom(int offset) { 2880d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy if (hasNativeDisplayList()) { 2890d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy nOffsetTopBottom(mFinalizer.mNativeDisplayList, offset); 290a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 291a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 292a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 293a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nOffsetTopBottom(int displayList, int offset); 294a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nOffsetLeftRight(int displayList, int offset); 295a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetLeftTopRightBottom(int displayList, int left, int top, 296a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase int right, int bottom); 297a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetLeftTop(int displayList, int left, int top); 298a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetBottom(int displayList, int bottom); 299a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetRight(int displayList, int right); 300a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetTop(int displayList, int top); 301a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetLeft(int displayList, int left); 302a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetCameraDistance(int displayList, float distance); 303a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetPivotY(int displayList, float pivotY); 304a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetPivotX(int displayList, float pivotX); 305a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetCaching(int displayList, boolean caching); 306a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetClipChildren(int displayList, boolean clipChildren); 307a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetAlpha(int displayList, float alpha); 308db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase private static native void nSetHasOverlappingRendering(int displayList, 309db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase boolean hasOverlappingRendering); 310a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetTranslationX(int displayList, float translationX); 311a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetTranslationY(int displayList, float translationY); 312a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetRotation(int displayList, float rotation); 313a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetRotationX(int displayList, float rotationX); 314a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetRotationY(int displayList, float rotationY); 315a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetScaleX(int displayList, float scaleX); 316a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetScaleY(int displayList, float scaleY); 317a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase private static native void nSetTransformationInfo(int displayList, float alpha, 318a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float translationX, float translationY, float rotation, float rotationX, 319a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rotationY, float scaleX, float scaleY); 3209420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase private static native void nSetStaticMatrix(int displayList, int nativeMatrix); 3219420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase private static native void nSetAnimationMatrix(int displayList, int animationMatrix); 322a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 323a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 324a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase /////////////////////////////////////////////////////////////////////////// 325a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase // Finalization 326a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase /////////////////////////////////////////////////////////////////////////// 327a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 328f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy private static class DisplayListFinalizer { 329162a0217563f4665da6eb183dfce0fef740f641fJeff Brown final int mNativeDisplayList; 3305977baa1fa24125c148a72699b53e62abaf08960Chet Haase 331162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public DisplayListFinalizer(int nativeDisplayList) { 332f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy mNativeDisplayList = nativeDisplayList; 3335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 3345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 3355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase @Override 336f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy protected void finalize() throws Throwable { 3376c319ca1275c8db892c39b48fc54864c949f9171Romain Guy try { 338162a0217563f4665da6eb183dfce0fef740f641fJeff Brown GLES20Canvas.destroyDisplayList(mNativeDisplayList); 3396c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } finally { 3406c319ca1275c8db892c39b48fc54864c949f9171Romain Guy super.finalize(); 3416c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 3425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 3435c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 344b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 345