diff --git a/android/src/main/java/com/horcrux/svg/CircleShadowNode.java b/android/src/main/java/com/horcrux/svg/CircleShadowNode.java index 5c57091c..5c97fea0 100644 --- a/android/src/main/java/com/horcrux/svg/CircleShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/CircleShadowNode.java @@ -15,7 +15,6 @@ import android.graphics.Paint; import android.graphics.Path; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.annotations.ReactProp; /** @@ -28,31 +27,19 @@ class CircleShadowNode extends RenderableShadowNode { @ReactProp(name = "cx") public void setCx(Dynamic cx) { - if (cx.getType() == ReadableType.String) { - mCx = cx.asString(); - } else { - mCx = String.valueOf(cx.asDouble()); - } + mCx = getStringFromDynamic(cx); markUpdated(); } @ReactProp(name = "cy") public void setCy(Dynamic cy) { - if (cy.getType() == ReadableType.String) { - mCy = cy.asString(); - } else { - mCy = String.valueOf(cy.asDouble()); - } + mCy = getStringFromDynamic(cy); markUpdated(); } @ReactProp(name = "r") public void setR(Dynamic r) { - if (r.getType() == ReadableType.String) { - mR = r.asString(); - } else { - mR = String.valueOf(r.asDouble()); - } + mR = getStringFromDynamic(r); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/EllipseShadowNode.java b/android/src/main/java/com/horcrux/svg/EllipseShadowNode.java index aff2c908..e39850c0 100644 --- a/android/src/main/java/com/horcrux/svg/EllipseShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/EllipseShadowNode.java @@ -15,7 +15,6 @@ import android.graphics.Path; import android.graphics.RectF; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.annotations.ReactProp; /** @@ -29,41 +28,25 @@ class EllipseShadowNode extends RenderableShadowNode { @ReactProp(name = "cx") public void setCx(Dynamic cx) { - if (cx.getType() == ReadableType.String) { - mCx = cx.asString(); - } else { - mCx = String.valueOf(cx.asDouble()); - } + mCx = getStringFromDynamic(cx); markUpdated(); } @ReactProp(name = "cy") public void setCy(Dynamic cy) { - if (cy.getType() == ReadableType.String) { - mCy = cy.asString(); - } else { - mCy = String.valueOf(cy.asDouble()); - } + mCy = getStringFromDynamic(cy); markUpdated(); } @ReactProp(name = "rx") public void setRx(Dynamic rx) { - if (rx.getType() == ReadableType.String) { - mRx = rx.asString(); - } else { - mRx = String.valueOf(rx.asDouble()); - } + mRx = getStringFromDynamic(rx); markUpdated(); } @ReactProp(name = "ry") public void setRy(Dynamic ry) { - if (ry.getType() == ReadableType.String) { - mRy = ry.asString(); - } else { - mRy = String.valueOf(ry.asDouble()); - } + mRy = getStringFromDynamic(ry); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/ImageShadowNode.java b/android/src/main/java/com/horcrux/svg/ImageShadowNode.java index aa5a20f4..cba7e524 100644 --- a/android/src/main/java/com/horcrux/svg/ImageShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/ImageShadowNode.java @@ -30,7 +30,6 @@ import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.views.imagehelper.ImageSource; @@ -56,50 +55,27 @@ class ImageShadowNode extends RenderableShadowNode { private int mMeetOrSlice; private final AtomicBoolean mLoading = new AtomicBoolean(false); - private static final float[] sRawMatrix = new float[]{ - 1, 0, 0, - 0, 1, 0, - 0, 0, 1 - }; - private Matrix mMatrix = null; - @ReactProp(name = "x") public void setX(Dynamic x) { - if (x.getType() == ReadableType.String) { - mX = x.asString(); - } else { - mX = String.valueOf(x.asDouble()); - } + mX = getStringFromDynamic(x); markUpdated(); } @ReactProp(name = "y") public void setY(Dynamic y) { - if (y.getType() == ReadableType.String) { - mY = y.asString(); - } else { - mY = String.valueOf(y.asDouble()); - } + mY = getStringFromDynamic(y); markUpdated(); } @ReactProp(name = "width") public void setWidth(Dynamic width) { - if (width.getType() == ReadableType.String) { - mW = width.asString(); - } else { - mW = String.valueOf(width.asDouble()); - } + mW = getStringFromDynamic(width); markUpdated(); } @ReactProp(name = "height") - public void seHeight(Dynamic height) { - if (height.getType() == ReadableType.String) { - mH = height.asString(); - } else { - mH = String.valueOf(height.asDouble()); - } + public void setHeight(Dynamic height) { + mH = getStringFromDynamic(height); markUpdated(); } @@ -139,27 +115,6 @@ class ImageShadowNode extends RenderableShadowNode { markUpdated(); } - @ReactProp(name = "matrix") - public void setMatrix(Dynamic matrixArray) { - ReadableType type = matrixArray.getType(); - if (!matrixArray.isNull() && type.equals(ReadableType.Array)) { - int matrixSize = PropHelper.toMatrixData(matrixArray.asArray(), sRawMatrix, mScale); - if (matrixSize == 6) { - if (mMatrix == null) { - mMatrix = new Matrix(); - } - mMatrix.setValues(sRawMatrix); - } else if (matrixSize != -1) { - FLog.w(ReactConstants.TAG, "RNSVG: Transform matrices must be of size 6"); - } - } else { - mMatrix = null; - } - - markUpdated(); - } - - @Override void draw(final Canvas canvas, final Paint paint, final float opacity) { if (!mLoading.get()) { diff --git a/android/src/main/java/com/horcrux/svg/LineShadowNode.java b/android/src/main/java/com/horcrux/svg/LineShadowNode.java index 41574a8f..894545c9 100644 --- a/android/src/main/java/com/horcrux/svg/LineShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/LineShadowNode.java @@ -14,7 +14,6 @@ import android.graphics.Paint; import android.graphics.Path; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.annotations.ReactProp; /** @@ -28,41 +27,25 @@ class LineShadowNode extends RenderableShadowNode { @ReactProp(name = "x1") public void setX1(Dynamic x1) { - if (x1.getType() == ReadableType.String) { - mX1 = x1.asString(); - } else { - mX1 = String.valueOf(x1.asDouble()); - } + mX1 = getStringFromDynamic(x1); markUpdated(); } @ReactProp(name = "y1") public void setY1(Dynamic y1) { - if (y1.getType() == ReadableType.String) { - mY1 = y1.asString(); - } else { - mY1 = String.valueOf(y1.asDouble()); - } + mY1 = getStringFromDynamic(y1); markUpdated(); } @ReactProp(name = "x2") public void setX2(Dynamic x2) { - if (x2.getType() == ReadableType.String) { - mX2 = x2.asString(); - } else { - mX2 = String.valueOf(x2.asDouble()); - } + mX2 = getStringFromDynamic(x2); markUpdated(); } @ReactProp(name = "y2") public void setY2(Dynamic y2) { - if (y2.getType() == ReadableType.String) { - mY2 = y2.asString(); - } else { - mY2 = String.valueOf(y2.asDouble()); - } + mY2 = getStringFromDynamic(y2); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/LinearGradientShadowNode.java b/android/src/main/java/com/horcrux/svg/LinearGradientShadowNode.java index a00a1b9d..5da5294e 100644 --- a/android/src/main/java/com/horcrux/svg/LinearGradientShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/LinearGradientShadowNode.java @@ -15,7 +15,6 @@ import com.facebook.common.logging.FLog; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.bridge.WritableArray; import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.annotations.ReactProp; @@ -41,44 +40,27 @@ class LinearGradientShadowNode extends DefinitionShadowNode { }; private Matrix mMatrix = null; - @ReactProp(name = "x1") public void setX1(Dynamic x1) { - if (x1.getType() == ReadableType.String) { - mX1 = x1.asString(); - } else { - mX1 = String.valueOf(x1.asDouble()); - } + mX1 = getStringFromDynamic(x1); markUpdated(); } @ReactProp(name = "y1") public void setY1(Dynamic y1) { - if (y1.getType() == ReadableType.String) { - mY1 = y1.asString(); - } else { - mY1 = String.valueOf(y1.asDouble()); - } + mY1 = getStringFromDynamic(y1); markUpdated(); } @ReactProp(name = "x2") public void setX2(Dynamic x2) { - if (x2.getType() == ReadableType.String) { - mX2 = x2.asString(); - } else { - mX2 = String.valueOf(x2.asDouble()); - } + mX2 = getStringFromDynamic(x2); markUpdated(); } @ReactProp(name = "y2") public void setY2(Dynamic y2) { - if (y2.getType() == ReadableType.String) { - mY2 = y2.asString(); - } else { - mY2 = String.valueOf(y2.asDouble()); - } + mY2 = getStringFromDynamic(y2); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/MaskShadowNode.java b/android/src/main/java/com/horcrux/svg/MaskShadowNode.java index 11e7e503..2829fc65 100644 --- a/android/src/main/java/com/horcrux/svg/MaskShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/MaskShadowNode.java @@ -14,7 +14,6 @@ import android.graphics.Matrix; import com.facebook.common.logging.FLog; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.annotations.ReactProp; @@ -27,8 +26,8 @@ class MaskShadowNode extends GroupShadowNode { String mX; String mY; - String mWidth; - String mHeight; + String mW; + String mH; // TODO implement proper support for units @SuppressWarnings({"FieldCanBeLocal", "unused"}) @@ -45,41 +44,25 @@ class MaskShadowNode extends GroupShadowNode { @ReactProp(name = "x") public void setX(Dynamic x) { - if (x.getType() == ReadableType.String) { - mX = x.asString(); - } else { - mX = String.valueOf(x.asDouble()); - } + mX = getStringFromDynamic(x); markUpdated(); } @ReactProp(name = "y") public void setY(Dynamic y) { - if (y.getType() == ReadableType.String) { - mY = y.asString(); - } else { - mY = String.valueOf(y.asDouble()); - } + mY = getStringFromDynamic(y); markUpdated(); } @ReactProp(name = "width") public void setWidth(Dynamic width) { - if (width.getType() == ReadableType.String) { - mWidth = width.asString(); - } else { - mWidth = String.valueOf(width.asDouble()); - } + mW = getStringFromDynamic(width); markUpdated(); } @ReactProp(name = "height") public void setHeight(Dynamic height) { - if (height.getType() == ReadableType.String) { - mHeight = height.asString(); - } else { - mHeight = String.valueOf(height.asDouble()); - } + mH = getStringFromDynamic(height); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/PatternShadowNode.java b/android/src/main/java/com/horcrux/svg/PatternShadowNode.java index 0c9c514f..74300531 100644 --- a/android/src/main/java/com/horcrux/svg/PatternShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/PatternShadowNode.java @@ -16,7 +16,6 @@ import com.facebook.common.logging.FLog; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.bridge.WritableArray; import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.annotations.ReactProp; @@ -30,8 +29,8 @@ class PatternShadowNode extends GroupShadowNode { private String mX; private String mY; - private String mWidth; - private String mHeight; + private String mW; + private String mH; private Brush.BrushUnits mPatternUnits; private Brush.BrushUnits mPatternContentUnits; @@ -51,41 +50,25 @@ class PatternShadowNode extends GroupShadowNode { @ReactProp(name = "x") public void setX(Dynamic x) { - if (x.getType() == ReadableType.String) { - mX = x.asString(); - } else { - mX = String.valueOf(x.asDouble()); - } + mX = getStringFromDynamic(x); markUpdated(); } @ReactProp(name = "y") public void setY(Dynamic y) { - if (y.getType() == ReadableType.String) { - mY = y.asString(); - } else { - mY = String.valueOf(y.asDouble()); - } + mY = getStringFromDynamic(y); markUpdated(); } @ReactProp(name = "width") public void setWidth(Dynamic width) { - if (width.getType() == ReadableType.String) { - mWidth = width.asString(); - } else { - mWidth = String.valueOf(width.asDouble()); - } + mW = getStringFromDynamic(width); markUpdated(); } @ReactProp(name = "height") public void setHeight(Dynamic height) { - if (height.getType() == ReadableType.String) { - mHeight = height.asString(); - } else { - mHeight = String.valueOf(height.asDouble()); - } + mH = getStringFromDynamic(height); markUpdated(); } @@ -181,8 +164,8 @@ class PatternShadowNode extends GroupShadowNode { WritableArray points = Arguments.createArray(); points.pushString(mX); points.pushString(mY); - points.pushString(mWidth); - points.pushString(mHeight); + points.pushString(mW); + points.pushString(mH); Brush brush = new Brush(Brush.BrushType.PATTERN, points, mPatternUnits); brush.setContentUnits(mPatternContentUnits); diff --git a/android/src/main/java/com/horcrux/svg/RadialGradientShadowNode.java b/android/src/main/java/com/horcrux/svg/RadialGradientShadowNode.java index 33f1598f..9272e8a8 100644 --- a/android/src/main/java/com/horcrux/svg/RadialGradientShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RadialGradientShadowNode.java @@ -15,7 +15,6 @@ import com.facebook.common.logging.FLog; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.bridge.WritableArray; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.common.ReactConstants; @@ -44,61 +43,37 @@ class RadialGradientShadowNode extends DefinitionShadowNode { @ReactProp(name = "fx") public void setFx(Dynamic fx) { - if (fx.getType() == ReadableType.String) { - mFx = fx.asString(); - } else { - mFx = String.valueOf(fx.asDouble()); - } + mFx = getStringFromDynamic(fx); markUpdated(); } @ReactProp(name = "fy") public void setFy(Dynamic fy) { - if (fy.getType() == ReadableType.String) { - mFy = fy.asString(); - } else { - mFy = String.valueOf(fy.asDouble()); - } + mFy = getStringFromDynamic(fy); markUpdated(); } @ReactProp(name = "rx") public void setRx(Dynamic rx) { - if (rx.getType() == ReadableType.String) { - mRx = rx.asString(); - } else { - mRx = String.valueOf(rx.asDouble()); - } + mRx = getStringFromDynamic(rx); markUpdated(); } @ReactProp(name = "ry") public void setRy(Dynamic ry) { - if (ry.getType() == ReadableType.String) { - mRy = ry.asString(); - } else { - mRy = String.valueOf(ry.asDouble()); - } + mRy = getStringFromDynamic(ry); markUpdated(); } @ReactProp(name = "cx") public void setCx(Dynamic cx) { - if (cx.getType() == ReadableType.String) { - mCx = cx.asString(); - } else { - mCx = String.valueOf(cx.asDouble()); - } + mCx = getStringFromDynamic(cx); markUpdated(); } @ReactProp(name = "cy") public void setCy(Dynamic cy) { - if (cy.getType() == ReadableType.String) { - mCy = cy.asString(); - } else { - mCy = String.valueOf(cy.asDouble()); - } + mCy = getStringFromDynamic(cy); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/RectShadowNode.java b/android/src/main/java/com/horcrux/svg/RectShadowNode.java index b0aa00e9..6668a5ed 100644 --- a/android/src/main/java/com/horcrux/svg/RectShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RectShadowNode.java @@ -15,7 +15,6 @@ import android.graphics.Path; import android.graphics.RectF; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.annotations.ReactProp; /** @@ -29,64 +28,39 @@ class RectShadowNode extends RenderableShadowNode { private String mRx; private String mRy; - @ReactProp(name = "x") public void setX(Dynamic x) { - if (x.getType() == ReadableType.String) { - mX = x.asString(); - } else { - mX = String.valueOf(x.asDouble()); - } + mX = getStringFromDynamic(x); markUpdated(); } @ReactProp(name = "y") public void setY(Dynamic y) { - if (y.getType() == ReadableType.String) { - mY = y.asString(); - } else { - mY = String.valueOf(y.asDouble()); - } + mY = getStringFromDynamic(y); markUpdated(); } @ReactProp(name = "width") public void setWidth(Dynamic width) { - if (width.getType() == ReadableType.String) { - mW = width.asString(); - } else { - mW = String.valueOf(width.asDouble()); - } + mW = getStringFromDynamic(width); markUpdated(); } @ReactProp(name = "height") public void setHeight(Dynamic height) { - if (height.getType() == ReadableType.String) { - mH = height.asString(); - } else { - mH = String.valueOf(height.asDouble()); - } + mH = getStringFromDynamic(height); markUpdated(); } @ReactProp(name = "rx") public void setRx(Dynamic rx) { - if (rx.getType() == ReadableType.String) { - mRx = rx.asString(); - } else { - mRx = String.valueOf(rx.asDouble()); - } + mRx = getStringFromDynamic(rx); markUpdated(); } @ReactProp(name = "ry") public void setRy(Dynamic ry) { - if (ry.getType() == ReadableType.String) { - mRy = ry.asString(); - } else { - mRy = String.valueOf(ry.asDouble()); - } + mRy = getStringFromDynamic(ry); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java b/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java index d159bdc1..b7dd5c37 100644 --- a/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java @@ -174,11 +174,7 @@ abstract public class RenderableShadowNode extends VirtualNode { @ReactProp(name = "strokeWidth") public void setStrokeWidth(Dynamic strokeWidth) { - if (strokeWidth.getType() == ReadableType.String) { - mStrokeWidth = strokeWidth.asString(); - } else { - mStrokeWidth = String.valueOf(strokeWidth.asDouble()); - } + mStrokeWidth = getStringFromDynamic(strokeWidth); markUpdated(); } @@ -263,8 +259,8 @@ abstract public class RenderableShadowNode extends VirtualNode { // Clip to mask bounds and render the mask float maskX = (float) relativeOnWidth(mask.mX); float maskY = (float) relativeOnWidth(mask.mY); - float maskWidth = (float) relativeOnWidth(mask.mWidth); - float maskHeight = (float) relativeOnWidth(mask.mHeight); + float maskWidth = (float) relativeOnWidth(mask.mW); + float maskHeight = (float) relativeOnWidth(mask.mH); maskCanvas.clipRect(maskX, maskY, maskWidth, maskHeight); Paint maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG); diff --git a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java index b31774e9..97a693de 100644 --- a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java +++ b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java @@ -441,12 +441,12 @@ class RenderableViewManager extends ViewGroupManager node, Dynamic height) { - node.shadowNode.seHeight(height); + node.shadowNode.setHeight(height); } @ReactProp(name = "height") public void setHeight(RenderableView node, Dynamic height) { - node.shadowNode.seHeight(height); + node.shadowNode.setHeight(height); } @ReactProp(name = "src") diff --git a/android/src/main/java/com/horcrux/svg/TextPathShadowNode.java b/android/src/main/java/com/horcrux/svg/TextPathShadowNode.java index 476f503c..dac82c17 100644 --- a/android/src/main/java/com/horcrux/svg/TextPathShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/TextPathShadowNode.java @@ -14,7 +14,6 @@ import android.graphics.Paint; import android.graphics.Path; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.annotations.ReactProp; import javax.annotation.Nullable; @@ -41,11 +40,7 @@ class TextPathShadowNode extends TextShadowNode { @ReactProp(name = "startOffset") public void setStartOffset(Dynamic startOffset) { - if (startOffset.getType() == ReadableType.String) { - mStartOffset = startOffset.asString(); - } else { - mStartOffset = String.valueOf(startOffset.asDouble()); - } + mStartOffset = getStringFromDynamic(startOffset); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/TextShadowNode.java b/android/src/main/java/com/horcrux/svg/TextShadowNode.java index ec156aad..8d02f397 100644 --- a/android/src/main/java/com/horcrux/svg/TextShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/TextShadowNode.java @@ -15,10 +15,8 @@ import android.graphics.Path; import android.graphics.Region; import com.facebook.react.bridge.Dynamic; -import com.facebook.react.bridge.JavaOnlyArray; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.ReactShadowNode; import com.facebook.react.uimanager.annotations.ReactProp; @@ -49,11 +47,7 @@ class TextShadowNode extends GroupShadowNode { @ReactProp(name = "textLength") public void setTextLength(Dynamic length) { - if (length.getType() == ReadableType.String) { - mTextLength = length.asString(); - } else { - mTextLength = String.valueOf(length.asDouble()); - } + mTextLength = getStringFromDynamic(length); markUpdated(); } @@ -71,11 +65,7 @@ class TextShadowNode extends GroupShadowNode { @ReactProp(name = "baselineShift") public void setBaselineShift(Dynamic baselineShift) { - if (baselineShift.getType() == ReadableType.String) { - mBaselineShift = baselineShift.asString(); - } else { - mBaselineShift = String.valueOf(baselineShift.asDouble()); - } + mBaselineShift = getStringFromDynamic(baselineShift); markUpdated(); } @@ -103,116 +93,31 @@ class TextShadowNode extends GroupShadowNode { @ReactProp(name = "rotate") public void setRotate(Dynamic rotate) { - if (rotate.isNull()) { - mRotate = null; - } else { - switch (rotate.getType()) { - case Array: { - mRotate = rotate.asArray(); - break; - } - case String: { - mRotate = JavaOnlyArray.of(rotate.asString()); - break; - } - case Number: { - mRotate = JavaOnlyArray.of(String.valueOf(rotate.asDouble())); - break; - } - } - } + mRotate = getStringArrayFromDynamic(rotate); markUpdated(); } @ReactProp(name = "dx") public void setDeltaX(Dynamic deltaX) { - if (deltaX.isNull()) { - mDeltaX = null; - } else { - switch (deltaX.getType()) { - case Array: { - mDeltaX = deltaX.asArray(); - break; - } - case String: { - mDeltaX = JavaOnlyArray.of(deltaX.asString()); - break; - } - case Number: { - mDeltaX = JavaOnlyArray.of(String.valueOf(deltaX.asDouble())); - break; - } - } - } + mDeltaX = getStringArrayFromDynamic(deltaX); markUpdated(); } @ReactProp(name = "dy") public void setDeltaY(Dynamic deltaY) { - if (deltaY.isNull()) { - mDeltaY = null; - } else { - switch (deltaY.getType()) { - case Array: { - mDeltaY = deltaY.asArray(); - break; - } - case String: { - mDeltaY = JavaOnlyArray.of(deltaY.asString()); - break; - } - case Number: { - mDeltaY = JavaOnlyArray.of(String.valueOf(deltaY.asDouble())); - break; - } - } - } + mDeltaY = getStringArrayFromDynamic(deltaY); markUpdated(); } @ReactProp(name = "x") public void setPositionX(Dynamic positionX) { - if (positionX.isNull()) { - mPositionX = null; - } else { - switch (positionX.getType()) { - case Array: { - mPositionX = positionX.asArray(); - break; - } - case String: { - mPositionX = JavaOnlyArray.of(positionX.asString()); - break; - } - case Number: { - mPositionX = JavaOnlyArray.of(String.valueOf(positionX.asDouble())); - break; - } - } - } + mPositionX = getStringArrayFromDynamic(positionX); markUpdated(); } @ReactProp(name = "y") public void setPositionY(Dynamic positionY) { - if (positionY.isNull()) { - mPositionY = null; - } else { - switch (positionY.getType()) { - case Array: { - mPositionY = positionY.asArray(); - break; - } - case String: { - mPositionY = JavaOnlyArray.of(positionY.asString()); - break; - } - case Number: { - mPositionY = JavaOnlyArray.of(String.valueOf(positionY.asDouble())); - break; - } - } - } + mPositionY = getStringArrayFromDynamic(positionY); markUpdated(); } diff --git a/android/src/main/java/com/horcrux/svg/VirtualNode.java b/android/src/main/java/com/horcrux/svg/VirtualNode.java index fb75ba72..0a0449a8 100644 --- a/android/src/main/java/com/horcrux/svg/VirtualNode.java +++ b/android/src/main/java/com/horcrux/svg/VirtualNode.java @@ -18,6 +18,8 @@ import android.graphics.Region; import com.facebook.common.logging.FLog; import com.facebook.react.bridge.Dynamic; +import com.facebook.react.bridge.JavaOnlyArray; +import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableType; import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.DisplayMetricsHolder; @@ -415,4 +417,27 @@ abstract class VirtualNode extends LayoutShadowNode { return mClientRect; } + String getStringFromDynamic(Dynamic dynamic) { + switch (dynamic.getType()) { + case String: + return dynamic.asString(); + case Number: + return String.valueOf(dynamic.asDouble()); + default: + return null; + } + } + + ReadableArray getStringArrayFromDynamic(Dynamic dynamic) { + switch (dynamic.getType()) { + case Array: + return dynamic.asArray(); + case String: + return JavaOnlyArray.of(dynamic.asString()); + case Number: + return JavaOnlyArray.of(String.valueOf(dynamic.asDouble())); + default: + return null; + } + } }