summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/RenderNode.java5
-rw-r--r--core/java/android/view/View.java15
-rw-r--r--core/jni/android_view_RenderNode.cpp7
3 files changed, 23 insertions, 4 deletions
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
index 0cfde94..b2839cb 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -387,6 +387,10 @@ public class RenderNode {
nSetClipToOutline(mNativeRenderNode, clipToOutline);
}
+ public boolean getClipToOutline() {
+ return nGetClipToOutline(mNativeRenderNode);
+ }
+
/**
* Controls the RenderNode's circular reveal clip.
*/
@@ -919,6 +923,7 @@ public class RenderNode {
private static native void nSetAnimationMatrix(long renderNode, long animationMatrix);
private static native boolean nHasOverlappingRendering(long renderNode);
+ private static native boolean nGetClipToOutline(long renderNode);
private static native float nGetAlpha(long renderNode);
private static native float nGetLeft(long renderNode);
private static native float nGetTop(long renderNode);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index dc9a340..5141877 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10706,9 +10706,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mRenderNode.setOutline(mOutline);
}
- // TODO: remove
- public final boolean getClipToOutline() { return false; }
- public void setClipToOutline(boolean clipToOutline) {}
+ public final boolean getClipToOutline() {
+ return mRenderNode.getClipToOutline();
+ }
+
+ public void setClipToOutline(boolean clipToOutline) {
+ // TODO: add a fast invalidation here
+ if (getClipToOutline() != clipToOutline) {
+ mRenderNode.setClipToOutline(clipToOutline);
+ }
+ }
private void queryOutlineFromBackgroundIfUndefined() {
if ((mPrivateFlags3 & PFLAG3_OUTLINE_DEFINED) == 0) {
@@ -10717,7 +10724,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mOutline = new Outline();
} else {
//invalidate outline, to ensure background calculates it
- mOutline.set(null);
+ mOutline.reset();
}
if (mBackground.getOutline(mOutline)) {
if (!mOutline.isValid()) {
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
index b0defdb..867c1b1 100644
--- a/core/jni/android_view_RenderNode.cpp
+++ b/core/jni/android_view_RenderNode.cpp
@@ -317,6 +317,12 @@ static jboolean android_view_RenderNode_hasOverlappingRendering(JNIEnv* env,
return renderNode->stagingProperties().hasOverlappingRendering();
}
+static jboolean android_view_RenderNode_getClipToOutline(JNIEnv* env,
+ jobject clazz, jlong renderNodePtr) {
+ RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+ return renderNode->stagingProperties().getOutline().getShouldClip();
+}
+
static jfloat android_view_RenderNode_getAlpha(JNIEnv* env,
jobject clazz, jlong renderNodePtr) {
RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
@@ -537,6 +543,7 @@ static JNINativeMethod gMethods[] = {
{ "nOffsetTopAndBottom", "(JF)V", (void*) android_view_RenderNode_offsetTopAndBottom },
{ "nHasOverlappingRendering", "(J)Z", (void*) android_view_RenderNode_hasOverlappingRendering },
+ { "nGetClipToOutline", "(J)Z", (void*) android_view_RenderNode_getClipToOutline },
{ "nGetAlpha", "(J)F", (void*) android_view_RenderNode_getAlpha },
{ "nGetLeft", "(J)F", (void*) android_view_RenderNode_getLeft },
{ "nGetTop", "(J)F", (void*) android_view_RenderNode_getTop },