1796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta/*
2796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * Copyright (C) 2014 The Android Open Source Project
3796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta *
4796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * you may not use this file except in compliance with the License.
6796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * You may obtain a copy of the License at
7796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta *
8796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta *
10796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software
11796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * See the License for the specific language governing permissions and
14796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * limitations under the License.
15796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta */
16796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
17796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Guptapackage android.view;
18796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
19796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Guptaimport com.android.layoutlib.bridge.impl.DelegateManager;
20796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Guptaimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
21796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
22c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillardimport android.graphics.Matrix;
23c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
24796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta/**
25796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * Delegate implementing the native methods of {@link RenderNode}
26796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * <p/>
27796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * Through the layoutlib_create tool, some native methods of RenderNode have been replaced by calls
28796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * to methods of the same name in this delegate class.
29796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta *
30796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta * @see DelegateManager
31796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta */
32796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Guptapublic class RenderNode_Delegate {
33796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
34796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
35796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    // ---- delegate manager ----
36796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    private static final DelegateManager<RenderNode_Delegate> sManager =
37796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta            new DelegateManager<RenderNode_Delegate>(RenderNode_Delegate.class);
38796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
39796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
40796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    private float mLift;
41ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private float mTranslationX;
42ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private float mTranslationY;
43ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private float mTranslationZ;
44c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private float mRotation;
45ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private float mScaleX = 1;
46ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private float mScaleY = 1;
47c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private float mPivotX;
48c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private float mPivotY;
49ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    private boolean mPivotExplicitlySet;
50c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private int mLeft;
51c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private int mRight;
52c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private int mTop;
53c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    private int mBottom;
54796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    @SuppressWarnings("UnusedDeclaration")
55796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    private String mName;
56796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
57796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    @LayoutlibDelegate
588f43dfef2bf4581fa97705ffaabf66b7568b9544Diego Perez    /*package*/ static long nCreate(RenderNode thisRenderNode, String name) {
59796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        RenderNode_Delegate renderNodeDelegate = new RenderNode_Delegate();
60796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        renderNodeDelegate.mName = name;
61796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        return sManager.addNewDelegate(renderNodeDelegate);
62796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    }
63796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
64796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    @LayoutlibDelegate
65796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    /*package*/ static void nDestroyRenderNode(long renderNode) {
66796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        sManager.removeJavaReferenceFor(renderNode);
67796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    }
68796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
69796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    @LayoutlibDelegate
70796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    /*package*/ static boolean nSetElevation(long renderNode, float lift) {
71796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
72796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        if (delegate != null && delegate.mLift != lift) {
73796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta            delegate.mLift = lift;
74796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta            return true;
75796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        }
76796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        return false;
77796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    }
78796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta
79796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    @LayoutlibDelegate
80796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    /*package*/ static float nGetElevation(long renderNode) {
81796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
82796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        if (delegate != null) {
83796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta            return delegate.mLift;
84796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        }
85796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta        return 0f;
86796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta    }
87c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
88c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
89ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static boolean nSetTranslationX(long renderNode, float translationX) {
90ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
91ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null && delegate.mTranslationX != translationX) {
92ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mTranslationX = translationX;
93ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return true;
94ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
95ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return false;
96ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
97ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
98ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
99ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static float nGetTranslationX(long renderNode) {
100ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
101ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
102ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return delegate.mTranslationX;
103ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
104ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return 0f;
105ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
106ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
107ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
108ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static boolean nSetTranslationY(long renderNode, float translationY) {
109ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
110ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null && delegate.mTranslationY != translationY) {
111ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mTranslationY = translationY;
112ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return true;
113ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
114ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return false;
115ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
116ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
117ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
118ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static float nGetTranslationY(long renderNode) {
119ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
120ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
121ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return delegate.mTranslationY;
122ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
123ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return 0f;
124ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
125ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
126ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
127ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static boolean nSetTranslationZ(long renderNode, float translationZ) {
128ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
129ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null && delegate.mTranslationZ != translationZ) {
130ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mTranslationZ = translationZ;
131ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return true;
132ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
133ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return false;
134ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
135ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
136ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
137ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static float nGetTranslationZ(long renderNode) {
138ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
139ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
140ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return delegate.mTranslationZ;
141ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
142ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return 0f;
143ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
144ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
145ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
146c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetRotation(long renderNode, float rotation) {
147c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
148c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && delegate.mRotation != rotation) {
149c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mRotation = rotation;
150c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
151c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
152c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
153c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
154c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
155c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
156c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static float nGetRotation(long renderNode) {
157c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
158c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null) {
159c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return delegate.mRotation;
160c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
161c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return 0f;
162c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
163c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
164c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
165c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static void getMatrix(RenderNode renderNode, Matrix outMatrix) {
166c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        outMatrix.reset();
167c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (renderNode != null) {
168ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float rotation = renderNode.getRotation();
169ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float translationX = renderNode.getTranslationX();
170ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float translationY = renderNode.getTranslationY();
171ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float pivotX = renderNode.getPivotX();
172ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float pivotY = renderNode.getPivotY();
173ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float scaleX = renderNode.getScaleX();
174ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            float scaleY = renderNode.getScaleY();
175ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
176ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            outMatrix.setTranslate(translationX, translationY);
177ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            outMatrix.preRotate(rotation, pivotX, pivotY);
178ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            outMatrix.preScale(scaleX, scaleY, pivotX, pivotY);
179c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
180c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
181c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
182c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
183c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetLeft(long renderNode, int left) {
184c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
185c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && delegate.mLeft != left) {
186c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mLeft = left;
187c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
188c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
189c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
190c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
191c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
192c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
193c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetTop(long renderNode, int top) {
194c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
195c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && delegate.mTop != top) {
196c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mTop = top;
197c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
198c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
199c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
200c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
201c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
202c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
203c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetRight(long renderNode, int right) {
204c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
205c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && delegate.mRight != right) {
206c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mRight = right;
207c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
208c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
209c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
210c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
211c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
212c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
213c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetBottom(long renderNode, int bottom) {
214c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
215c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && delegate.mBottom != bottom) {
216c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mBottom = bottom;
217c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
218c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
219c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
220c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
221c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
222c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
223c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetLeftTopRightBottom(long renderNode, int left, int top, int right,
224c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            int bottom) {
225c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
226c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null && (delegate.mLeft != left || delegate.mTop != top || delegate
227c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard                .mRight != right || delegate.mBottom != bottom)) {
228c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mLeft = left;
229c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mTop = top;
230c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mRight = right;
231c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mBottom = bottom;
232c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
233c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
234c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
235c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
236c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
237c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
238c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nIsPivotExplicitlySet(long renderNode) {
239c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
240ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return delegate != null && delegate.mPivotExplicitlySet;
241c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
242c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
243c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
244c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetPivotX(long renderNode, float pivotX) {
245c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
246ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
247c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mPivotX = pivotX;
248ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mPivotExplicitlySet = true;
249c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
250c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
251c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
252c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
253c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
254c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
255c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static float nGetPivotX(long renderNode) {
256c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
257c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null) {
258ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            if (delegate.mPivotExplicitlySet) {
259c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard                return delegate.mPivotX;
260c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            } else {
261c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard                return (delegate.mRight - delegate.mLeft) / 2.0f;
262c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            }
263c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
264c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return 0f;
265c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
266c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
267c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
268c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static boolean nSetPivotY(long renderNode, float pivotY) {
269c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
270ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
271c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            delegate.mPivotY = pivotY;
272ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mPivotExplicitlySet = true;
273c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            return true;
274c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
275c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return false;
276c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
277c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard
278c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    @LayoutlibDelegate
279c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    /*package*/ static float nGetPivotY(long renderNode) {
280c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
281c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        if (delegate != null) {
282ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            if (delegate.mPivotExplicitlySet) {
283c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard                return delegate.mPivotY;
284c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            } else {
285c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard                return (delegate.mBottom - delegate.mTop) / 2.0f;
286c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard            }
287c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        }
288c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard        return 0f;
289c92d70dff716a8b38982b3d6ec05427ad66497faJerome Gaillard    }
290ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
291ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
292ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static boolean nSetScaleX(long renderNode, float scaleX) {
293ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
294ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null && delegate.mScaleX != scaleX) {
295ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mScaleX = scaleX;
296ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return true;
297ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
298ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return false;
299ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
300ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
301ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
302ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static float nGetScaleX(long renderNode) {
303ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
304ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
305ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return delegate.mScaleX;
306ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
307ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return 0f;
308ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
309ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
310ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
311ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static boolean nSetScaleY(long renderNode, float scaleY) {
312ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
313ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null && delegate.mScaleY != scaleY) {
314ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            delegate.mScaleY = scaleY;
315ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return true;
316ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
317ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return false;
318ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
319ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard
320ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    @LayoutlibDelegate
321ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    /*package*/ static float nGetScaleY(long renderNode) {
322ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
323ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        if (delegate != null) {
324ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard            return delegate.mScaleY;
325ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        }
326ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard        return 0f;
327ded4d14e3348ebb0cdfa3498a53d3fbfc58b2043Jerome Gaillard    }
328796e9b7f9910f2ba8133cdb6f137107585b2e5faDeepanshu Gupta}
329