diff --git a/android/src/main/java/com/horcrux/svg/RNSVGCircleShadowNode.java b/android/src/main/java/com/horcrux/svg/RNSVGCircleShadowNode.java index 1aa08cfc..4b9bf0ce 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGCircleShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGCircleShadowNode.java @@ -70,13 +70,14 @@ public class RNSVGCircleShadowNode extends RNSVGPathShadowNode { float cx = PropHelper.fromPercentageToFloat(mCx, width, 0, mScale); float cy = PropHelper.fromPercentageToFloat(mCy, height, 0, mScale); - float r = Float.parseFloat(mR); + float r; if (PropHelper.isPercentage(mR)) { + r = PropHelper.fromPercentageToFloat(mR, 1, 0, 1); float powX = (float)Math.pow((width * r), 2); float powY = (float)Math.pow((height * r), 2); r = (float)Math.sqrt(powX + powY) / (float)Math.sqrt(2); } else { - r = r * mScale; + r = Float.parseFloat(mR) * mScale; } path.addCircle(cx, cy, r, Path.Direction.CW); diff --git a/android/src/main/java/com/horcrux/svg/RNSVGShapeShadowNode.java b/android/src/main/java/com/horcrux/svg/RNSVGShapeShadowNode.java deleted file mode 100644 index 6d838462..00000000 --- a/android/src/main/java/com/horcrux/svg/RNSVGShapeShadowNode.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Copyright (c) 2015-present, Horcrux. - * All rights reserved. - * - * This source code is licensed under the MIT-style license found in the - * LICENSE file in the root directory of this source tree. - */ - - -package com.horcrux.svg; - -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.graphics.RectF; -import android.util.Log; - -import com.facebook.common.logging.FLog; -import com.facebook.react.bridge.JSApplicationIllegalArgumentException; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.common.ReactConstants; -import com.facebook.react.uimanager.annotations.ReactProp; - -import javax.annotation.Nullable; - -/** - * Shadow node for virtual RNSVGPath view - */ -public class RNSVGShapeShadowNode extends RNSVGPathShadowNode { - - protected ReadableMap mShape; - - @ReactProp(name = "shape") - public void setShape(@Nullable ReadableMap shape) { - mShape = shape; - markUpdated(); - } - - @Override - public void draw(Canvas canvas, Paint paint, float opacity) { - - if (mShape != null) { - mPath = getPath(canvas, paint); - RectF shapeBox = new RectF(); - mPath.computeBounds(shapeBox, true); - mContentBoundingBox = shapeBox; - super.draw(canvas, paint, opacity); - } - } - - private float getActualProp(String name, float relative) { - if (mShape.hasKey(name)) { - ReadableMap value = mShape.getMap(name); - - if (value.getBoolean("percentage")) { - return (float)value.getDouble("value") * relative; - } else { - return (float)value.getDouble("value") * mScale; - } - } else { - return 0f; - } - } - - @Override - protected Path getPath(Canvas canvas, Paint paint) { - Path path = new Path(); - - int type = mShape.getInt("type"); - Rect box = canvas.getClipBounds(); - float height = box.height(); - float width = box.width(); - - switch (type) { - case 0: { - // draw circle - // TODO: - float cx = getActualProp("cx", width); - float cy = getActualProp("cy", height); - - float r; - ReadableMap value = mShape.getMap("r"); - if (value.getBoolean("percentage")) { - float percent = (float)value.getDouble("value"); - float powX = (float)Math.pow((width * percent), 2); - float powY = (float)Math.pow((height*percent), 2); - r = (float)Math.sqrt(powX + powY) / (float)Math.sqrt(2); - } else { - r = (float)value.getDouble("value") * mScale; - } - - path.addCircle(cx, cy, r, Path.Direction.CW); - break; - } - case 1: { - // draw ellipse - float cx = getActualProp("cx", width); - float cy = getActualProp("cy", height); - float rx = getActualProp("rx", width); - float ry = getActualProp("ry", height); - RectF oval = new RectF(cx - rx, cy - ry, cx + rx, cy + ry); - path.addOval(oval, Path.Direction.CW); - break; - } - case 2: { - // draw line - float x1 = getActualProp("x1", width); - float y1 = getActualProp("y1", height); - float x2 = getActualProp("x2", width); - float y2 = getActualProp("y2", height); - path.moveTo(x1, y1); - path.lineTo(x2, y2); - break; - } - case 3: { - // draw rect - float x = getActualProp("x", width); - float y = getActualProp("y", height); - float w = getActualProp("width", width); - float h = getActualProp("height", height); - float rx = getActualProp("rx", width); - float ry = getActualProp("ry", height); - - if (rx != 0 || ry != 0) { - if (rx == 0) { - rx = ry; - } else if (ry == 0) { - ry = rx; - } - - if (rx > w / 2) { - rx = w / 2; - } - - if (ry > h / 2) { - ry = h / 2; - } - path.addRoundRect(new RectF(x, y, x + w, y + h), rx, ry, Path.Direction.CW); - } else { - path.addRect(x, y, x + w, y + h, Path.Direction.CW); - } - break; - } - default: - FLog.e(ReactConstants.TAG, "RNSVG: Invalid Shape type " + type + " at " + mShape); - } - return path; - } -}