RenderNode.java revision cc39e16cb98855f35079941b5e7e6eac2b7bc388
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 1949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craikimport android.annotation.NonNull; 20f666ad7046c0b1b255835f75aeb7d1391067df93John Reckimport android.graphics.Matrix; 21b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craikimport android.graphics.Outline; 22f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 23f666ad7046c0b1b255835f75aeb7d1391067df93John Reck/** 24f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>A display list records a series of graphics related operations and can replay 25f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * them later. Display lists are usually built by recording operations on a 26f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link HardwareCanvas}. Replaying the operations from a display list avoids 27f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * executing application code on every frame, and is thus much more efficient.</p> 28f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 29f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists are used internally for all views by default, and are not 30f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * typically used directly. One reason to consider using a display is a custom 31f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link View} implementation that needs to issue a large number of drawing commands. 32f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * When the view invalidates, all the drawing commands must be reissued, even if 33f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * large portions of the drawing command stream stay the same frame to frame, which 34f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * can become a performance bottleneck. To solve this issue, a custom View might split 35f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * its content into several display lists. A display list is updated only when its 36f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * content, and only its content, needs to be updated.</p> 37f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 38f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>A text editor might for instance store each paragraph into its own display list. 39f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Thus when the user inserts or removes characters, only the display list of the 40f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * affected paragraph needs to be recorded again.</p> 41f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 42f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Hardware acceleration</h3> 43f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists can only be replayed using a {@link HardwareCanvas}. They are not 44f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * supported in software. Always make sure that the {@link android.graphics.Canvas} 45f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * you are using to render a display list is hardware accelerated using 46f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p> 47f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 48f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Creating a display list</h3> 49f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint"> 50f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * HardwareRenderer renderer = myView.getHardwareRenderer(); 51f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * if (renderer != null) { 52f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * DisplayList displayList = renderer.createDisplayList(); 53f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * HardwareCanvas canvas = displayList.start(width, height); 54f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * try { 55f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // Draw onto the canvas 56f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // For instance: canvas.drawBitmap(...); 57f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } finally { 58f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * displayList.end(); 59f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 60f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 61f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre> 62f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 63f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Rendering a display list on a View</h3> 64f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint"> 65f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * protected void onDraw(Canvas canvas) { 66f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * if (canvas.isHardwareAccelerated()) { 67f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas; 68f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * hardwareCanvas.drawDisplayList(mDisplayList); 69f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 70f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 71f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre> 72f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 73f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Releasing resources</h3> 74f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>This step is not mandatory but recommended if you want to release resources 75f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * held by a display list as soon as possible.</p> 76f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint"> 77f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // Mark this display list invalid, it cannot be used for drawing anymore, 78f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // and release resources held by this display list 79f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * displayList.clear(); 80f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre> 81f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 82f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Properties</h3> 83f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>In addition, a display list offers several properties, such as 84f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link #setScaleX(float)} or {@link #setLeft(int)}, that can be used to affect all 85f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * the drawing commands recorded within. For instance, these properties can be used 86f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * to move around a large number of images without re-issuing all the individual 87f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <code>drawBitmap()</code> calls.</p> 88f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 89f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <pre class="prettyprint"> 90f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * private void createDisplayList() { 91f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * mDisplayList = DisplayList.create("MyDisplayList"); 92f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * HardwareCanvas canvas = mDisplayList.start(width, height); 93f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * try { 94f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * for (Bitmap b : mBitmaps) { 95f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * canvas.drawBitmap(b, 0.0f, 0.0f, null); 96f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * canvas.translate(0.0f, b.getHeight()); 97f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 98f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } finally { 99f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * displayList.end(); 100f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 101f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 102f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 103f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * protected void onDraw(Canvas canvas) { 104f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * if (canvas.isHardwareAccelerated()) { 105f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas; 106f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * hardwareCanvas.drawDisplayList(mDisplayList); 107f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 108f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 109f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 110f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * private void moveContentBy(int x) { 111f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // This will move all the bitmaps recorded inside the display list 112f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // by x pixels to the right and redraw this view. All the commands 113f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // recorded in createDisplayList() won't be re-issued, only onDraw() 114f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * // will be invoked and will execute very quickly 115f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * mDisplayList.offsetLeftAndRight(x); 116f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * invalidate(); 117f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * } 118f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * </pre> 119f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 120f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <h3>Threading</h3> 121f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * <p>Display lists must be created on and manipulated from the UI thread only.</p> 122f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 123f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 124f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 125f666ad7046c0b1b255835f75aeb7d1391067df93John Reckpublic class RenderNode { 126f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 127f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Flag used when calling 128f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)} 129f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * When this flag is set, draw operations lying outside of the bounds of the 130f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * display list will be culled early. It is recommeneded to always set this 131f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * flag. 132f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 133f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 134f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 135f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static final int FLAG_CLIP_CHILDREN = 0x1; 136f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 137f666ad7046c0b1b255835f75aeb7d1391067df93John Reck // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h 138f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 139f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 140f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Indicates that the display list is done drawing. 141f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 142f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int) 143f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 144f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 145f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 146f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static final int STATUS_DONE = 0x0; 147f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 148f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 149f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Indicates that the display list needs another drawing pass. 150f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 151f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int) 152f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 153f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 154f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 155f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static final int STATUS_DRAW = 0x1; 156f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 157f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 158f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Indicates that the display list needs to re-execute its GL functors. 159f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 160f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int) 161f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see HardwareCanvas#callDrawGLFunction(long) 162f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 163f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 164f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 165f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static final int STATUS_INVOKE = 0x2; 166f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 167f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 168f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Indicates that the display list performed GL drawing operations. 169f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 170f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int) 171f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 172f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 173f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 174f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static final int STATUS_DREW = 0x4; 175f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 176f666ad7046c0b1b255835f75aeb7d1391067df93John Reck private boolean mValid; 1778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private final long mNativeRenderNode; 178f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 179f666ad7046c0b1b255835f75aeb7d1391067df93John Reck private RenderNode(String name) { 1808de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck mNativeRenderNode = nCreate(name); 181f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 182f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 183f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 184f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Creates a new display list that can be used to record batches of 185f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * drawing operations. 186f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 187f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param name The name of the display list, used for debugging purpose. May be null. 188f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 189f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return A new display list. 190f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 191f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 192f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 193f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public static RenderNode create(String name) { 194f666ad7046c0b1b255835f75aeb7d1391067df93John Reck return new RenderNode(name); 195f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 196f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 197f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 19849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * Starts recording a display list for the render node. All 19949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * operations performed on the returned canvas are recorded and 20049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * stored in this display list. 201f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 20249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * Calling this method will mark the render node invalid until 2038de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck * {@link #end(HardwareCanvas)} is called. 20449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * Only valid render nodes can be replayed. 205f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 20649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * @param width The width of the recording viewport 20749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * @param height The height of the recording viewport 208f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 209f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return A canvas to record drawing operations. 210f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 2118de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck * @see #end(HardwareCanvas) 212f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #isValid() 213f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 214f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public HardwareCanvas start(int width, int height) { 215f666ad7046c0b1b255835f75aeb7d1391067df93John Reck HardwareCanvas canvas = GLES20RecordingCanvas.obtain(); 216f666ad7046c0b1b255835f75aeb7d1391067df93John Reck canvas.setViewport(width, height); 217f666ad7046c0b1b255835f75aeb7d1391067df93John Reck // The dirty rect should always be null for a display list 218f666ad7046c0b1b255835f75aeb7d1391067df93John Reck canvas.onPreDraw(null); 219f666ad7046c0b1b255835f75aeb7d1391067df93John Reck return canvas; 220f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 221f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 222f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 223f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Ends the recording for this display list. A display list cannot be 224f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * replayed if recording is not finished. Calling this method marks 225f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * the display list valid and {@link #isValid()} will return true. 226f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 227f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #start(int, int) 228f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #isValid() 229f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 2308de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck public void end(HardwareCanvas endCanvas) { 231f666ad7046c0b1b255835f75aeb7d1391067df93John Reck if (!(endCanvas instanceof GLES20RecordingCanvas)) { 232f666ad7046c0b1b255835f75aeb7d1391067df93John Reck throw new IllegalArgumentException("Passed an invalid canvas to end!"); 233f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 234f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 235f666ad7046c0b1b255835f75aeb7d1391067df93John Reck GLES20RecordingCanvas canvas = (GLES20RecordingCanvas) endCanvas; 236f666ad7046c0b1b255835f75aeb7d1391067df93John Reck canvas.onPostDraw(); 2378de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck long renderNodeData = canvas.finishRecording(); 2388de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetDisplayListData(mNativeRenderNode, renderNodeData); 239f666ad7046c0b1b255835f75aeb7d1391067df93John Reck canvas.recycle(); 240f666ad7046c0b1b255835f75aeb7d1391067df93John Reck mValid = true; 241f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 242f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 243f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 244f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Reset native resources. This is called when cleaning up the state of display lists 245f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * during destruction of hardware resources, to ensure that we do not hold onto 246f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * obsolete resources after related resources are gone. 247f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 248f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 249f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 250f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void destroyDisplayListData() { 251f666ad7046c0b1b255835f75aeb7d1391067df93John Reck if (!mValid) return; 252f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 2538de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetDisplayListData(mNativeRenderNode, 0); 254f666ad7046c0b1b255835f75aeb7d1391067df93John Reck mValid = false; 255f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 256f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 257f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 258df0c431e6cc23c0348d2e71fd834d74379afa33dChris Craik * Returns whether the RenderNode's display list content is currently usable. 259df0c431e6cc23c0348d2e71fd834d74379afa33dChris Craik * If this returns false, the display list should be re-recorded prior to replaying it. 260f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 261f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return boolean true if the display list is able to be replayed, false otherwise. 262f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 263f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public boolean isValid() { return mValid; } 264f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 265f666ad7046c0b1b255835f75aeb7d1391067df93John Reck long getNativeDisplayList() { 266f666ad7046c0b1b255835f75aeb7d1391067df93John Reck if (!mValid) { 267f666ad7046c0b1b255835f75aeb7d1391067df93John Reck throw new IllegalStateException("The display list is not valid."); 268f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 2698de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return mNativeRenderNode; 270f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 271f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 272f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 27349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // Matrix manipulation 27449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik /////////////////////////////////////////////////////////////////////////// 27549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 27649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik public boolean hasIdentityMatrix() { 2778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nHasIdentityMatrix(mNativeRenderNode); 27849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 27949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 28049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik public void getMatrix(@NonNull Matrix outMatrix) { 2818de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nGetTransformMatrix(mNativeRenderNode, outMatrix.native_instance); 28249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 28349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 28449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik public void getInverseMatrix(@NonNull Matrix outMatrix) { 2858de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nGetInverseTransformMatrix(mNativeRenderNode, outMatrix.native_instance); 28649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 28749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 28849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik /////////////////////////////////////////////////////////////////////////// 28949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // RenderProperty Setters 290f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 291f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 292f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 293f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Set the caching property on the display list, which indicates whether the display list 294f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * holds a layer. Layer display lists should avoid creating an alpha layer, since alpha is 295f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * handled in the drawLayer operation directly (and more efficiently). 296f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 297f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param caching true if the display list represents a hardware layer, false otherwise. 298f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 299f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 300f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 301f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setCaching(boolean caching) { 3028de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetCaching(mNativeRenderNode, caching); 303f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 304f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 305f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 30649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * Set whether the Render node should clip itself to its bounds. This property is controlled by 307f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * the view's parent. 308f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 309f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param clipToBounds true if the display list should clip to its bounds 310f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 311f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setClipToBounds(boolean clipToBounds) { 3128de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetClipToBounds(mNativeRenderNode, clipToBounds); 313f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 314f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 315f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 316f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets whether the display list should be drawn immediately after the 31749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * closest ancestor display list containing a projection receiver. 318f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 319f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param shouldProject true if the display list should be projected onto a 320f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * containing volume. 321f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 322f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setProjectBackwards(boolean shouldProject) { 3238de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetProjectBackwards(mNativeRenderNode, shouldProject); 324f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 325f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 326f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 327f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets whether the display list is a projection receiver - that its parent 328f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * DisplayList should draw any descendent DisplayLists with 329f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * ProjectBackwards=true directly on top of it. Default value is false. 330f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 331f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setProjectionReceiver(boolean shouldRecieve) { 3328de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetProjectionReceiver(mNativeRenderNode, shouldRecieve); 333f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 334f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 335f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 336f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the outline, defining the shape that casts a shadow, and the path to 337f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * be clipped if setClipToOutline is set. 338f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 339b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik * Deep copies the data into native to simplify reference ownership. 340b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik */ 341b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik public void setOutline(Outline outline) { 342b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik if (outline == null) { 3438de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetOutlineEmpty(mNativeRenderNode); 344b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } else if (!outline.isValid()) { 345b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik throw new IllegalArgumentException("Outline must be valid"); 346b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } else if (outline.mRect != null) { 3478de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetOutlineRoundRect(mNativeRenderNode, outline.mRect.left, outline.mRect.top, 348b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik outline.mRect.right, outline.mRect.bottom, outline.mRadius); 349b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } else if (outline.mPath != null) { 3508de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetOutlineConvexPath(mNativeRenderNode, outline.mPath.mNativePath); 351b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } 352f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 353f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 354f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 355f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Enables or disables clipping to the outline. 356f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 357f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param clipToOutline true if clipping to the outline. 358f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 359f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setClipToOutline(boolean clipToOutline) { 3608de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetClipToOutline(mNativeRenderNode, clipToOutline); 361f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 362f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 363f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 3648c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Controls the RenderNode's circular reveal clip. 3658c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik */ 3668c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik public void setRevealClip(boolean shouldClip, boolean inverseClip, 3678c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik float x, float y, float radius) { 3688de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetRevealClip(mNativeRenderNode, shouldClip, inverseClip, x, y, radius); 3698c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 3708c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 3718c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik /** 372f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Set the static matrix on the display list. The specified matrix is combined with other 373f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * transforms (such as {@link #setScaleX(float)}, {@link #setRotation(float)}, etc.) 374f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 375f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param matrix A transform matrix to apply to this display list 376f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 377f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setStaticMatrix(Matrix matrix) { 3788de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetStaticMatrix(mNativeRenderNode, matrix.native_instance); 379f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 380f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 381f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 382f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Set the Animation matrix on the display list. This matrix exists if an Animation is 383f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * currently playing on a View, and is set on the display list during at draw() time. When 384f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * the Animation finishes, the matrix should be cleared by sending <code>null</code> 385f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * for the matrix parameter. 386f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 387f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param matrix The matrix, null indicates that the matrix should be cleared. 388f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 389f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 390f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 391f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setAnimationMatrix(Matrix matrix) { 3928de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetAnimationMatrix(mNativeRenderNode, 393f666ad7046c0b1b255835f75aeb7d1391067df93John Reck (matrix != null) ? matrix.native_instance : 0); 394f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 395f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 396f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 397f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the translucency level for the display list. 398f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 399f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param alpha The translucency of the display list, must be a value between 0.0f and 1.0f 400f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 401f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setAlpha(float) 402f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getAlpha() 403f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 404f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setAlpha(float alpha) { 4058de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetAlpha(mNativeRenderNode, alpha); 406f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 407f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 408f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 409f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the translucency level of this display list. 410f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 411f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return A value between 0.0f and 1.0f 412f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 413f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setAlpha(float) 414f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 415f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getAlpha() { 4168de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetAlpha(mNativeRenderNode); 417f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 418f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 419f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 420f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets whether the display list renders content which overlaps. Non-overlapping rendering 421f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * can use a fast path for alpha that avoids rendering to an offscreen buffer. By default 422f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * display lists consider they do not have overlapping content. 423f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 424f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param hasOverlappingRendering False if the content is guaranteed to be non-overlapping, 425f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * true otherwise. 426f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 427f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see android.view.View#hasOverlappingRendering() 428f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #hasOverlappingRendering() 429f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 430f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setHasOverlappingRendering(boolean hasOverlappingRendering) { 4318de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetHasOverlappingRendering(mNativeRenderNode, hasOverlappingRendering); 432f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 433f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 434f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 435f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Indicates whether the content of this display list overlaps. 436f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 437f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return True if this display list renders content which overlaps, false otherwise. 438f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 439f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setHasOverlappingRendering(boolean) 440f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 441f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public boolean hasOverlappingRendering() { 442f666ad7046c0b1b255835f75aeb7d1391067df93John Reck //noinspection SimplifiableIfStatement 4438de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nHasOverlappingRendering(mNativeRenderNode); 444f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 445f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 446cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik public void setElevation(float lift) { 447cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik nSetElevation(mNativeRenderNode, lift); 448cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 449cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 450cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik public float getElevation() { 451cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return nGetElevation(mNativeRenderNode); 452cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 453cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 454f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 455f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the translation value for the display list on the X axis. 456f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 457f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param translationX The X axis translation value of the display list, in pixels 458f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 459f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setTranslationX(float) 460f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getTranslationX() 461f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 462f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setTranslationX(float translationX) { 4638de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetTranslationX(mNativeRenderNode, translationX); 464f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 465f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 466f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 467f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the translation value for this display list on the X axis, in pixels. 468f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 469f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setTranslationX(float) 470f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 471f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getTranslationX() { 4728de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetTranslationX(mNativeRenderNode); 473f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 474f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 475f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 476f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the translation value for the display list on the Y axis. 477f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 478f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param translationY The Y axis translation value of the display list, in pixels 479f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 480f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setTranslationY(float) 481f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getTranslationY() 482f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 483f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setTranslationY(float translationY) { 4848de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetTranslationY(mNativeRenderNode, translationY); 485f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 486f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 487f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 488f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the translation value for this display list on the Y axis, in pixels. 489f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 490f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setTranslationY(float) 491f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 492f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getTranslationY() { 4938de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetTranslationY(mNativeRenderNode); 494f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 495f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 496f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 497f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the translation value for the display list on the Z axis. 498f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 499f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setTranslationZ(float) 500f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getTranslationZ() 501f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 502f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setTranslationZ(float translationZ) { 5038de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetTranslationZ(mNativeRenderNode, translationZ); 504f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 505f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 506f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 507f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the translation value for this display list on the Z axis. 508f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 509f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setTranslationZ(float) 510f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 511f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getTranslationZ() { 5128de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetTranslationZ(mNativeRenderNode); 513f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 514f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 515f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 516f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the rotation value for the display list around the Z axis. 517f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 518f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param rotation The rotation value of the display list, in degrees 519f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 520f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setRotation(float) 521f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getRotation() 522f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 523f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setRotation(float rotation) { 5248de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetRotation(mNativeRenderNode, rotation); 525f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 526f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 527f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 528f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the rotation value for this display list around the Z axis, in degrees. 529f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 530f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setRotation(float) 531f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 532f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getRotation() { 5338de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetRotation(mNativeRenderNode); 534f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 535f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 536f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 537f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the rotation value for the display list around the X axis. 538f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 539f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param rotationX The rotation value of the display list, in degrees 540f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 541f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setRotationX(float) 542f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getRotationX() 543f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 544f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setRotationX(float rotationX) { 5458de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetRotationX(mNativeRenderNode, rotationX); 546f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 547f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 548f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 549f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the rotation value for this display list around the X axis, in degrees. 550f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 551f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setRotationX(float) 552f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 553f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getRotationX() { 5548de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetRotationX(mNativeRenderNode); 555f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 556f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 557f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 558f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the rotation value for the display list around the Y axis. 559f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 560f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param rotationY The rotation value of the display list, in degrees 561f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 562f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setRotationY(float) 563f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getRotationY() 564f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 565f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setRotationY(float rotationY) { 5668de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetRotationY(mNativeRenderNode, rotationY); 567f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 568f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 569f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 570f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the rotation value for this display list around the Y axis, in degrees. 571f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 572f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setRotationY(float) 573f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 574f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getRotationY() { 5758de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetRotationY(mNativeRenderNode); 576f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 577f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 578f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 579f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the scale value for the display list on the X axis. 580f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 581f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param scaleX The scale value of the display list 582f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 583f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setScaleX(float) 584f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getScaleX() 585f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 586f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setScaleX(float scaleX) { 5878de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetScaleX(mNativeRenderNode, scaleX); 588f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 589f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 590f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 591f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the scale value for this display list on the X axis. 592f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 593f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setScaleX(float) 594f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 595f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getScaleX() { 5968de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetScaleX(mNativeRenderNode); 597f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 598f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 599f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 600f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the scale value for the display list on the Y axis. 601f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 602f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param scaleY The scale value of the display list 603f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 604f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setScaleY(float) 605f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getScaleY() 606f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 607f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setScaleY(float scaleY) { 6088de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetScaleY(mNativeRenderNode, scaleY); 609f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 610f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 611f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 612f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the scale value for this display list on the Y axis. 613f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 614f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setScaleY(float) 615f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 616f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getScaleY() { 6178de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetScaleY(mNativeRenderNode); 618f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 619f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 620f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 621f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the pivot value for the display list on the X axis 622f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 623f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param pivotX The pivot value of the display list on the X axis, in pixels 624f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 625f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setPivotX(float) 626f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getPivotX() 627f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 628f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setPivotX(float pivotX) { 6298de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetPivotX(mNativeRenderNode, pivotX); 630f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 631f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 632f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 633f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the pivot value for this display list on the X axis, in pixels. 634f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 635f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setPivotX(float) 636f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 637f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getPivotX() { 6388de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetPivotX(mNativeRenderNode); 639f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 640f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 641f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 642f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the pivot value for the display list on the Y axis 643f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 644f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param pivotY The pivot value of the display list on the Y axis, in pixels 645f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 646f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setPivotY(float) 647f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getPivotY() 648f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 649f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setPivotY(float pivotY) { 6508de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetPivotY(mNativeRenderNode, pivotY); 651f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 652f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 653f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 654f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the pivot value for this display list on the Y axis, in pixels. 655f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 656f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setPivotY(float) 657f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 658f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getPivotY() { 6598de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetPivotY(mNativeRenderNode); 660f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 661f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 66249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik public boolean isPivotExplicitlySet() { 6638de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nIsPivotExplicitlySet(mNativeRenderNode); 66449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 66549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 666f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 667f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the camera distance for the display list. Refer to 668f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * {@link View#setCameraDistance(float)} for more information on how to 669f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * use this property. 670f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 671f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param distance The distance in Z of the camera of the display list 672f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 673f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setCameraDistance(float) 674f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getCameraDistance() 675f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 676f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setCameraDistance(float distance) { 6778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetCameraDistance(mNativeRenderNode, distance); 678f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 679f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 680f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 681f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the distance in Z of the camera of the display list. 682f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 683f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setCameraDistance(float) 684f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 685f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getCameraDistance() { 6868de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetCameraDistance(mNativeRenderNode); 687f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 688f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 689f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 690f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the left position for the display list. 691f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 692f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param left The left position, in pixels, of the display list 693f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 694f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setLeft(int) 695f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getLeft() 696f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 697f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setLeft(int left) { 6988de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetLeft(mNativeRenderNode, left); 699f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 700f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 701f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 702f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the left position for the display list in pixels. 703f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 704f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setLeft(int) 705f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 706f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getLeft() { 7078de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetLeft(mNativeRenderNode); 708f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 709f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 710f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 711f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the top position for the display list. 712f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 713f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param top The top position, in pixels, of the display list 714f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 715f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setTop(int) 716f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getTop() 717f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 718f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setTop(int top) { 7198de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetTop(mNativeRenderNode, top); 720f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 721f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 722f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 723f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the top position for the display list in pixels. 724f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 725f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setTop(int) 726f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 727f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getTop() { 7288de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetTop(mNativeRenderNode); 729f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 730f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 731f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 732f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the right position for the display list. 733f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 734f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param right The right position, in pixels, of the display list 735f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 736f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setRight(int) 737f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getRight() 738f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 739f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setRight(int right) { 7408de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetRight(mNativeRenderNode, right); 741f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 742f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 743f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 744f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the right position for the display list in pixels. 745f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 746f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setRight(int) 747f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 748f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getRight() { 7498de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetRight(mNativeRenderNode); 750f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 751f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 752f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 753f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the bottom position for the display list. 754f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 755f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param bottom The bottom position, in pixels, of the display list 756f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 757f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setBottom(int) 758f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #getBottom() 759f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 760f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setBottom(int bottom) { 7618de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetBottom(mNativeRenderNode, bottom); 762f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 763f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 764f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 765f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Returns the bottom position for the display list in pixels. 766f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 767f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see #setBottom(int) 768f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 769f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public float getBottom() { 7708de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck return nGetBottom(mNativeRenderNode); 771f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 772f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 773f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 774f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Sets the left and top positions for the display list 775f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 776f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param left The left position of the display list, in pixels 777f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param top The top position of the display list, in pixels 778f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param right The right position of the display list, in pixels 779f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param bottom The bottom position of the display list, in pixels 780f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 781f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setLeft(int) 782f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setTop(int) 783f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setRight(int) 784f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#setBottom(int) 785f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 786f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void setLeftTopRightBottom(int left, int top, int right, int bottom) { 7878de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nSetLeftTopRightBottom(mNativeRenderNode, left, top, right, bottom); 788f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 789f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 790f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 791f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Offsets the left and right positions for the display list 792f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 793f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param offset The amount that the left and right positions of the display 794f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * list are offset, in pixels 795f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 796f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#offsetLeftAndRight(int) 797f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 798f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void offsetLeftAndRight(float offset) { 7998de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nOffsetLeftAndRight(mNativeRenderNode, offset); 800f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 801f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 802f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 803f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Offsets the top and bottom values for the display list 804f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 805f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param offset The amount that the top and bottom positions of the display 806f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * list are offset, in pixels 807f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 808f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @see View#offsetTopAndBottom(int) 809f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 810f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void offsetTopAndBottom(float offset) { 8118de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nOffsetTopAndBottom(mNativeRenderNode, offset); 812f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 813f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 814f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /** 815f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * Outputs the display list to the log. This method exists for use by 816f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * tools to output display lists for selected nodes to the log. 817f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * 818f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @hide 819f666ad7046c0b1b255835f75aeb7d1391067df93John Reck */ 820f666ad7046c0b1b255835f75aeb7d1391067df93John Reck public void output() { 8218de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nOutput(mNativeRenderNode); 822f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 823f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 824f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 825f666ad7046c0b1b255835f75aeb7d1391067df93John Reck // Native methods 826f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 827f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 8288de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native long nCreate(String name); 8298de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nDestroyRenderNode(long renderNode); 8308de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetDisplayListData(long renderNode, long newData); 831f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 83249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // Matrix 83349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 8348de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nGetTransformMatrix(long renderNode, long nativeMatrix); 8358de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nGetInverseTransformMatrix(long renderNode, long nativeMatrix); 8368de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native boolean nHasIdentityMatrix(long renderNode); 83749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 838f666ad7046c0b1b255835f75aeb7d1391067df93John Reck // Properties 839f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 8408de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nOffsetTopAndBottom(long renderNode, float offset); 8418de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nOffsetLeftAndRight(long renderNode, float offset); 8428de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetLeftTopRightBottom(long renderNode, int left, int top, 843f666ad7046c0b1b255835f75aeb7d1391067df93John Reck int right, int bottom); 8448de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetBottom(long renderNode, int bottom); 8458de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetRight(long renderNode, int right); 8468de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetTop(long renderNode, int top); 8478de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetLeft(long renderNode, int left); 8488de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetCameraDistance(long renderNode, float distance); 8498de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetPivotY(long renderNode, float pivotY); 8508de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetPivotX(long renderNode, float pivotX); 8518de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetCaching(long renderNode, boolean caching); 8528de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetClipToBounds(long renderNode, boolean clipToBounds); 8538de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetProjectBackwards(long renderNode, boolean shouldProject); 8548de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetProjectionReceiver(long renderNode, boolean shouldRecieve); 8558de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetOutlineRoundRect(long renderNode, int left, int top, 856b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int right, int bottom, float radius); 8578de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetOutlineConvexPath(long renderNode, long nativePath); 8588de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetOutlineEmpty(long renderNode); 8598de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetClipToOutline(long renderNode, boolean clipToOutline); 8608de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetRevealClip(long renderNode, 8618c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik boolean shouldClip, boolean inverseClip, float x, float y, float radius); 8628de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetAlpha(long renderNode, float alpha); 8638de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetHasOverlappingRendering(long renderNode, 864f666ad7046c0b1b255835f75aeb7d1391067df93John Reck boolean hasOverlappingRendering); 865cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik private static native void nSetElevation(long renderNode, float lift); 8668de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetTranslationX(long renderNode, float translationX); 8678de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetTranslationY(long renderNode, float translationY); 8688de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetTranslationZ(long renderNode, float translationZ); 8698de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetRotation(long renderNode, float rotation); 8708de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetRotationX(long renderNode, float rotationX); 8718de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetRotationY(long renderNode, float rotationY); 8728de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetScaleX(long renderNode, float scaleX); 8738de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetScaleY(long renderNode, float scaleY); 8748de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetStaticMatrix(long renderNode, long nativeMatrix); 8758de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nSetAnimationMatrix(long renderNode, long animationMatrix); 8768de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck 8778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native boolean nHasOverlappingRendering(long renderNode); 8788de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetAlpha(long renderNode); 8798de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetLeft(long renderNode); 8808de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetTop(long renderNode); 8818de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetRight(long renderNode); 8828de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetBottom(long renderNode); 8838de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetCameraDistance(long renderNode); 8848de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetScaleX(long renderNode); 8858de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetScaleY(long renderNode); 886cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik private static native float nGetElevation(long renderNode); 8878de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetTranslationX(long renderNode); 8888de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetTranslationY(long renderNode); 8898de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetTranslationZ(long renderNode); 8908de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetRotation(long renderNode); 8918de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetRotationX(long renderNode); 8928de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetRotationY(long renderNode); 8938de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native boolean nIsPivotExplicitlySet(long renderNode); 8948de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetPivotX(long renderNode); 8958de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native float nGetPivotY(long renderNode); 8968de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck private static native void nOutput(long renderNode); 897f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 898f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 899f666ad7046c0b1b255835f75aeb7d1391067df93John Reck // Finalization 900f666ad7046c0b1b255835f75aeb7d1391067df93John Reck /////////////////////////////////////////////////////////////////////////// 901f666ad7046c0b1b255835f75aeb7d1391067df93John Reck 902f666ad7046c0b1b255835f75aeb7d1391067df93John Reck @Override 903f666ad7046c0b1b255835f75aeb7d1391067df93John Reck protected void finalize() throws Throwable { 904f666ad7046c0b1b255835f75aeb7d1391067df93John Reck try { 9058de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck nDestroyRenderNode(mNativeRenderNode); 906f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } finally { 907f666ad7046c0b1b255835f75aeb7d1391067df93John Reck super.finalize(); 908f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 909f666ad7046c0b1b255835f75aeb7d1391067df93John Reck } 910f666ad7046c0b1b255835f75aeb7d1391067df93John Reck} 911