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 {
28ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase    // These lists ensure that any Bitmaps and DisplayLists recorded by a DisplayList are kept
29ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase    // alive as long as the DisplayList is alive.  The Bitmap and DisplayList lists
30ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase    // are populated by the GLES20RecordingCanvas during appropriate drawing calls and are
31ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase    // cleared at the start of a new drawing frame or when the view is detached from the window.
32162a0217563f4665da6eb183dfce0fef740f641fJeff Brown    final ArrayList<Bitmap> mBitmaps = new ArrayList<Bitmap>(5);
33ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase    final ArrayList<DisplayList> mChildDisplayLists = new ArrayList<DisplayList>();
34b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
35162a0217563f4665da6eb183dfce0fef740f641fJeff Brown    private GLES20RecordingCanvas mCanvas;
36162a0217563f4665da6eb183dfce0fef740f641fJeff Brown    private boolean mValid;
37b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
3813631f3da855f200a151e7837ed9f6b079622b58Romain Guy    // Used for debugging
3913631f3da855f200a151e7837ed9f6b079622b58Romain Guy    private final String mName;
4013631f3da855f200a151e7837ed9f6b079622b58Romain Guy
41f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy    // The native display list will be destroyed when this object dies.
42f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy    // DO NOT overwrite this reference once it is set.
43f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy    private DisplayListFinalizer mFinalizer;
44f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy
4513631f3da855f200a151e7837ed9f6b079622b58Romain Guy    GLES20DisplayList(String name) {
4613631f3da855f200a151e7837ed9f6b079622b58Romain Guy        mName = name;
4713631f3da855f200a151e7837ed9f6b079622b58Romain Guy    }
4813631f3da855f200a151e7837ed9f6b079622b58Romain Guy
490d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy    boolean hasNativeDisplayList() {
500d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        return mValid && mFinalizer != null;
510d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy    }
520d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy
53162a0217563f4665da6eb183dfce0fef740f641fJeff Brown    int getNativeDisplayList() {
54162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        if (!mValid || mFinalizer == null) {
55162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            throw new IllegalStateException("The display list is not valid.");
56162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        }
57162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        return mFinalizer.mNativeDisplayList;
58daf98e941e140e8739458126640183b9f296a2abChet Haase    }
59daf98e941e140e8739458126640183b9f296a2abChet Haase
60b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    @Override
6152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public HardwareCanvas start(int width, int height) {
629e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase        if (mCanvas != null) {
63162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            throw new IllegalStateException("Recording has already started");
649e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase        }
65b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
66162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        mValid = false;
67162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        mCanvas = GLES20RecordingCanvas.obtain(this);
68162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        mCanvas.start();
6952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
7052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        mCanvas.setViewport(width, height);
7152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        // The dirty rect should always be null for a display list
7252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        mCanvas.onPreDraw(null);
7352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
74b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        return mCanvas;
75b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
76b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    @Override
7752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public void clear() {
7852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        clearDirty();
7952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
80162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        if (mCanvas != null) {
81162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            mCanvas.recycle();
82162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            mCanvas = null;
83162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        }
849e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase        mValid = false;
859e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase
8652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        mBitmaps.clear();
8752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        mChildDisplayLists.clear();
8838c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy    }
8938c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy
9038c2ece5ce4c59f30e5832779bf1d86d68b1c442Romain Guy    @Override
916a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase    public void reset() {
926a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase        if (hasNativeDisplayList()) {
936a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase            nReset(mFinalizer.mNativeDisplayList);
946a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase        }
956a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase    }
966a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase
976a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase    @Override
98b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne    public boolean isValid() {
999e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase        return mValid;
1009e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase    }
1019e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase
1029e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase    @Override
103b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne    public void end() {
104b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        if (mCanvas != null) {
10552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            mCanvas.onPostDraw();
106162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            if (mFinalizer != null) {
107162a0217563f4665da6eb183dfce0fef740f641fJeff Brown                mCanvas.end(mFinalizer.mNativeDisplayList);
108162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            } else {
109162a0217563f4665da6eb183dfce0fef740f641fJeff Brown                mFinalizer = new DisplayListFinalizer(mCanvas.end(0));
11052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy                nSetDisplayListName(mFinalizer.mNativeDisplayList, mName);
111162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            }
112162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            mCanvas.recycle();
113162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            mCanvas = null;
114162a0217563f4665da6eb183dfce0fef740f641fJeff Brown            mValid = true;
115b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        }
116b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
117b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
11865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy    @Override
119b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne    public int getSize() {
12065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy        if (mFinalizer == null) return 0;
12152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return nGetDisplayListSize(mFinalizer.mNativeDisplayList);
12265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy    }
12365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy
12452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native void nDestroyDisplayList(int displayList);
12552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native int nGetDisplayListSize(int displayList);
12652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native void nSetDisplayListName(int displayList, String name);
12752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
128a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    ///////////////////////////////////////////////////////////////////////////
129a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    // Native View Properties
130a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    ///////////////////////////////////////////////////////////////////////////
131a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
132a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
133a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setCaching(boolean caching) {
1340d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
1350d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetCaching(mFinalizer.mNativeDisplayList, caching);
136a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
137a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
138a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
139a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
140dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase    public void setClipToBounds(boolean clipToBounds) {
1410d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
142dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase            nSetClipToBounds(mFinalizer.mNativeDisplayList, clipToBounds);
143a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
144a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
145a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
146a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
14752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public void setMatrix(Matrix matrix) {
1480d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
1490d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetStaticMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
1509420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase        }
1519420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase    }
1529420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase
1539420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase    @Override
15452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public Matrix getMatrix(Matrix matrix) {
15552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
15652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            nGetMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
15752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
15852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return matrix;
15952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
16052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
16152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
1629420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase    public void setAnimationMatrix(Matrix matrix) {
1630d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
1640d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetAnimationMatrix(mFinalizer.mNativeDisplayList,
165afd5c3ee60c45ebb5d63d2d0d14f08130075883bChet Haase                    (matrix != null) ? matrix.native_instance : 0);
166a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
167a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
168a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
169a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
170a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setAlpha(float alpha) {
1710d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
1720d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetAlpha(mFinalizer.mNativeDisplayList, alpha);
173a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
174a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
175a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
176a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
17752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getAlpha() {
17852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
17952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetAlpha(mFinalizer.mNativeDisplayList);
18052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
18152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 1.0f;
18252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
18352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
18452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
185db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase    public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
1860d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
1870d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetHasOverlappingRendering(mFinalizer.mNativeDisplayList, hasOverlappingRendering);
188db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase        }
189db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase    }
190db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase
191db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase    @Override
19252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public boolean hasOverlappingRendering() {
19352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        //noinspection SimplifiableIfStatement
19452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
19552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nHasOverlappingRendering(mFinalizer.mNativeDisplayList);
19652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
19752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return true;
19852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
19952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
20052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
201a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setTranslationX(float translationX) {
2020d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2030d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetTranslationX(mFinalizer.mNativeDisplayList, translationX);
204a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
205a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
206a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
207a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
20852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getTranslationX() {
20952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
21052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetTranslationX(mFinalizer.mNativeDisplayList);
21152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
21252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
21352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
21452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
21552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
216a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setTranslationY(float translationY) {
2170d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2180d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetTranslationY(mFinalizer.mNativeDisplayList, translationY);
219a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
220a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
221a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
222a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
22352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getTranslationY() {
22452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
22552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetTranslationY(mFinalizer.mNativeDisplayList);
22652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
22752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
22852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
22952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
23052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
231a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setRotation(float rotation) {
2320d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2330d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetRotation(mFinalizer.mNativeDisplayList, rotation);
234a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
235a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
236a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
237a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
23852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getRotation() {
23952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
24052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetRotation(mFinalizer.mNativeDisplayList);
24152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
24252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
24352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
24452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
24552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
246a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setRotationX(float rotationX) {
2470d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2480d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetRotationX(mFinalizer.mNativeDisplayList, rotationX);
249a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
250a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
251a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
252a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
25352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getRotationX() {
25452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
25552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetRotationX(mFinalizer.mNativeDisplayList);
25652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
25752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
25852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
25952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
26052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
261a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setRotationY(float rotationY) {
2620d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2630d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetRotationY(mFinalizer.mNativeDisplayList, rotationY);
264a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
265a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
266a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
267a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
26852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getRotationY() {
26952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
27052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetRotationY(mFinalizer.mNativeDisplayList);
27152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
27252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
27352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
27452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
27552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
276a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setScaleX(float scaleX) {
2770d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2780d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetScaleX(mFinalizer.mNativeDisplayList, scaleX);
279a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
280a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
281a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
282a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
28352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getScaleX() {
28452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
28552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetScaleX(mFinalizer.mNativeDisplayList);
28652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
28752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 1.0f;
28852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
28952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
29052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
291a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setScaleY(float scaleY) {
2920d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
2930d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetScaleY(mFinalizer.mNativeDisplayList, scaleY);
294a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
295a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
296a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
297a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
29852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getScaleY() {
29952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
30052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetScaleY(mFinalizer.mNativeDisplayList);
30152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
30252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 1.0f;
30352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
30452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
30552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
306a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setTransformationInfo(float alpha, float translationX, float translationY,
307a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase            float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
3080d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3090d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetTransformationInfo(mFinalizer.mNativeDisplayList, alpha, translationX, translationY,
310a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase                    rotation, rotationX, rotationY, scaleX, scaleY);
311a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
312a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
313a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
314a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
315a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setPivotX(float pivotX) {
3160d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3170d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetPivotX(mFinalizer.mNativeDisplayList, pivotX);
318a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
319a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
320a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
321a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
32252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getPivotX() {
32352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
32452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetPivotX(mFinalizer.mNativeDisplayList);
32552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
32652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
32752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
32852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
32952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
330a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setPivotY(float pivotY) {
3310d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3320d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetPivotY(mFinalizer.mNativeDisplayList, pivotY);
333a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
334a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
335a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
336a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
33752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getPivotY() {
33852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
33952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetPivotY(mFinalizer.mNativeDisplayList);
34052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
34152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
34252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
34352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
34452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
345a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setCameraDistance(float distance) {
3460d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3470d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetCameraDistance(mFinalizer.mNativeDisplayList, distance);
348a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
349a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
350a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
351a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
35252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getCameraDistance() {
35352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
35452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetCameraDistance(mFinalizer.mNativeDisplayList);
35552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
35652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
35752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
35852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
35952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
360a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setLeft(int left) {
3610d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3620d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetLeft(mFinalizer.mNativeDisplayList, left);
363a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
364a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
365a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
366a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
36752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getLeft() {
36852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
36952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetLeft(mFinalizer.mNativeDisplayList);
37052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
37152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
37252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
37352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
37452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
375a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setTop(int top) {
3760d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3770d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetTop(mFinalizer.mNativeDisplayList, top);
378a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
379a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
380a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
381a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
38252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getTop() {
38352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
38452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetTop(mFinalizer.mNativeDisplayList);
38552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
38652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
38752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
38852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
38952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
390a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setRight(int right) {
3910d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
3920d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetRight(mFinalizer.mNativeDisplayList, right);
393a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
394a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
395a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
396a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
39752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getRight() {
39852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        if (hasNativeDisplayList()) {
39952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetRight(mFinalizer.mNativeDisplayList);
40052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        }
40152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
40252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    }
40352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy
40452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    @Override
405a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setBottom(int bottom) {
4060d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
4070d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetBottom(mFinalizer.mNativeDisplayList, bottom);
408a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
409a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
410a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
411a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
41252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public float getBottom() {
4130d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
41452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            return nGetBottom(mFinalizer.mNativeDisplayList);
415a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
41652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy        return 0.0f;
417a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
418a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
419a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
420a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
4210d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
4220d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy            nSetLeftTopRightBottom(mFinalizer.mNativeDisplayList, left, top, right, bottom);
423a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
424a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
425a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
426a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
42752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public void offsetLeftAndRight(float offset) {
4280d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
42952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            nOffsetLeftAndRight(mFinalizer.mNativeDisplayList, offset);
430a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
431a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
432a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
433a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    @Override
43452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    public void offsetTopAndBottom(float offset) {
4350d6f4c06df0b0e35125f088ca028c7226b274dc4Romain Guy        if (hasNativeDisplayList()) {
43652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy            nOffsetTopAndBottom(mFinalizer.mNativeDisplayList, offset);
437a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase        }
438a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    }
439a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
4406a2d17f71342f981c9df1dc5beff33e30eb3ae2bChet Haase    private static native void nReset(int displayList);
44152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native void nOffsetTopAndBottom(int displayList, float offset);
44252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native void nOffsetLeftAndRight(int displayList, float offset);
443a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetLeftTopRightBottom(int displayList, int left, int top,
444a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase            int right, int bottom);
445a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetBottom(int displayList, int bottom);
446a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetRight(int displayList, int right);
447a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetTop(int displayList, int top);
448a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetLeft(int displayList, int left);
449a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetCameraDistance(int displayList, float distance);
450a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetPivotY(int displayList, float pivotY);
451a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetPivotX(int displayList, float pivotX);
452a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetCaching(int displayList, boolean caching);
453dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase    private static native void nSetClipToBounds(int displayList, boolean clipToBounds);
454a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetAlpha(int displayList, float alpha);
455db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase    private static native void nSetHasOverlappingRendering(int displayList,
456db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase            boolean hasOverlappingRendering);
457a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetTranslationX(int displayList, float translationX);
458a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetTranslationY(int displayList, float translationY);
459a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetRotation(int displayList, float rotation);
460a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetRotationX(int displayList, float rotationX);
461a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetRotationY(int displayList, float rotationY);
462a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetScaleX(int displayList, float scaleX);
463a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetScaleY(int displayList, float scaleY);
464a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    private static native void nSetTransformationInfo(int displayList, float alpha,
465a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase            float translationX, float translationY, float rotation, float rotationX,
466a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase            float rotationY, float scaleX, float scaleY);
4679420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase    private static native void nSetStaticMatrix(int displayList, int nativeMatrix);
4689420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase    private static native void nSetAnimationMatrix(int displayList, int animationMatrix);
469a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
47052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native boolean nHasOverlappingRendering(int displayList);
47152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native void nGetMatrix(int displayList, int matrix);
47252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetAlpha(int displayList);
47352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetLeft(int displayList);
47452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetTop(int displayList);
47552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetRight(int displayList);
47652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetBottom(int displayList);
47752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetCameraDistance(int displayList);
47852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetScaleX(int displayList);
47952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetScaleY(int displayList);
48052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetTranslationX(int displayList);
48152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetTranslationY(int displayList);
48252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetRotation(int displayList);
48352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetRotationX(int displayList);
48452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetRotationY(int displayList);
48552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetPivotX(int displayList);
48652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy    private static native float nGetPivotY(int displayList);
487a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
488a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    ///////////////////////////////////////////////////////////////////////////
489a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    // Finalization
490a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase    ///////////////////////////////////////////////////////////////////////////
491a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase
492f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy    private static class DisplayListFinalizer {
493162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        final int mNativeDisplayList;
4945977baa1fa24125c148a72699b53e62abaf08960Chet Haase
495162a0217563f4665da6eb183dfce0fef740f641fJeff Brown        public DisplayListFinalizer(int nativeDisplayList) {
496f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy            mNativeDisplayList = nativeDisplayList;
4975c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        }
4985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase
4995c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        @Override
500f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy        protected void finalize() throws Throwable {
5016c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            try {
50252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy                nDestroyDisplayList(mNativeDisplayList);
5036c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            } finally {
5046c319ca1275c8db892c39b48fc54864c949f9171Romain Guy                super.finalize();
5056c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            }
5065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        }
5075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    }
508b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
509