13af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi/* 23af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * Copyright (C) 2014 The Android Open Source Project 33af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * 43af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 53af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * you may not use this file except in compliance with the License. 63af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * You may obtain a copy of the License at 73af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * 83af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 93af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * 103af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 113af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 123af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * See the License for the specific language governing permissions and 143af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * limitations under the License. 153af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi */ 163af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 173af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivipackage android.view; 183af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 193af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Triviimport com.android.layoutlib.bridge.impl.DelegateManager; 203af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Triviimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 213af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 223af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Triviimport android.graphics.Matrix; 233af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 243af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Triviimport libcore.util.NativeAllocationRegistry_Delegate; 253af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 263af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi/** 273af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi * Delegate implementing the native methods of {@link RenderNode} 28712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi * <p/> 29712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi * Through the layoutlib_create tool, some native methods of RenderNode have been replaced by calls 30712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi * to methods of the same name in this delegate class. 31712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi * 32712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi * @see DelegateManager 33712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi */ 34712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivipublic class RenderNode_Delegate { 35712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi 36712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi 37712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi // ---- delegate manager ---- 38b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private static final DelegateManager<RenderNode_Delegate> sManager = 39b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi new DelegateManager<RenderNode_Delegate>(RenderNode_Delegate.class); 40b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private static long sFinalizer = -1; 41e214a8c49938e7356943b59db53474e5fc3ae07cJean-Michel Trivi 42b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mLift; 43b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mTranslationX; 44b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mTranslationY; 45b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mTranslationZ; 46b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mRotation; 47b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mScaleX = 1; 48b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mScaleY = 1; 49b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mPivotX; 50b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private float mPivotY; 51b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private boolean mPivotExplicitlySet; 52b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private int mLeft; 53b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private int mRight; 54b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private int mTop; 55b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private int mBottom; 56b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @SuppressWarnings("UnusedDeclaration") 57b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi private String mName; 58b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 59b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 60b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static long nCreate(String name) { 61b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate renderNodeDelegate = new RenderNode_Delegate(); 62b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi renderNodeDelegate.mName = name; 63b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return sManager.addNewDelegate(renderNodeDelegate); 64e214a8c49938e7356943b59db53474e5fc3ae07cJean-Michel Trivi } 65b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 66b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 67b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static long nGetNativeFinalizer() { 68b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi synchronized (RenderNode_Delegate.class) { 69b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (sFinalizer == -1) { 70b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi sFinalizer = NativeAllocationRegistry_Delegate.createFinalizer(sManager::removeJavaReferenceFor); 71b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 72b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 73b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return sFinalizer; 74b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 75b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 76b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 77b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static boolean nSetElevation(long renderNode, float lift) { 78b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 79b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null && delegate.mLift != lift) { 80b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi delegate.mLift = lift; 81b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return true; 82b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 83b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return false; 84b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 85b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 86b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 87b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static float nGetElevation(long renderNode) { 88b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 89b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null) { 90e214a8c49938e7356943b59db53474e5fc3ae07cJean-Michel Trivi return delegate.mLift; 91b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 92b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return 0f; 93b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 94b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 95b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 96b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static boolean nSetTranslationX(long renderNode, float translationX) { 97b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 98b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null && delegate.mTranslationX != translationX) { 99b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi delegate.mTranslationX = translationX; 100b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return true; 101b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 102b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return false; 103b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 104b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 105b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 106b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static float nGetTranslationX(long renderNode) { 107b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 108b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null) { 109b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return delegate.mTranslationX; 110b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 111b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return 0f; 1123af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 1133b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1143b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1153b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static boolean nSetTranslationY(long renderNode, float translationY) { 1163b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1173b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate != null && delegate.mTranslationY != translationY) { 1183b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi delegate.mTranslationY = translationY; 1193b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return true; 1203b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1213b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return false; 1223b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1233b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1243b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1253b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static float nGetTranslationY(long renderNode) { 1263b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1273b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate != null) { 1283b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return delegate.mTranslationY; 1293b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1303b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return 0f; 1313b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1323b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1333b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1343b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static boolean nSetTranslationZ(long renderNode, float translationZ) { 1353b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1363b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate != null && delegate.mTranslationZ != translationZ) { 1373b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi delegate.mTranslationZ = translationZ; 1383b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return true; 1393b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1403b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return false; 1413b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1423b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1433b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1443b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static float nGetTranslationZ(long renderNode) { 1453b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1463b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate != null) { 1473b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return delegate.mTranslationZ; 1483b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1493b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return 0f; 1503b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1513b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1523b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1533b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static boolean nSetRotation(long renderNode, float rotation) { 1543b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1553b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate != null && delegate.mRotation != rotation) { 1563b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi delegate.mRotation = rotation; 1573b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return true; 1583b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1593b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi return false; 1603b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 1613b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 1623b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 1633b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static float nGetRotation(long renderNode) { 1643af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1653af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null) { 1663af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return delegate.mRotation; 1673af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 1683af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return 0f; 1693af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 1703af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 1713af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 1723af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static void getMatrix(RenderNode renderNode, Matrix outMatrix) { 173712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi outMatrix.reset(); 1743af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (renderNode != null) { 175712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float rotation = renderNode.getRotation(); 176712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float translationX = renderNode.getTranslationX(); 177712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float translationY = renderNode.getTranslationY(); 178712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float pivotX = renderNode.getPivotX(); 179712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float pivotY = renderNode.getPivotY(); 180712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float scaleX = renderNode.getScaleX(); 181712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi float scaleY = renderNode.getScaleY(); 182712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi 183712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi outMatrix.setTranslate(translationX, translationY); 184712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi outMatrix.preRotate(rotation, pivotX, pivotY); 185712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi outMatrix.preScale(scaleX, scaleY, pivotX, pivotY); 186712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi } 187712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi } 188712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi 1893af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 1903af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetLeft(long renderNode, int left) { 1913af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 1923af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null && delegate.mLeft != left) { 1933af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mLeft = left; 1943af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 195712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi } 1963af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 1973af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 1983af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 1993af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2003af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetTop(long renderNode, int top) { 2013af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 202712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi if (delegate != null && delegate.mTop != top) { 2033af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mTop = top; 2043af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2053af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2063af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2073af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 208712b490060e4164fbe47986be1d2584d1610d8ddJean-Michel Trivi 2093af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2103af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetRight(long renderNode, int right) { 2113af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2123af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null && delegate.mRight != right) { 2133af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mRight = right; 2143af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2153af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2163af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2173af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2183af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2193af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2203af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetBottom(long renderNode, int bottom) { 2213af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2223af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null && delegate.mBottom != bottom) { 2233af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mBottom = bottom; 2243af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2253af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2263af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2273af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2283af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2293af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2303af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetLeftTopRightBottom(long renderNode, int left, int top, int right, 2313af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi int bottom) { 2323af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2333af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null && (delegate.mLeft != left || delegate.mTop != top || delegate 2343af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi .mRight != right || delegate.mBottom != bottom)) { 2353af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mLeft = left; 2363af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mTop = top; 2373af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mRight = right; 2383af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mBottom = bottom; 2393af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2403af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2413af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2423af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2433af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2443af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2453af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nIsPivotExplicitlySet(long renderNode) { 2463af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2473af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return delegate != null && delegate.mPivotExplicitlySet; 2483af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2493af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2503af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2513af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetPivotX(long renderNode, float pivotX) { 2523af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2533af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null) { 2543af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mPivotX = pivotX; 2553af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mPivotExplicitlySet = true; 2563af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2573af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2583af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2593af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2603af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2613af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2623af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static float nGetPivotX(long renderNode) { 2633af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2643af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null) { 2653af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate.mPivotExplicitlySet) { 2663af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return delegate.mPivotX; 2673af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } else { 2683af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return (delegate.mRight - delegate.mLeft) / 2.0f; 2693af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2703af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2713af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return 0f; 2723af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2733af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2743af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2753af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetPivotY(long renderNode, float pivotY) { 2763af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2773af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null) { 2783af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mPivotY = pivotY; 2793af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mPivotExplicitlySet = true; 2803af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 2813af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2823af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 2833af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2843b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi 2853b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi @LayoutlibDelegate 2863b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi /*package*/ static float nGetPivotY(long renderNode) { 2873b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 2883af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null) { 2893b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi if (delegate.mPivotExplicitlySet) { 2903af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return delegate.mPivotY; 2913af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } else { 2923af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return (delegate.mBottom - delegate.mTop) / 2.0f; 2933b142e50f4ae068f50f8e3d277e0f19910c67001Jean-Michel Trivi } 2943af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2953af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return 0f; 2963af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 2973af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi 2983af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi @LayoutlibDelegate 2993af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi /*package*/ static boolean nSetScaleX(long renderNode, float scaleX) { 3003af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 3013af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi if (delegate != null && delegate.mScaleX != scaleX) { 3023af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi delegate.mScaleX = scaleX; 3033af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return true; 3043af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 3053af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi return false; 3063af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi } 307b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 308b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 309b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static float nGetScaleX(long renderNode) { 310b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 311b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null) { 312b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return delegate.mScaleX; 313b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 314b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return 0f; 315b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 316b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 317b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 318b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static boolean nSetScaleY(long renderNode, float scaleY) { 319b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 320b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null && delegate.mScaleY != scaleY) { 321b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi delegate.mScaleY = scaleY; 322b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return true; 323b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 324b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return false; 325b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 326b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 327b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi @LayoutlibDelegate 328b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi /*package*/ static float nGetScaleY(long renderNode) { 329b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi RenderNode_Delegate delegate = sManager.getDelegate(renderNode); 330b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi if (delegate != null) { 331b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return delegate.mScaleY; 332b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 333b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi return 0f; 334b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 335b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi} 336b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi