From 57779cebf066ee420fa861df8269e875ab1d21f4 Mon Sep 17 00:00:00 2001 From: Jorge Cabiedes Acosta Date: Mon, 21 Apr 2025 17:35:12 -0700 Subject: [PATCH] Fix border rendering incorrectly when it has translucent alpha (#50829) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50829 It is not appropriate to go through the fast path for border drawing when we have translucent border colors since it will cause overlapping borders to look weird. Adding an if statement to prevent fastpath when the alpha value of any border is less than 255 (opaque) Changelog: [Android][Fixed] - Fix translucent borders on Android overlapping bug Reviewed By: NickGerleman Differential Revision: D73145119 fbshipit-source-id: f22d0d55adca571d6b75725f6bc4753f98698763 --- .../facebook/react/uimanager/drawable/BorderDrawable.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BorderDrawable.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BorderDrawable.kt index d0bc783284b..21f1ba8f4e6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BorderDrawable.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BorderDrawable.kt @@ -490,6 +490,14 @@ internal class BorderDrawable( colorRight: Int, colorBottom: Int ): Int { + // If any of the border colors are translucent then we can't use the fast path. + if (Color.alpha(colorLeft) < 255 || + Color.alpha(colorTop) < 255 || + Color.alpha(colorRight) < 255 || + Color.alpha(colorBottom) < 255) { + return 0 + } + val andSmear = ((if (borderLeft > 0) colorLeft else ALL_BITS_SET) and (if (borderTop > 0) colorTop else ALL_BITS_SET) and