diff --git a/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java b/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java index 6c949d9dcd4eb..d62d4e1992df3 100644 --- a/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java @@ -19,6 +19,8 @@ package android.view; import com.android.layoutlib.bridge.impl.DelegateManager; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; +import android.graphics.Matrix; + /** * Delegate implementing the native methods of {@link RenderNode} *

@@ -36,6 +38,14 @@ public class RenderNode_Delegate { private float mLift; + private float mRotation; + private float mPivotX; + private float mPivotY; + private boolean mPivotExplicitelySet; + private int mLeft; + private int mRight; + private int mTop; + private int mBottom; @SuppressWarnings("UnusedDeclaration") private String mName; @@ -69,4 +79,144 @@ public class RenderNode_Delegate { } return 0f; } + + @LayoutlibDelegate + /*package*/ static boolean nSetRotation(long renderNode, float rotation) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mRotation != rotation) { + delegate.mRotation = rotation; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static float nGetRotation(long renderNode) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null) { + return delegate.mRotation; + } + return 0f; + } + + @LayoutlibDelegate + /*package*/ static void getMatrix(RenderNode renderNode, Matrix outMatrix) { + outMatrix.reset(); + if (renderNode != null) { + outMatrix.preRotate(renderNode.getRotation(), renderNode.getPivotX(), + renderNode.getPivotY()); + } + } + + @LayoutlibDelegate + /*package*/ static boolean nSetLeft(long renderNode, int left) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mLeft != left) { + delegate.mLeft = left; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetTop(long renderNode, int top) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mTop != top) { + delegate.mTop = top; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetRight(long renderNode, int right) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mRight != right) { + delegate.mRight = right; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetBottom(long renderNode, int bottom) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mBottom != bottom) { + delegate.mBottom = bottom; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetLeftTopRightBottom(long renderNode, int left, int top, int right, + int bottom) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && (delegate.mLeft != left || delegate.mTop != top || delegate + .mRight != right || delegate.mBottom != bottom)) { + delegate.mLeft = left; + delegate.mTop = top; + delegate.mRight = right; + delegate.mBottom = bottom; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nIsPivotExplicitlySet(long renderNode) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null) { + return delegate.mPivotExplicitelySet; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetPivotX(long renderNode, float pivotX) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mPivotX != pivotX) { + delegate.mPivotX = pivotX; + delegate.mPivotExplicitelySet = true; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static float nGetPivotX(long renderNode) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null) { + if (delegate.mPivotExplicitelySet) { + return delegate.mPivotX; + } else { + return (delegate.mRight - delegate.mLeft) / 2.0f; + } + } + return 0f; + } + + @LayoutlibDelegate + /*package*/ static boolean nSetPivotY(long renderNode, float pivotY) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null && delegate.mPivotY != pivotY) { + delegate.mPivotY = pivotY; + delegate.mPivotExplicitelySet = true; + return true; + } + return false; + } + + @LayoutlibDelegate + /*package*/ static float nGetPivotY(long renderNode) { + RenderNode_Delegate delegate = sManager.getDelegate(renderNode); + if (delegate != null) { + if (delegate.mPivotExplicitelySet) { + return delegate.mPivotY; + } else { + return (delegate.mBottom - delegate.mTop) / 2.0f; + } + } + return 0f; + } } diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 6e6ad8f11019c..183b729a4a93b 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -192,6 +192,19 @@ public final class CreateInfo implements ICreateInfo { "android.view.RenderNode#nDestroyRenderNode", "android.view.RenderNode#nSetElevation", "android.view.RenderNode#nGetElevation", + "android.view.RenderNode#nSetRotation", + "android.view.RenderNode#nGetRotation", + "android.view.RenderNode#getMatrix", + "android.view.RenderNode#nSetLeft", + "android.view.RenderNode#nSetTop", + "android.view.RenderNode#nSetRight", + "android.view.RenderNode#nSetBottom", + "android.view.RenderNode#nSetLeftTopRightBottom", + "android.view.RenderNode#nSetPivotX", + "android.view.RenderNode#nGetPivotX", + "android.view.RenderNode#nSetPivotY", + "android.view.RenderNode#nGetPivotY", + "android.view.RenderNode#nIsPivotExplicitlySet", "android.view.ViewGroup#drawChild", "android.widget.TimePickerClockDelegate#getAmOrPmKeyCode", "com.android.internal.view.menu.MenuBuilder#createNewMenuItem",