RenderNode.java revision f666ad7046c0b1b255835f75aeb7d1391067df93
1f666ad7046c0b1b255835f75aeb7d1391067df93John Reck/*
2f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Copyright (C) 2010 The Android Open Source Project
3f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
4f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Licensed under the Apache License, Version 2.0 (the "License");
5f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * you may not use this file except in compliance with the License.
6f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * You may obtain a copy of the License at
7f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
8f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *      http://www.apache.org/licenses/LICENSE-2.0
9f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
10f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Unless required by applicable law or agreed to in writing, software
11f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * distributed under the License is distributed on an "AS IS" BASIS,
12f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * See the License for the specific language governing permissions and
14f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * limitations under the License.
15f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */
16f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
17f666ad7046c0b1b255835f75aeb7d1391067df93John Reckpackage android.view;
18f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
19f666ad7046c0b1b255835f75aeb7d1391067df93John Reckimport android.graphics.Matrix;
20f666ad7046c0b1b255835f75aeb7d1391067df93John Reckimport android.graphics.Path;
21f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
22f666ad7046c0b1b255835f75aeb7d1391067df93John Reck/**
23f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>A display list records a series of graphics related operations and can replay
24f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * them later. Display lists are usually built by recording operations on a
25f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link HardwareCanvas}. Replaying the operations from a display list avoids
26f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * executing application code on every frame, and is thus much more efficient.</p>
27f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
28f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists are used internally for all views by default, and are not
29f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * typically used directly. One reason to consider using a display is a custom
30f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link View} implementation that needs to issue a large number of drawing commands.
31f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * When the view invalidates, all the drawing commands must be reissued, even if
32f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * large portions of the drawing command stream stay the same frame to frame, which
33f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * can become a performance bottleneck. To solve this issue, a custom View might split
34f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * its content into several display lists. A display list is updated only when its
35f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * content, and only its content, needs to be updated.</p>
36f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
37f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>A text editor might for instance store each paragraph into its own display list.
38f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Thus when the user inserts or removes characters, only the display list of the
39f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * affected paragraph needs to be recorded again.</p>
40f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
41f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Hardware acceleration</h3>
42f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists can only be replayed using a {@link HardwareCanvas}. They are not
43f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * supported in software. Always make sure that the {@link android.graphics.Canvas}
44f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * you are using to render a display list is hardware accelerated using
45f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p>
46f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
47f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Creating a display list</h3>
48f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint">
49f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     HardwareRenderer renderer = myView.getHardwareRenderer();
50f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     if (renderer != null) {
51f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         DisplayList displayList = renderer.createDisplayList();
52f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         HardwareCanvas canvas = displayList.start(width, height);
53f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         try {
54f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             // Draw onto the canvas
55f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             // For instance: canvas.drawBitmap(...);
56f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         } finally {
57f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             displayList.end();
58f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         }
59f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     }
60f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre>
61f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
62f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Rendering a display list on a View</h3>
63f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint">
64f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     protected void onDraw(Canvas canvas) {
65f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         if (canvas.isHardwareAccelerated()) {
66f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
67f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             hardwareCanvas.drawDisplayList(mDisplayList);
68f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         }
69f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     }
70f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre>
71f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
72f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Releasing resources</h3>
73f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>This step is not mandatory but recommended if you want to release resources
74f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * held by a display list as soon as possible.</p>
75f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint">
76f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     // Mark this display list invalid, it cannot be used for drawing anymore,
77f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     // and release resources held by this display list
78f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     displayList.clear();
79f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre>
80f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
81f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Properties</h3>
82f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>In addition, a display list offers several properties, such as
83f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link #setScaleX(float)} or {@link #setLeft(int)}, that can be used to affect all
84f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * the drawing commands recorded within. For instance, these properties can be used
85f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * to move around a large number of images without re-issuing all the individual
86f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <code>drawBitmap()</code> calls.</p>
87f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
88f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint">
89f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     private void createDisplayList() {
90f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         mDisplayList = DisplayList.create("MyDisplayList");
91f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         HardwareCanvas canvas = mDisplayList.start(width, height);
92f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         try {
93f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             for (Bitmap b : mBitmaps) {
94f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *                 canvas.drawBitmap(b, 0.0f, 0.0f, null);
95f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *                 canvas.translate(0.0f, b.getHeight());
96f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             }
97f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         } finally {
98f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             displayList.end();
99f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         }
100f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     }
101f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
102f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     protected void onDraw(Canvas canvas) {
103f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         if (canvas.isHardwareAccelerated()) {
104f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
105f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *             hardwareCanvas.drawDisplayList(mDisplayList);
106f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *         }
107f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     }
108f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
109f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     private void moveContentBy(int x) {
110f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          // This will move all the bitmaps recorded inside the display list
111f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          // by x pixels to the right and redraw this view. All the commands
112f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          // recorded in createDisplayList() won't be re-issued, only onDraw()
113f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          // will be invoked and will execute very quickly
114f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          mDisplayList.offsetLeftAndRight(x);
115f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *          invalidate();
116f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *     }
117f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre>
118f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
119f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Threading</h3>
120f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists must be created on and manipulated from the UI thread only.</p>
121f666ad7046c0b1b255835f75aeb7d1391067df93John Reck *
122f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide
123f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */
124f666ad7046c0b1b255835f75aeb7d1391067df93John Reckpublic class RenderNode {
125f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
126f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Flag used when calling
127f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * {@link HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)}
128f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * When this flag is set, draw operations lying outside of the bounds of the
129f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * display list will be culled early. It is recommeneded to always set this
130f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * flag.
131f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
132f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
133f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
134f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static final int FLAG_CLIP_CHILDREN = 0x1;
135f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
136f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h
137f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
138f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
139f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Indicates that the display list is done drawing.
140f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
141f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
142f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
143f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
144f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
145f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static final int STATUS_DONE = 0x0;
146f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
147f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
148f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Indicates that the display list needs another drawing pass.
149f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
150f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
151f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
152f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
153f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
154f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static final int STATUS_DRAW = 0x1;
155f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
156f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
157f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Indicates that the display list needs to re-execute its GL functors.
158f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
159f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
160f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see HardwareCanvas#callDrawGLFunction(long)
161f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
162f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
163f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
164f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static final int STATUS_INVOKE = 0x2;
165f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
166f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
167f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Indicates that the display list performed GL drawing operations.
168f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
169f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
170f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
171f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
172f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
173f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static final int STATUS_DREW = 0x4;
174f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
175f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private boolean mValid;
176f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private final long mNativeDisplayList;
177f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private HardwareRenderer mRenderer;
178f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
179f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private RenderNode(String name) {
180f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        mNativeDisplayList = nCreate();
181f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetDisplayListName(mNativeDisplayList, name);
182f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
183f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
184f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
185f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Creates a new display list that can be used to record batches of
186f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * drawing operations.
187f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
188f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param name The name of the display list, used for debugging purpose. May be null.
189f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
190f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @return A new display list.
191f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
192f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
193f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
194f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public static RenderNode create(String name) {
195f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return new RenderNode(name);
196f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
197f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
198f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
199f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Starts recording the display list. All operations performed on the
200f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * returned canvas are recorded and stored in this display list.
201f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
202f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Calling this method will mark the display list invalid until
203f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * {@link #end()} is called. Only valid display lists can be replayed.
204f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
205f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param width The width of the display list's viewport
206f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param height The height of the display list's viewport
207f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
208f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @return A canvas to record drawing operations.
209f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
210f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #end()
211f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #isValid()
212f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
213f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public HardwareCanvas start(int width, int height) {
214f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        HardwareCanvas canvas = GLES20RecordingCanvas.obtain();
215f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        canvas.setViewport(width, height);
216f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        // The dirty rect should always be null for a display list
217f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        canvas.onPreDraw(null);
218f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return canvas;
219f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
220f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
221f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
222f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Ends the recording for this display list. A display list cannot be
223f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * replayed if recording is not finished. Calling this method marks
224f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * the display list valid and {@link #isValid()} will return true.
225f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
226f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #start(int, int)
227f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #isValid()
228f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
229f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void end(HardwareRenderer renderer, HardwareCanvas endCanvas) {
230f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        if (!(endCanvas instanceof GLES20RecordingCanvas)) {
231f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            throw new IllegalArgumentException("Passed an invalid canvas to end!");
232f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        }
233f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
234f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        GLES20RecordingCanvas canvas = (GLES20RecordingCanvas) endCanvas;
235f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        canvas.onPostDraw();
236f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        long displayListData = canvas.finishRecording();
237f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        if (renderer != mRenderer) {
238f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            // If we are changing renderers first destroy with the old
239f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            // renderer, then set with the new one
240f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            destroyDisplayListData();
241f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        }
242f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        mRenderer = renderer;
243f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        setDisplayListData(displayListData);
244f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        canvas.recycle();
245f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        mValid = true;
246f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
247f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
248f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
249f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Reset native resources. This is called when cleaning up the state of display lists
250f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * during destruction of hardware resources, to ensure that we do not hold onto
251f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * obsolete resources after related resources are gone.
252f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
253f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
254f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
255f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void destroyDisplayListData() {
256f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        if (!mValid) return;
257f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
258f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        setDisplayListData(0);
259f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        mRenderer = null;
260f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        mValid = false;
261f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
262f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
263f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private void setDisplayListData(long newData) {
264f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        if (mRenderer != null) {
265f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            mRenderer.setDisplayListData(mNativeDisplayList, newData);
266f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        } else {
267f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            throw new IllegalStateException("Trying to set data without a renderer! data=" + newData);
268f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        }
269f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
270f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
271f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
272f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns whether the display list is currently usable. If this returns false,
273f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * the display list should be re-recorded prior to replaying it.
274f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
275f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @return boolean true if the display list is able to be replayed, false otherwise.
276f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
277f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public boolean isValid() { return mValid; }
278f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
279f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    long getNativeDisplayList() {
280f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        if (!mValid) {
281f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            throw new IllegalStateException("The display list is not valid.");
282f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        }
283f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return mNativeDisplayList;
284f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
285f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
286f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
287f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    // DisplayList Property Setters
288f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
289f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
290f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
291f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set the caching property on the display list, which indicates whether the display list
292f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * holds a layer. Layer display lists should avoid creating an alpha layer, since alpha is
293f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * handled in the drawLayer operation directly (and more efficiently).
294f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
295f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param caching true if the display list represents a hardware layer, false otherwise.
296f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
297f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
298f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
299f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setCaching(boolean caching) {
300f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetCaching(mNativeDisplayList, caching);
301f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
302f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
303f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
304f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set whether the display list should clip itself to its bounds. This property is controlled by
305f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * the view's parent.
306f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
307f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param clipToBounds true if the display list should clip to its bounds
308f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
309f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setClipToBounds(boolean clipToBounds) {
310f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetClipToBounds(mNativeDisplayList, clipToBounds);
311f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
312f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
313f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
314f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set whether the display list should collect and Z order all 3d composited descendents, and
315f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * draw them in order with the default Z=0 content.
316f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
317f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param isolatedZVolume true if the display list should collect and Z order descendents.
318f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
319f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setIsolatedZVolume(boolean isolatedZVolume) {
320f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetIsolatedZVolume(mNativeDisplayList, isolatedZVolume);
321f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
322f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
323f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
324f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets whether the display list should be drawn immediately after the
325f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * closest ancestor display list where isolateZVolume is true. If the
326f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * display list itself satisfies this constraint, changing this attribute
327f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * has no effect on drawing order.
328f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
329f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param shouldProject true if the display list should be projected onto a
330f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *            containing volume.
331f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
332f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setProjectBackwards(boolean shouldProject) {
333f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetProjectBackwards(mNativeDisplayList, shouldProject);
334f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
335f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
336f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
337f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets whether the display list is a projection receiver - that its parent
338f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * DisplayList should draw any descendent DisplayLists with
339f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * ProjectBackwards=true directly on top of it. Default value is false.
340f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
341f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setProjectionReceiver(boolean shouldRecieve) {
342f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetProjectionReceiver(mNativeDisplayList, shouldRecieve);
343f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
344f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
345f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
346f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the outline, defining the shape that casts a shadow, and the path to
347f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * be clipped if setClipToOutline is set.
348f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
349f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Deep copies the native path to simplify reference ownership.
350f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
351f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param outline Convex, CW Path to store in the DisplayList. May be null.
352f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
353f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setOutline(Path outline) {
354f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        long nativePath = (outline == null) ? 0 : outline.mNativePath;
355f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetOutline(mNativeDisplayList, nativePath);
356f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
357f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
358f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
359f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Enables or disables clipping to the outline.
360f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
361f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param clipToOutline true if clipping to the outline.
362f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
363f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setClipToOutline(boolean clipToOutline) {
364f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetClipToOutline(mNativeDisplayList, clipToOutline);
365f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
366f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
367f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
368f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set whether the DisplayList should cast a shadow.
369f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
370f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * The shape of the shadow casting area is defined by the outline of the display list, if set
371f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * and non-empty, otherwise it will be the bounds rect.
372f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
373f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setCastsShadow(boolean castsShadow) {
374f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetCastsShadow(mNativeDisplayList, castsShadow);
375f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
376f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
377f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
378f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets whether the DisplayList should be drawn with perspective applied from the global camera.
379f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
380f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * If set to true, camera distance will be ignored. Defaults to false.
381f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
382f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setUsesGlobalCamera(boolean usesGlobalCamera) {
383f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetUsesGlobalCamera(mNativeDisplayList, usesGlobalCamera);
384f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
385f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
386f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
387f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set the static matrix on the display list. The specified matrix is combined with other
388f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * transforms (such as {@link #setScaleX(float)}, {@link #setRotation(float)}, etc.)
389f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
390f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param matrix A transform matrix to apply to this display list
391f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
392f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getMatrix(android.graphics.Matrix)
393f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getMatrix()
394f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
395f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setStaticMatrix(Matrix matrix) {
396f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetStaticMatrix(mNativeDisplayList, matrix.native_instance);
397f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
398f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
399f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
400f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Set the Animation matrix on the display list. This matrix exists if an Animation is
401f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * currently playing on a View, and is set on the display list during at draw() time. When
402f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * the Animation finishes, the matrix should be cleared by sending <code>null</code>
403f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * for the matrix parameter.
404f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
405f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param matrix The matrix, null indicates that the matrix should be cleared.
406f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
407f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
408f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
409f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setAnimationMatrix(Matrix matrix) {
410f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetAnimationMatrix(mNativeDisplayList,
411f666ad7046c0b1b255835f75aeb7d1391067df93John Reck                (matrix != null) ? matrix.native_instance : 0);
412f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
413f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
414f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
415f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the translucency level for the display list.
416f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
417f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param alpha The translucency of the display list, must be a value between 0.0f and 1.0f
418f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
419f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setAlpha(float)
420f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getAlpha()
421f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
422f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setAlpha(float alpha) {
423f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetAlpha(mNativeDisplayList, alpha);
424f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
425f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
426f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
427f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the translucency level of this display list.
428f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
429f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @return A value between 0.0f and 1.0f
430f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
431f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setAlpha(float)
432f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
433f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getAlpha() {
434f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetAlpha(mNativeDisplayList);
435f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
436f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
437f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
438f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets whether the display list renders content which overlaps. Non-overlapping rendering
439f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * can use a fast path for alpha that avoids rendering to an offscreen buffer. By default
440f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * display lists consider they do not have overlapping content.
441f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
442f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param hasOverlappingRendering False if the content is guaranteed to be non-overlapping,
443f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *                                true otherwise.
444f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
445f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see android.view.View#hasOverlappingRendering()
446f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #hasOverlappingRendering()
447f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
448f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
449f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetHasOverlappingRendering(mNativeDisplayList, hasOverlappingRendering);
450f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
451f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
452f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
453f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Indicates whether the content of this display list overlaps.
454f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
455f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @return True if this display list renders content which overlaps, false otherwise.
456f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
457f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setHasOverlappingRendering(boolean)
458f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
459f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public boolean hasOverlappingRendering() {
460f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        //noinspection SimplifiableIfStatement
461f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nHasOverlappingRendering(mNativeDisplayList);
462f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
463f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
464f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
465f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the translation value for the display list on the X axis.
466f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
467f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param translationX The X axis translation value of the display list, in pixels
468f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
469f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setTranslationX(float)
470f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getTranslationX()
471f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
472f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setTranslationX(float translationX) {
473f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetTranslationX(mNativeDisplayList, translationX);
474f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
475f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
476f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
477f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the translation value for this display list on the X axis, in pixels.
478f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
479f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setTranslationX(float)
480f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
481f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getTranslationX() {
482f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetTranslationX(mNativeDisplayList);
483f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
484f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
485f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
486f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the translation value for the display list on the Y axis.
487f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
488f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param translationY The Y axis translation value of the display list, in pixels
489f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
490f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setTranslationY(float)
491f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getTranslationY()
492f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
493f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setTranslationY(float translationY) {
494f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetTranslationY(mNativeDisplayList, translationY);
495f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
496f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
497f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
498f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the translation value for this display list on the Y axis, in pixels.
499f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
500f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setTranslationY(float)
501f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
502f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getTranslationY() {
503f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetTranslationY(mNativeDisplayList);
504f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
505f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
506f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
507f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the translation value for the display list on the Z axis.
508f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
509f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setTranslationZ(float)
510f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getTranslationZ()
511f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
512f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setTranslationZ(float translationZ) {
513f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetTranslationZ(mNativeDisplayList, translationZ);
514f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
515f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
516f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
517f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the translation value for this display list on the Z axis.
518f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
519f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setTranslationZ(float)
520f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
521f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getTranslationZ() {
522f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetTranslationZ(mNativeDisplayList);
523f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
524f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
525f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
526f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the rotation value for the display list around the Z axis.
527f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
528f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotation The rotation value of the display list, in degrees
529f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
530f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setRotation(float)
531f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getRotation()
532f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
533f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setRotation(float rotation) {
534f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetRotation(mNativeDisplayList, rotation);
535f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
536f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
537f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
538f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the rotation value for this display list around the Z axis, in degrees.
539f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
540f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setRotation(float)
541f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
542f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getRotation() {
543f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetRotation(mNativeDisplayList);
544f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
545f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
546f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
547f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the rotation value for the display list around the X axis.
548f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
549f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotationX The rotation value of the display list, in degrees
550f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
551f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setRotationX(float)
552f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getRotationX()
553f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
554f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setRotationX(float rotationX) {
555f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetRotationX(mNativeDisplayList, rotationX);
556f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
557f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
558f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
559f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the rotation value for this display list around the X axis, in degrees.
560f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
561f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setRotationX(float)
562f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
563f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getRotationX() {
564f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetRotationX(mNativeDisplayList);
565f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
566f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
567f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
568f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the rotation value for the display list around the Y axis.
569f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
570f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotationY The rotation value of the display list, in degrees
571f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
572f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setRotationY(float)
573f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getRotationY()
574f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
575f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setRotationY(float rotationY) {
576f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetRotationY(mNativeDisplayList, rotationY);
577f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
578f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
579f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
580f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the rotation value for this display list around the Y axis, in degrees.
581f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
582f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setRotationY(float)
583f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
584f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getRotationY() {
585f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetRotationY(mNativeDisplayList);
586f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
587f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
588f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
589f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the scale value for the display list on the X axis.
590f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
591f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param scaleX The scale value of the display list
592f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
593f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setScaleX(float)
594f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getScaleX()
595f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
596f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setScaleX(float scaleX) {
597f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetScaleX(mNativeDisplayList, scaleX);
598f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
599f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
600f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
601f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the scale value for this display list on the X axis.
602f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
603f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setScaleX(float)
604f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
605f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getScaleX() {
606f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetScaleX(mNativeDisplayList);
607f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
608f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
609f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
610f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the scale value for the display list on the Y axis.
611f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
612f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param scaleY The scale value of the display list
613f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
614f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setScaleY(float)
615f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getScaleY()
616f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
617f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setScaleY(float scaleY) {
618f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetScaleY(mNativeDisplayList, scaleY);
619f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
620f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
621f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
622f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the scale value for this display list on the Y axis.
623f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
624f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setScaleY(float)
625f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
626f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getScaleY() {
627f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetScaleY(mNativeDisplayList);
628f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
629f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
630f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
631f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets all of the transform-related values of the display list
632f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
633f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param alpha The alpha value of the display list
634f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param translationX The translationX value of the display list
635f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param translationY The translationY value of the display list
636f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotation The rotation value of the display list
637f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotationX The rotationX value of the display list
638f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param rotationY The rotationY value of the display list
639f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param scaleX The scaleX value of the display list
640f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param scaleY The scaleY value of the display list
641f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
642f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
643f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
644f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setTransformationInfo(float alpha,
645f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            float translationX, float translationY, float translationZ,
646f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
647f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetTransformationInfo(mNativeDisplayList, alpha,
648f666ad7046c0b1b255835f75aeb7d1391067df93John Reck                translationX, translationY, translationZ,
649f666ad7046c0b1b255835f75aeb7d1391067df93John Reck                rotation, rotationX, rotationY, scaleX, scaleY);
650f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
651f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
652f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
653f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the pivot value for the display list on the X axis
654f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
655f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param pivotX The pivot value of the display list on the X axis, in pixels
656f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
657f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setPivotX(float)
658f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getPivotX()
659f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
660f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setPivotX(float pivotX) {
661f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetPivotX(mNativeDisplayList, pivotX);
662f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
663f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
664f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
665f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the pivot value for this display list on the X axis, in pixels.
666f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
667f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setPivotX(float)
668f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
669f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getPivotX() {
670f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetPivotX(mNativeDisplayList);
671f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
672f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
673f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
674f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the pivot value for the display list on the Y axis
675f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
676f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param pivotY The pivot value of the display list on the Y axis, in pixels
677f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
678f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setPivotY(float)
679f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getPivotY()
680f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
681f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setPivotY(float pivotY) {
682f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetPivotY(mNativeDisplayList, pivotY);
683f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
684f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
685f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
686f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the pivot value for this display list on the Y axis, in pixels.
687f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
688f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setPivotY(float)
689f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
690f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getPivotY() {
691f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetPivotY(mNativeDisplayList);
692f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
693f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
694f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
695f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the camera distance for the display list. Refer to
696f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * {@link View#setCameraDistance(float)} for more information on how to
697f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * use this property.
698f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
699f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param distance The distance in Z of the camera of the display list
700f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
701f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setCameraDistance(float)
702f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getCameraDistance()
703f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
704f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setCameraDistance(float distance) {
705f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetCameraDistance(mNativeDisplayList, distance);
706f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
707f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
708f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
709f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the distance in Z of the camera of the display list.
710f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
711f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setCameraDistance(float)
712f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
713f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getCameraDistance() {
714f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetCameraDistance(mNativeDisplayList);
715f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
716f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
717f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
718f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the left position for the display list.
719f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
720f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param left The left position, in pixels, of the display list
721f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
722f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setLeft(int)
723f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getLeft()
724f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
725f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setLeft(int left) {
726f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetLeft(mNativeDisplayList, left);
727f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
728f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
729f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
730f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the left position for the display list in pixels.
731f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
732f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setLeft(int)
733f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
734f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getLeft() {
735f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetLeft(mNativeDisplayList);
736f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
737f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
738f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
739f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the top position for the display list.
740f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
741f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param top The top position, in pixels, of the display list
742f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
743f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setTop(int)
744f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getTop()
745f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
746f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setTop(int top) {
747f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetTop(mNativeDisplayList, top);
748f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
749f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
750f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
751f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the top position for the display list in pixels.
752f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
753f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setTop(int)
754f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
755f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getTop() {
756f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetTop(mNativeDisplayList);
757f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
758f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
759f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
760f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the right position for the display list.
761f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
762f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param right The right position, in pixels, of the display list
763f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
764f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setRight(int)
765f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getRight()
766f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
767f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setRight(int right) {
768f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetRight(mNativeDisplayList, right);
769f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
770f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
771f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
772f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the right position for the display list in pixels.
773f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
774f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setRight(int)
775f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
776f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getRight() {
777f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetRight(mNativeDisplayList);
778f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
779f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
780f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
781f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the bottom position for the display list.
782f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
783f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param bottom The bottom position, in pixels, of the display list
784f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
785f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setBottom(int)
786f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #getBottom()
787f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
788f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setBottom(int bottom) {
789f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetBottom(mNativeDisplayList, bottom);
790f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
791f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
792f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
793f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Returns the bottom position for the display list in pixels.
794f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
795f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see #setBottom(int)
796f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
797f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public float getBottom() {
798f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        return nGetBottom(mNativeDisplayList);
799f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
800f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
801f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
802f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Sets the left and top positions for the display list
803f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
804f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param left The left position of the display list, in pixels
805f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param top The top position of the display list, in pixels
806f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param right The right position of the display list, in pixels
807f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param bottom The bottom position of the display list, in pixels
808f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
809f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setLeft(int)
810f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setTop(int)
811f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setRight(int)
812f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#setBottom(int)
813f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
814f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
815f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nSetLeftTopRightBottom(mNativeDisplayList, left, top, right, bottom);
816f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
817f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
818f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
819f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Offsets the left and right positions for the display list
820f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
821f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param offset The amount that the left and right positions of the display
822f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *               list are offset, in pixels
823f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
824f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#offsetLeftAndRight(int)
825f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
826f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void offsetLeftAndRight(float offset) {
827f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nOffsetLeftAndRight(mNativeDisplayList, offset);
828f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
829f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
830f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
831f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Offsets the top and bottom values for the display list
832f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
833f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @param offset The amount that the top and bottom positions of the display
834f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *               list are offset, in pixels
835f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
836f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @see View#offsetTopAndBottom(int)
837f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
838f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void offsetTopAndBottom(float offset) {
839f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nOffsetTopAndBottom(mNativeDisplayList, offset);
840f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
841f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
842f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    /**
843f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * Outputs the display list to the log. This method exists for use by
844f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * tools to output display lists for selected nodes to the log.
845f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     *
846f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     * @hide
847f666ad7046c0b1b255835f75aeb7d1391067df93John Reck     */
848f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    public void output() {
849f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        nOutput(mNativeDisplayList);
850f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
851f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
852f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
853f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    // Native methods
854f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
855f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
856f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native long nCreate();
857f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nDestroyDisplayList(long displayList);
858f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetDisplayListName(long displayList, String name);
859f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
860f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    // Properties
861f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
862f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nOffsetTopAndBottom(long displayList, float offset);
863f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nOffsetLeftAndRight(long displayList, float offset);
864f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetLeftTopRightBottom(long displayList, int left, int top,
865f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            int right, int bottom);
866f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetBottom(long displayList, int bottom);
867f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetRight(long displayList, int right);
868f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetTop(long displayList, int top);
869f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetLeft(long displayList, int left);
870f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetCameraDistance(long displayList, float distance);
871f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetPivotY(long displayList, float pivotY);
872f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetPivotX(long displayList, float pivotX);
873f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetCaching(long displayList, boolean caching);
874f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetClipToBounds(long displayList, boolean clipToBounds);
875f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetProjectBackwards(long displayList, boolean shouldProject);
876f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetProjectionReceiver(long displayList, boolean shouldRecieve);
877f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetIsolatedZVolume(long displayList, boolean isolateZVolume);
878f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetOutline(long displayList, long nativePath);
879f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetClipToOutline(long displayList, boolean clipToOutline);
880f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetCastsShadow(long displayList, boolean castsShadow);
881f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetUsesGlobalCamera(long displayList, boolean usesGlobalCamera);
882f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetAlpha(long displayList, float alpha);
883f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetHasOverlappingRendering(long displayList,
884f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            boolean hasOverlappingRendering);
885f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetTranslationX(long displayList, float translationX);
886f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetTranslationY(long displayList, float translationY);
887f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetTranslationZ(long displayList, float translationZ);
888f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetRotation(long displayList, float rotation);
889f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetRotationX(long displayList, float rotationX);
890f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetRotationY(long displayList, float rotationY);
891f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetScaleX(long displayList, float scaleX);
892f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetScaleY(long displayList, float scaleY);
893f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetTransformationInfo(long displayList, float alpha,
894f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            float translationX, float translationY, float translationZ,
895f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            float rotation, float rotationX, float rotationY, float scaleX, float scaleY);
896f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetStaticMatrix(long displayList, long nativeMatrix);
897f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nSetAnimationMatrix(long displayList, long animationMatrix);
898f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
899f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native boolean nHasOverlappingRendering(long displayList);
900f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetAlpha(long displayList);
901f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetLeft(long displayList);
902f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetTop(long displayList);
903f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetRight(long displayList);
904f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetBottom(long displayList);
905f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetCameraDistance(long displayList);
906f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetScaleX(long displayList);
907f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetScaleY(long displayList);
908f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetTranslationX(long displayList);
909f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetTranslationY(long displayList);
910f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetTranslationZ(long displayList);
911f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetRotation(long displayList);
912f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetRotationX(long displayList);
913f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetRotationY(long displayList);
914f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetPivotX(long displayList);
915f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native float nGetPivotY(long displayList);
916f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    private static native void nOutput(long displayList);
917f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
918f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
919f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    // Finalization
920f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    ///////////////////////////////////////////////////////////////////////////
921f666ad7046c0b1b255835f75aeb7d1391067df93John Reck
922f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    @Override
923f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    protected void finalize() throws Throwable {
924f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        try {
925f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            destroyDisplayListData();
926f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            nDestroyDisplayList(mNativeDisplayList);
927f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        } finally {
928f666ad7046c0b1b255835f75aeb7d1391067df93John Reck            super.finalize();
929f666ad7046c0b1b255835f75aeb7d1391067df93John Reck        }
930f666ad7046c0b1b255835f75aeb7d1391067df93John Reck    }
931f666ad7046c0b1b255835f75aeb7d1391067df93John Reck}
932