diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt index f083c1cfd16970..c5fb3ed26dd1f9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt @@ -394,8 +394,9 @@ internal object FilterHelper { internal fun sigmaToRadius(sigma: Float): Float { // Android takes blur amount as a radius while web takes a sigma. This value // is used under the hood to convert between them on Android - // https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/jni/RenderEffect.cpp + // https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/utils/Blur.cpp;l=34 val sigmaToRadiusRatio = 0.57_735f - return (PixelUtil.toPixelFromDIP(sigma) - 0.5f) / sigmaToRadiusRatio + val pxSigma = PixelUtil.toPixelFromDIP(sigma) + return if (pxSigma > 0.5f) (pxSigma - 0.5f) / sigmaToRadiusRatio else 0f } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt index a16eaa23d50652..b0de93e69cd61c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt @@ -55,11 +55,9 @@ internal class InsetBoxShadowDrawable( private val shadowPaint = Paint().apply { color = shadowColor - if (blurRadius > 0) { - maskFilter = - BlurMaskFilter( - FilterHelper.sigmaToRadius(blurRadius * BLUR_RADIUS_SIGMA_SCALE), - BlurMaskFilter.Blur.NORMAL) + val convertedBlurRadius = FilterHelper.sigmaToRadius(blurRadius * BLUR_RADIUS_SIGMA_SCALE) + if (convertedBlurRadius > 0) { + maskFilter = BlurMaskFilter(convertedBlurRadius, BlurMaskFilter.Blur.NORMAL) } } @@ -119,7 +117,7 @@ internal class InsetBoxShadowDrawable( // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/paint/box_painter_base.cc;l=338;drc=0a301506035e13015ea5c8dd39164d0d5954fa60 val blurExtent = FilterHelper.sigmaToRadius(blurRadius) val outerRect = - RectF(innerRect).apply { + RectF(paddingBoxRect).apply { inset(-blurExtent, -blurExtent) if (spreadExtent < 0) { inset(spreadExtent, spreadExtent) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutsetBoxShadowDrawable.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutsetBoxShadowDrawable.kt index 3f1f9acdb01b58..3678592d70b675 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutsetBoxShadowDrawable.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutsetBoxShadowDrawable.kt @@ -51,11 +51,9 @@ internal class OutsetBoxShadowDrawable( private val shadowPaint = Paint().apply { color = shadowColor - if (blurRadius > 0) { - maskFilter = - BlurMaskFilter( - FilterHelper.sigmaToRadius(blurRadius * BLUR_RADIUS_SIGMA_SCALE), - BlurMaskFilter.Blur.NORMAL) + val convertedBlurRadius = FilterHelper.sigmaToRadius(blurRadius * BLUR_RADIUS_SIGMA_SCALE) + if (convertedBlurRadius > 0) { + maskFilter = BlurMaskFilter(convertedBlurRadius, BlurMaskFilter.Blur.NORMAL) } }