From d8c8c30a00a7a1aafc032a6d956bc7b7c1eaf290 Mon Sep 17 00:00:00 2001 From: Hein Rutjes Date: Fri, 20 Mar 2020 17:02:05 +0100 Subject: [PATCH] Fix border drawing when border-radius is smaller than border-width --- .../view/ReactViewBackgroundDrawable.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java index 9a8f45c9f10ca9..3a05534c706aee 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java @@ -526,11 +526,6 @@ private void updatePath() { mTempRectForBorderRadiusOutline.set(getBounds()); mTempRectForCenterDrawPath.set(getBounds()); - float fullBorderWidth = getFullBorderWidth(); - if (fullBorderWidth > 0) { - mTempRectForCenterDrawPath.inset(fullBorderWidth * 0.5f, fullBorderWidth * 0.5f); - } - final RectF borderWidth = getDirectionAwareBorderInsets(); mInnerClipTempRectForBorderRadius.top += borderWidth.top; @@ -538,6 +533,11 @@ private void updatePath() { mInnerClipTempRectForBorderRadius.left += borderWidth.left; mInnerClipTempRectForBorderRadius.right -= borderWidth.right; + mTempRectForCenterDrawPath.top += borderWidth.top * 0.5f; + mTempRectForCenterDrawPath.bottom -= borderWidth.bottom * 0.5f; + mTempRectForCenterDrawPath.left += borderWidth.left * 0.5f; + mTempRectForCenterDrawPath.right -= borderWidth.right * 0.5f; + final float borderRadius = getFullBorderRadius(); float topLeftRadius = getBorderRadiusOrDefaultTo(borderRadius, BorderRadiusLocation.TOP_LEFT); float topRightRadius = getBorderRadiusOrDefaultTo(borderRadius, BorderRadiusLocation.TOP_RIGHT); @@ -663,14 +663,14 @@ private void updatePath() { mCenterDrawPath.addRoundRect( mTempRectForCenterDrawPath, new float[] { - innerTopLeftRadiusX + (topLeftRadius > 0 ? extraRadiusForOutline : 0), - innerTopLeftRadiusY + (topLeftRadius > 0 ? extraRadiusForOutline : 0), - innerTopRightRadiusX + (topRightRadius > 0 ? extraRadiusForOutline : 0), - innerTopRightRadiusY + (topRightRadius > 0 ? extraRadiusForOutline : 0), - innerBottomRightRadiusX + (bottomRightRadius > 0 ? extraRadiusForOutline : 0), - innerBottomRightRadiusY + (bottomRightRadius > 0 ? extraRadiusForOutline : 0), - innerBottomLeftRadiusX + (bottomLeftRadius > 0 ? extraRadiusForOutline : 0), - innerBottomLeftRadiusY + (bottomLeftRadius > 0 ? extraRadiusForOutline : 0) + Math.max(topLeftRadius - borderWidth.left * 0.5f, 0), + Math.max(topLeftRadius - borderWidth.top * 0.5f, 0), + Math.max(topRightRadius - borderWidth.right * 0.5f, 0), + Math.max(topRightRadius - borderWidth.top * 0.5f, 0), + Math.max(bottomRightRadius - borderWidth.right * 0.5f, 0), + Math.max(bottomRightRadius - borderWidth.bottom * 0.5f, 0), + Math.max(bottomLeftRadius - borderWidth.left * 0.5f, 0), + Math.max(bottomLeftRadius - borderWidth.bottom * 0.5f, 0) }, Path.Direction.CW);