diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/RenderNode.java | 5 | ||||
-rw-r--r-- | core/java/android/view/View.java | 15 | ||||
-rw-r--r-- | core/jni/android_view_RenderNode.cpp | 7 |
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 }, |