Merge "Add isPivotSet/resetPivot" into pi-dev
diff --git a/api/current.txt b/api/current.txt
index dc3ab4f..323947c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -47548,6 +47548,7 @@
method public boolean isOpaque();
method protected boolean isPaddingOffsetRequired();
method public boolean isPaddingRelative();
+ method public boolean isPivotSet();
method public boolean isPressed();
method public boolean isSaveEnabled();
method public boolean isSaveFromParentEnabled();
@@ -47666,6 +47667,7 @@
method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean);
method public final void requestUnbufferedDispatch(android.view.MotionEvent);
method public final <T extends android.view.View> T requireViewById(int);
+ method public void resetPivot();
method public static int resolveSize(int, int);
method public static int resolveSizeAndState(int, int, int);
method public boolean restoreDefaultFocus();
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
index ce7e8f3..7c25fac 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -687,6 +687,11 @@
return nIsPivotExplicitlySet(mNativeRenderNode);
}
+ /** lint */
+ public boolean resetPivot() {
+ return nResetPivot(mNativeRenderNode);
+ }
+
/**
* Sets the camera distance for the display list. Refer to
* {@link View#setCameraDistance(float)} for more information on how to
@@ -903,6 +908,8 @@
@CriticalNative
private static native boolean nSetPivotX(long renderNode, float pivotX);
@CriticalNative
+ private static native boolean nResetPivot(long renderNode);
+ @CriticalNative
private static native boolean nSetLayerType(long renderNode, int layerType);
@CriticalNative
private static native boolean nSetLayerPaint(long renderNode, long paint);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index afff19b..18c3d76 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14843,6 +14843,28 @@
}
/**
+ * Returns whether or not a pivot has been set by a call to {@link #setPivotX(float)} or
+ * {@link #setPivotY(float)}. If no pivot has been set then the pivot will be the center
+ * of the view.
+ *
+ * @return True if a pivot has been set, false if the default pivot is being used
+ */
+ public boolean isPivotSet() {
+ return mRenderNode.isPivotExplicitlySet();
+ }
+
+ /**
+ * Clears any pivot previously set by a call to {@link #setPivotX(float)} or
+ * {@link #setPivotY(float)}. After calling this {@link #isPivotSet()} will be false
+ * and the pivot used for rotation will return to default of being centered on the view.
+ */
+ public void resetPivot() {
+ if (mRenderNode.resetPivot()) {
+ invalidateViewProperty(false, false);
+ }
+ }
+
+ /**
* The opacity of the view. This is a value from 0 to 1, where 0 means the view is
* completely transparent and 1 means the view is completely opaque.
*
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
index 8770d78..37ea810 100644
--- a/core/jni/android_view_RenderNode.cpp
+++ b/core/jni/android_view_RenderNode.cpp
@@ -266,6 +266,10 @@
return SET_AND_DIRTY(setPivotY, py, RenderNode::GENERIC);
}
+static jboolean android_view_RenderNode_resetPivot(jlong renderNodePtr) {
+ return SET_AND_DIRTY(resetPivot, /* void */, RenderNode::GENERIC);
+}
+
static jboolean android_view_RenderNode_setCameraDistance(jlong renderNodePtr, float distance) {
return SET_AND_DIRTY(setCameraDistance, distance, RenderNode::GENERIC);
}
@@ -613,6 +617,7 @@
{ "nSetScaleY", "(JF)Z", (void*) android_view_RenderNode_setScaleY },
{ "nSetPivotX", "(JF)Z", (void*) android_view_RenderNode_setPivotX },
{ "nSetPivotY", "(JF)Z", (void*) android_view_RenderNode_setPivotY },
+ { "nResetPivot", "(J)Z", (void*) android_view_RenderNode_resetPivot },
{ "nSetCameraDistance", "(JF)Z", (void*) android_view_RenderNode_setCameraDistance },
{ "nSetLeft", "(JI)Z", (void*) android_view_RenderNode_setLeft },
{ "nSetTop", "(JI)Z", (void*) android_view_RenderNode_setTop },
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 0742de9..6470d4c 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -328,6 +328,10 @@
bool isPivotExplicitlySet() const { return mPrimitiveFields.mPivotExplicitlySet; }
+ bool resetPivot() {
+ return RP_SET_AND_DIRTY(mPrimitiveFields.mPivotExplicitlySet, false);
+ }
+
bool setCameraDistance(float distance) {
if (distance != getCameraDistance()) {
mPrimitiveFields.mMatrixOrPivotDirty = true;