From a6607968c457571d9d843cdefba64dd35366bbdd Mon Sep 17 00:00:00 2001 From: Nick Eddy Date: Fri, 23 Jun 2017 09:29:44 -0700 Subject: [PATCH] Fixing drawing bug in ReactArt on Android Summary: This change fixes rendering issues with arcs having an inner radius. The root cause was a bug that lost the negative sign for counter-clockwise angles. The previous code also incorrectly set the start angle to the end angle. Differential Revision: D5298320 fbshipit-source-id: 4d11edfed5bdab0cf68313d22f94ef0e3711a1a8 --- .../facebook/react/views/art/ARTShapeShadowNode.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTShapeShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTShapeShadowNode.java index 0cfa1ce97dffc1..398ef70d5186e1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTShapeShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTShapeShadowNode.java @@ -195,8 +195,8 @@ protected boolean setupFillPaint(Paint paint, float opacity) { case COLOR_TYPE_LINEAR_GRADIENT: // For mBrushData format refer to LinearGradient and insertColorStopsIntoArray functions in ReactNativeART.js if (mBrushData.length < 5) { - FLog.w(ReactConstants.TAG, - "[ARTShapeShadowNode setupFillPaint] expects 5 elements, received " + FLog.w(ReactConstants.TAG, + "[ARTShapeShadowNode setupFillPaint] expects 5 elements, received " + mBrushData.length); return false; } @@ -296,16 +296,16 @@ private Path createPath(float[] data) { float start = (float) Math.toDegrees(data[i++]); float end = (float) Math.toDegrees(data[i++]); - boolean clockwise = data[i++] == 1f; + boolean counterClockwise = !(data[i++] == 1f); float sweep = end - start; if (Math.abs(sweep) > 360) { sweep = 360; } else { sweep = modulus(sweep, 360); } - if (!clockwise && sweep < 360) { - start = end; - sweep = 360 - sweep; + if (counterClockwise && sweep < 360) { + // Counter-clockwise sweeps are negative + sweep = -1 * (360 - sweep); } RectF oval = new RectF(x - r, y - r, x + r, y + r);