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