Loading core/java/android/view/RenderNode.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -353,6 +353,11 @@ public class RenderNode { return nHasShadow(mNativeRenderNode); return nHasShadow(mNativeRenderNode); } } /** setShadowColor */ public boolean setShadowColor(int color) { return nSetShadowColor(mNativeRenderNode, color); } /** /** * Enables or disables clipping to the outline. * Enables or disables clipping to the outline. * * Loading Loading @@ -910,6 +915,8 @@ public class RenderNode { @CriticalNative @CriticalNative private static native boolean nHasShadow(long renderNode); private static native boolean nHasShadow(long renderNode); @CriticalNative @CriticalNative private static native boolean nSetShadowColor(long renderNode, int color); @CriticalNative private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline); private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline); @CriticalNative @CriticalNative private static native boolean nSetRevealClip(long renderNode, private static native boolean nSetRevealClip(long renderNode, Loading core/java/android/view/View.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -15182,6 +15182,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return mRenderNode.hasShadow(); return mRenderNode.hasShadow(); } } /** * @hide */ public void setShadowColor(@ColorInt int color) { if (mRenderNode.setShadowColor(color)) { invalidateViewProperty(true, true); } } /** @hide */ /** @hide */ public void setRevealClip(boolean shouldClip, float x, float y, float radius) { public void setRevealClip(boolean shouldClip, float x, float y, float radius) { core/jni/android_view_RenderNode.cpp +5 −0 Original line number Original line Diff line number Diff line Loading @@ -174,6 +174,10 @@ static jboolean android_view_RenderNode_hasShadow(jlong renderNodePtr) { return renderNode->stagingProperties().hasShadow(); return renderNode->stagingProperties().hasShadow(); } } static jboolean android_view_RenderNode_setShadowColor(jlong renderNodePtr, jint shadowColor) { return SET_AND_DIRTY(setShadowColor, static_cast<SkColor>(shadowColor), RenderNode::GENERIC); } static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr, static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr, jboolean clipToOutline) { jboolean clipToOutline) { RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); Loading Loading @@ -571,6 +575,7 @@ static const JNINativeMethod gMethods[] = { { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, { "nHasShadow", "(J)Z", (void*) android_view_RenderNode_hasShadow }, { "nHasShadow", "(J)Z", (void*) android_view_RenderNode_hasShadow }, { "nSetShadowColor", "(JI)Z", (void*) android_view_RenderNode_setShadowColor }, { "nSetClipToOutline", "(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, { "nSetClipToOutline", "(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, Loading libs/hwui/RenderProperties.h +10 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <SkBlendMode.h> #include <SkBlendMode.h> #include <SkCamera.h> #include <SkCamera.h> #include <SkColor.h> #include <SkMatrix.h> #include <SkMatrix.h> #include <SkRegion.h> #include <SkRegion.h> Loading Loading @@ -506,6 +507,14 @@ public: getOutline().getAlpha() != 0.0f; getOutline().getAlpha() != 0.0f; } } SkColor getShadowColor() const { return mPrimitiveFields.mShadowColor; } bool setShadowColor(SkColor shadowColor) { return RP_SET(mPrimitiveFields.mShadowColor, shadowColor); } bool fitsOnLayer() const { bool fitsOnLayer() const { const DeviceInfo* deviceInfo = DeviceInfo::get(); const DeviceInfo* deviceInfo = DeviceInfo::get(); return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() && return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() && Loading @@ -529,6 +538,7 @@ private: int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mWidth = 0, mHeight = 0; int mWidth = 0, mHeight = 0; int mClippingFlags = CLIP_TO_BOUNDS; int mClippingFlags = CLIP_TO_BOUNDS; SkColor mShadowColor = SK_ColorBLACK; float mAlpha = 1; float mAlpha = 1; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mElevation = 0; float mElevation = 0; Loading libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -189,7 +189,7 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable* } } SkShadowUtils::DrawShadow( SkShadowUtils::DrawShadow( canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), ambientAlpha, spotAlpha, SK_ColorBLACK, ambientAlpha, spotAlpha, casterProperties.getShadowColor(), casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); } } Loading Loading
core/java/android/view/RenderNode.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -353,6 +353,11 @@ public class RenderNode { return nHasShadow(mNativeRenderNode); return nHasShadow(mNativeRenderNode); } } /** setShadowColor */ public boolean setShadowColor(int color) { return nSetShadowColor(mNativeRenderNode, color); } /** /** * Enables or disables clipping to the outline. * Enables or disables clipping to the outline. * * Loading Loading @@ -910,6 +915,8 @@ public class RenderNode { @CriticalNative @CriticalNative private static native boolean nHasShadow(long renderNode); private static native boolean nHasShadow(long renderNode); @CriticalNative @CriticalNative private static native boolean nSetShadowColor(long renderNode, int color); @CriticalNative private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline); private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline); @CriticalNative @CriticalNative private static native boolean nSetRevealClip(long renderNode, private static native boolean nSetRevealClip(long renderNode, Loading
core/java/android/view/View.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -15182,6 +15182,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return mRenderNode.hasShadow(); return mRenderNode.hasShadow(); } } /** * @hide */ public void setShadowColor(@ColorInt int color) { if (mRenderNode.setShadowColor(color)) { invalidateViewProperty(true, true); } } /** @hide */ /** @hide */ public void setRevealClip(boolean shouldClip, float x, float y, float radius) { public void setRevealClip(boolean shouldClip, float x, float y, float radius) {
core/jni/android_view_RenderNode.cpp +5 −0 Original line number Original line Diff line number Diff line Loading @@ -174,6 +174,10 @@ static jboolean android_view_RenderNode_hasShadow(jlong renderNodePtr) { return renderNode->stagingProperties().hasShadow(); return renderNode->stagingProperties().hasShadow(); } } static jboolean android_view_RenderNode_setShadowColor(jlong renderNodePtr, jint shadowColor) { return SET_AND_DIRTY(setShadowColor, static_cast<SkColor>(shadowColor), RenderNode::GENERIC); } static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr, static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr, jboolean clipToOutline) { jboolean clipToOutline) { RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); Loading Loading @@ -571,6 +575,7 @@ static const JNINativeMethod gMethods[] = { { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, { "nSetOutlineEmpty", "(J)Z", (void*) android_view_RenderNode_setOutlineEmpty }, { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, { "nSetOutlineNone", "(J)Z", (void*) android_view_RenderNode_setOutlineNone }, { "nHasShadow", "(J)Z", (void*) android_view_RenderNode_hasShadow }, { "nHasShadow", "(J)Z", (void*) android_view_RenderNode_hasShadow }, { "nSetShadowColor", "(JI)Z", (void*) android_view_RenderNode_setShadowColor }, { "nSetClipToOutline", "(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, { "nSetClipToOutline", "(JZ)Z", (void*) android_view_RenderNode_setClipToOutline }, { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, { "nSetRevealClip", "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip }, Loading
libs/hwui/RenderProperties.h +10 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <SkBlendMode.h> #include <SkBlendMode.h> #include <SkCamera.h> #include <SkCamera.h> #include <SkColor.h> #include <SkMatrix.h> #include <SkMatrix.h> #include <SkRegion.h> #include <SkRegion.h> Loading Loading @@ -506,6 +507,14 @@ public: getOutline().getAlpha() != 0.0f; getOutline().getAlpha() != 0.0f; } } SkColor getShadowColor() const { return mPrimitiveFields.mShadowColor; } bool setShadowColor(SkColor shadowColor) { return RP_SET(mPrimitiveFields.mShadowColor, shadowColor); } bool fitsOnLayer() const { bool fitsOnLayer() const { const DeviceInfo* deviceInfo = DeviceInfo::get(); const DeviceInfo* deviceInfo = DeviceInfo::get(); return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() && return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() && Loading @@ -529,6 +538,7 @@ private: int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mWidth = 0, mHeight = 0; int mWidth = 0, mHeight = 0; int mClippingFlags = CLIP_TO_BOUNDS; int mClippingFlags = CLIP_TO_BOUNDS; SkColor mShadowColor = SK_ColorBLACK; float mAlpha = 1; float mAlpha = 1; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mElevation = 0; float mElevation = 0; Loading
libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -189,7 +189,7 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable* } } SkShadowUtils::DrawShadow( SkShadowUtils::DrawShadow( canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), ambientAlpha, spotAlpha, SK_ColorBLACK, ambientAlpha, spotAlpha, casterProperties.getShadowColor(), casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); } } Loading