blob: d62d4e1992df3dc096fa853f46b10b5c09a18454 [file] [log] [blame]
Deepanshu Gupta3d65b922014-11-04 18:19:55 -08001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.view;
18
19import com.android.layoutlib.bridge.impl.DelegateManager;
20import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
21
Jerome Gaillardaf095382016-01-19 13:11:08 +000022import android.graphics.Matrix;
23
Deepanshu Gupta3d65b922014-11-04 18:19:55 -080024/**
25 * Delegate implementing the native methods of {@link RenderNode}
26 * <p/>
27 * Through the layoutlib_create tool, some native methods of RenderNode have been replaced by calls
28 * to methods of the same name in this delegate class.
29 *
30 * @see DelegateManager
31 */
32public class RenderNode_Delegate {
33
34
35 // ---- delegate manager ----
36 private static final DelegateManager<RenderNode_Delegate> sManager =
37 new DelegateManager<RenderNode_Delegate>(RenderNode_Delegate.class);
38
39
40 private float mLift;
Jerome Gaillardaf095382016-01-19 13:11:08 +000041 private float mRotation;
42 private float mPivotX;
43 private float mPivotY;
44 private boolean mPivotExplicitelySet;
45 private int mLeft;
46 private int mRight;
47 private int mTop;
48 private int mBottom;
Deepanshu Gupta3d65b922014-11-04 18:19:55 -080049 @SuppressWarnings("UnusedDeclaration")
50 private String mName;
51
52 @LayoutlibDelegate
53 /*package*/ static long nCreate(String name) {
54 RenderNode_Delegate renderNodeDelegate = new RenderNode_Delegate();
55 renderNodeDelegate.mName = name;
56 return sManager.addNewDelegate(renderNodeDelegate);
57 }
58
59 @LayoutlibDelegate
60 /*package*/ static void nDestroyRenderNode(long renderNode) {
61 sManager.removeJavaReferenceFor(renderNode);
62 }
63
64 @LayoutlibDelegate
65 /*package*/ static boolean nSetElevation(long renderNode, float lift) {
66 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
67 if (delegate != null && delegate.mLift != lift) {
68 delegate.mLift = lift;
69 return true;
70 }
71 return false;
72 }
73
74 @LayoutlibDelegate
75 /*package*/ static float nGetElevation(long renderNode) {
76 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
77 if (delegate != null) {
78 return delegate.mLift;
79 }
80 return 0f;
81 }
Jerome Gaillardaf095382016-01-19 13:11:08 +000082
83 @LayoutlibDelegate
84 /*package*/ static boolean nSetRotation(long renderNode, float rotation) {
85 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
86 if (delegate != null && delegate.mRotation != rotation) {
87 delegate.mRotation = rotation;
88 return true;
89 }
90 return false;
91 }
92
93 @LayoutlibDelegate
94 /*package*/ static float nGetRotation(long renderNode) {
95 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
96 if (delegate != null) {
97 return delegate.mRotation;
98 }
99 return 0f;
100 }
101
102 @LayoutlibDelegate
103 /*package*/ static void getMatrix(RenderNode renderNode, Matrix outMatrix) {
104 outMatrix.reset();
105 if (renderNode != null) {
106 outMatrix.preRotate(renderNode.getRotation(), renderNode.getPivotX(),
107 renderNode.getPivotY());
108 }
109 }
110
111 @LayoutlibDelegate
112 /*package*/ static boolean nSetLeft(long renderNode, int left) {
113 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
114 if (delegate != null && delegate.mLeft != left) {
115 delegate.mLeft = left;
116 return true;
117 }
118 return false;
119 }
120
121 @LayoutlibDelegate
122 /*package*/ static boolean nSetTop(long renderNode, int top) {
123 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
124 if (delegate != null && delegate.mTop != top) {
125 delegate.mTop = top;
126 return true;
127 }
128 return false;
129 }
130
131 @LayoutlibDelegate
132 /*package*/ static boolean nSetRight(long renderNode, int right) {
133 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
134 if (delegate != null && delegate.mRight != right) {
135 delegate.mRight = right;
136 return true;
137 }
138 return false;
139 }
140
141 @LayoutlibDelegate
142 /*package*/ static boolean nSetBottom(long renderNode, int bottom) {
143 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
144 if (delegate != null && delegate.mBottom != bottom) {
145 delegate.mBottom = bottom;
146 return true;
147 }
148 return false;
149 }
150
151 @LayoutlibDelegate
152 /*package*/ static boolean nSetLeftTopRightBottom(long renderNode, int left, int top, int right,
153 int bottom) {
154 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
155 if (delegate != null && (delegate.mLeft != left || delegate.mTop != top || delegate
156 .mRight != right || delegate.mBottom != bottom)) {
157 delegate.mLeft = left;
158 delegate.mTop = top;
159 delegate.mRight = right;
160 delegate.mBottom = bottom;
161 return true;
162 }
163 return false;
164 }
165
166 @LayoutlibDelegate
167 /*package*/ static boolean nIsPivotExplicitlySet(long renderNode) {
168 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
169 if (delegate != null) {
170 return delegate.mPivotExplicitelySet;
171 }
172 return false;
173 }
174
175 @LayoutlibDelegate
176 /*package*/ static boolean nSetPivotX(long renderNode, float pivotX) {
177 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
178 if (delegate != null && delegate.mPivotX != pivotX) {
179 delegate.mPivotX = pivotX;
180 delegate.mPivotExplicitelySet = true;
181 return true;
182 }
183 return false;
184 }
185
186 @LayoutlibDelegate
187 /*package*/ static float nGetPivotX(long renderNode) {
188 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
189 if (delegate != null) {
190 if (delegate.mPivotExplicitelySet) {
191 return delegate.mPivotX;
192 } else {
193 return (delegate.mRight - delegate.mLeft) / 2.0f;
194 }
195 }
196 return 0f;
197 }
198
199 @LayoutlibDelegate
200 /*package*/ static boolean nSetPivotY(long renderNode, float pivotY) {
201 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
202 if (delegate != null && delegate.mPivotY != pivotY) {
203 delegate.mPivotY = pivotY;
204 delegate.mPivotExplicitelySet = true;
205 return true;
206 }
207 return false;
208 }
209
210 @LayoutlibDelegate
211 /*package*/ static float nGetPivotY(long renderNode) {
212 RenderNode_Delegate delegate = sManager.getDelegate(renderNode);
213 if (delegate != null) {
214 if (delegate.mPivotExplicitelySet) {
215 return delegate.mPivotY;
216 } else {
217 return (delegate.mBottom - delegate.mTop) / 2.0f;
218 }
219 }
220 return 0f;
221 }
Deepanshu Gupta3d65b922014-11-04 18:19:55 -0800222}