From fcae46eb145d5bf75be3908e415595e038208b15 Mon Sep 17 00:00:00 2001 From: Jorge Cabiedes Acosta Date: Thu, 16 Jan 2025 13:09:12 -0800 Subject: [PATCH] Fix anti-aliasing on older Android devices Summary: On older Android versions clipping doesn't have anti-aliasing by default which means that clipping with no border will always make the background not have anti-aliasing. This is fixed by default on new Background and Border drawables since rendering logic is separated Moving the clipping logic so it only runs when we have a border. Differential Revision: D68279400 --- .../react/uimanager/drawable/CSSBackgroundDrawable.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java index 6f23fe76c8a7..549bebd68ae8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java @@ -390,9 +390,6 @@ private void drawRoundedBackgroundWithBorders(Canvas canvas) { updatePath(); canvas.save(); - // Clip outer border - canvas.clipPath(Preconditions.checkNotNull(mOuterClipPathForBorderRadius), Region.Op.INTERSECT); - // Draws the View without its border first (with background color fill) int useColor = ColorUtils.setAlphaComponent(mColor, (Color.alpha(mColor) * mAlpha) >> 8); if (Color.alpha(useColor) != 0) { @@ -434,6 +431,10 @@ private void drawRoundedBackgroundWithBorders(Canvas canvas) { || borderWidth.left > 0 || borderWidth.right > 0) { + // Clip outer border + canvas.clipPath( + Preconditions.checkNotNull(mOuterClipPathForBorderRadius), Region.Op.INTERSECT); + // If it's a full and even border draw inner rect path with stroke final float fullBorderWidth = getFullBorderWidth(); int borderColor = getBorderColor(Spacing.ALL);