diff --git a/libs/hwui/Outline.h b/libs/hwui/Outline.h index 5e9b21312d798..c98932cf095eb 100644 --- a/libs/hwui/Outline.h +++ b/libs/hwui/Outline.h @@ -19,6 +19,7 @@ #include #include "Rect.h" +#include "utils/MathUtils.h" namespace android { namespace uirenderer { @@ -85,6 +86,11 @@ public: return mShouldClip && (mType == kOutlineType_RoundRect); } + bool willRoundRectClip() const { + // only round rect outlines can be used for clipping + return willClip() && MathUtils::isPositive(mRadius); + } + bool getAsRoundRect(Rect* outRect, float* outRadius) const { if (mType == kOutlineType_RoundRect) { outRect->set(mBounds); diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h index 81cf2dfac9b6e..11abd701b9d82 100644 --- a/libs/hwui/RenderProperties.h +++ b/libs/hwui/RenderProperties.h @@ -169,7 +169,7 @@ public: bool functorsNeedLayer = ancestorDictatesFunctorsNeedLayer // Round rect clipping forces layer for functors - || CC_UNLIKELY(getOutline().willClip()) + || CC_UNLIKELY(getOutline().willRoundRectClip()) || CC_UNLIKELY(getRevealClip().willClip()) // Complex matrices forces layer, due to stencil clipping