mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-06 16:32:24 +00:00
Remove string conversion of svg bounds, allow style arrays more widely
This commit is contained in:
@@ -31,19 +31,19 @@ class CircleView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "cx")
|
@ReactProp(name = "cx")
|
||||||
public void setCx(Dynamic cx) {
|
public void setCx(Dynamic cx) {
|
||||||
mCx = getLengthFromDynamic(cx);
|
mCx = SVGLength.from(cx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "cy")
|
@ReactProp(name = "cy")
|
||||||
public void setCy(Dynamic cy) {
|
public void setCy(Dynamic cy) {
|
||||||
mCy = getLengthFromDynamic(cy);
|
mCy = SVGLength.from(cy);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "r")
|
@ReactProp(name = "r")
|
||||||
public void setR(Dynamic r) {
|
public void setR(Dynamic r) {
|
||||||
mR = getLengthFromDynamic(r);
|
mR = SVGLength.from(r);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,25 +32,25 @@ class EllipseView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "cx")
|
@ReactProp(name = "cx")
|
||||||
public void setCx(Dynamic cx) {
|
public void setCx(Dynamic cx) {
|
||||||
mCx = getLengthFromDynamic(cx);
|
mCx = SVGLength.from(cx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "cy")
|
@ReactProp(name = "cy")
|
||||||
public void setCy(Dynamic cy) {
|
public void setCy(Dynamic cy) {
|
||||||
mCy = getLengthFromDynamic(cy);
|
mCy = SVGLength.from(cy);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "rx")
|
@ReactProp(name = "rx")
|
||||||
public void setRx(Dynamic rx) {
|
public void setRx(Dynamic rx) {
|
||||||
mRx = getLengthFromDynamic(rx);
|
mRx = SVGLength.from(rx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "ry")
|
@ReactProp(name = "ry")
|
||||||
public void setRy(Dynamic ry) {
|
public void setRy(Dynamic ry) {
|
||||||
mRy = getLengthFromDynamic(ry);
|
mRy = SVGLength.from(ry);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import android.graphics.Matrix;
|
|||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Path;
|
import android.graphics.Path;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
import android.graphics.Region;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
import com.facebook.common.executors.UiThreadImmediateExecutorService;
|
import com.facebook.common.executors.UiThreadImmediateExecutorService;
|
||||||
@@ -61,25 +60,25 @@ class ImageView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setX(Dynamic x) {
|
public void setX(Dynamic x) {
|
||||||
mX = getLengthFromDynamic(x);
|
mX = SVGLength.from(x);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setY(Dynamic y) {
|
public void setY(Dynamic y) {
|
||||||
mY = getLengthFromDynamic(y);
|
mY = SVGLength.from(y);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "width")
|
@ReactProp(name = "width")
|
||||||
public void setWidth(Dynamic width) {
|
public void setWidth(Dynamic width) {
|
||||||
mW = getLengthFromDynamic(width);
|
mW = SVGLength.from(width);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "height")
|
@ReactProp(name = "height")
|
||||||
public void setHeight(Dynamic height) {
|
public void setHeight(Dynamic height) {
|
||||||
mH = getLengthFromDynamic(height);
|
mH = SVGLength.from(height);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,25 +31,25 @@ class LineView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "x1")
|
@ReactProp(name = "x1")
|
||||||
public void setX1(Dynamic x1) {
|
public void setX1(Dynamic x1) {
|
||||||
mX1 = getLengthFromDynamic(x1);
|
mX1 = SVGLength.from(x1);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y1")
|
@ReactProp(name = "y1")
|
||||||
public void setY1(Dynamic y1) {
|
public void setY1(Dynamic y1) {
|
||||||
mY1 = getLengthFromDynamic(y1);
|
mY1 = SVGLength.from(y1);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "x2")
|
@ReactProp(name = "x2")
|
||||||
public void setX2(Dynamic x2) {
|
public void setX2(Dynamic x2) {
|
||||||
mX2 = getLengthFromDynamic(x2);
|
mX2 = SVGLength.from(x2);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y2")
|
@ReactProp(name = "y2")
|
||||||
public void setY2(Dynamic y2) {
|
public void setY2(Dynamic y2) {
|
||||||
mY2 = getLengthFromDynamic(y2);
|
mY2 = SVGLength.from(y2);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,25 +44,25 @@ class LinearGradientView extends DefinitionView {
|
|||||||
|
|
||||||
@ReactProp(name = "x1")
|
@ReactProp(name = "x1")
|
||||||
public void setX1(Dynamic x1) {
|
public void setX1(Dynamic x1) {
|
||||||
mX1 = getLengthFromDynamic(x1);
|
mX1 = SVGLength.from(x1);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y1")
|
@ReactProp(name = "y1")
|
||||||
public void setY1(Dynamic y1) {
|
public void setY1(Dynamic y1) {
|
||||||
mY1 = getLengthFromDynamic(y1);
|
mY1 = SVGLength.from(y1);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "x2")
|
@ReactProp(name = "x2")
|
||||||
public void setX2(Dynamic x2) {
|
public void setX2(Dynamic x2) {
|
||||||
mX2 = getLengthFromDynamic(x2);
|
mX2 = SVGLength.from(x2);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y2")
|
@ReactProp(name = "y2")
|
||||||
public void setY2(Dynamic y2) {
|
public void setY2(Dynamic y2) {
|
||||||
mY2 = getLengthFromDynamic(y2);
|
mY2 = SVGLength.from(y2);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,25 +48,25 @@ class MaskView extends GroupView {
|
|||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setX(Dynamic x) {
|
public void setX(Dynamic x) {
|
||||||
mX = getLengthFromDynamic(x);
|
mX = SVGLength.from(x);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setY(Dynamic y) {
|
public void setY(Dynamic y) {
|
||||||
mY = getLengthFromDynamic(y);
|
mY = SVGLength.from(y);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "width")
|
@ReactProp(name = "width")
|
||||||
public void setWidth(Dynamic width) {
|
public void setWidth(Dynamic width) {
|
||||||
mW = getLengthFromDynamic(width);
|
mW = SVGLength.from(width);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "height")
|
@ReactProp(name = "height")
|
||||||
public void setHeight(Dynamic height) {
|
public void setHeight(Dynamic height) {
|
||||||
mH = getLengthFromDynamic(height);
|
mH = SVGLength.from(height);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,25 +52,25 @@ class PatternView extends GroupView {
|
|||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setX(Dynamic x) {
|
public void setX(Dynamic x) {
|
||||||
mX = getLengthFromDynamic(x);
|
mX = SVGLength.from(x);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setY(Dynamic y) {
|
public void setY(Dynamic y) {
|
||||||
mY = getLengthFromDynamic(y);
|
mY = SVGLength.from(y);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "width")
|
@ReactProp(name = "width")
|
||||||
public void setWidth(Dynamic width) {
|
public void setWidth(Dynamic width) {
|
||||||
mW = getLengthFromDynamic(width);
|
mW = SVGLength.from(width);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "height")
|
@ReactProp(name = "height")
|
||||||
public void setHeight(Dynamic height) {
|
public void setHeight(Dynamic height) {
|
||||||
mH = getLengthFromDynamic(height);
|
mH = SVGLength.from(height);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,37 +45,37 @@ class RadialGradientView extends DefinitionView {
|
|||||||
|
|
||||||
@ReactProp(name = "fx")
|
@ReactProp(name = "fx")
|
||||||
public void setFx(Dynamic fx) {
|
public void setFx(Dynamic fx) {
|
||||||
mFx = getLengthFromDynamic(fx);
|
mFx = SVGLength.from(fx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "fy")
|
@ReactProp(name = "fy")
|
||||||
public void setFy(Dynamic fy) {
|
public void setFy(Dynamic fy) {
|
||||||
mFy = getLengthFromDynamic(fy);
|
mFy = SVGLength.from(fy);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "rx")
|
@ReactProp(name = "rx")
|
||||||
public void setRx(Dynamic rx) {
|
public void setRx(Dynamic rx) {
|
||||||
mRx = getLengthFromDynamic(rx);
|
mRx = SVGLength.from(rx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "ry")
|
@ReactProp(name = "ry")
|
||||||
public void setRy(Dynamic ry) {
|
public void setRy(Dynamic ry) {
|
||||||
mRy = getLengthFromDynamic(ry);
|
mRy = SVGLength.from(ry);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "cx")
|
@ReactProp(name = "cx")
|
||||||
public void setCx(Dynamic cx) {
|
public void setCx(Dynamic cx) {
|
||||||
mCx = getLengthFromDynamic(cx);
|
mCx = SVGLength.from(cx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "cy")
|
@ReactProp(name = "cy")
|
||||||
public void setCy(Dynamic cy) {
|
public void setCy(Dynamic cy) {
|
||||||
mCy = getLengthFromDynamic(cy);
|
mCy = SVGLength.from(cy);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,37 +34,37 @@ class RectView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setX(Dynamic x) {
|
public void setX(Dynamic x) {
|
||||||
mX = getLengthFromDynamic(x);
|
mX = SVGLength.from(x);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setY(Dynamic y) {
|
public void setY(Dynamic y) {
|
||||||
mY = getLengthFromDynamic(y);
|
mY = SVGLength.from(y);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "width")
|
@ReactProp(name = "width")
|
||||||
public void setWidth(Dynamic width) {
|
public void setWidth(Dynamic width) {
|
||||||
mW = getLengthFromDynamic(width);
|
mW = SVGLength.from(width);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "height")
|
@ReactProp(name = "height")
|
||||||
public void setHeight(Dynamic height) {
|
public void setHeight(Dynamic height) {
|
||||||
mH = getLengthFromDynamic(height);
|
mH = SVGLength.from(height);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "rx")
|
@ReactProp(name = "rx")
|
||||||
public void setRx(Dynamic rx) {
|
public void setRx(Dynamic rx) {
|
||||||
mRx = getLengthFromDynamic(rx);
|
mRx = SVGLength.from(rx);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "ry")
|
@ReactProp(name = "ry")
|
||||||
public void setRy(Dynamic ry) {
|
public void setRy(Dynamic ry) {
|
||||||
mRy = getLengthFromDynamic(ry);
|
mRy = SVGLength.from(ry);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ abstract public class RenderableView extends VirtualView {
|
|||||||
|
|
||||||
@ReactProp(name = "strokeWidth")
|
@ReactProp(name = "strokeWidth")
|
||||||
public void setStrokeWidth(Dynamic strokeWidth) {
|
public void setStrokeWidth(Dynamic strokeWidth) {
|
||||||
this.strokeWidth = getLengthFromDynamic(strokeWidth);
|
this.strokeWidth = SVGLength.from(strokeWidth);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package com.horcrux.svg;
|
package com.horcrux.svg;
|
||||||
|
|
||||||
|
import com.facebook.react.bridge.Dynamic;
|
||||||
|
import com.facebook.react.bridge.ReadableArray;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
// https://www.w3.org/TR/SVG/types.html#InterfaceSVGLength
|
// https://www.w3.org/TR/SVG/types.html#InterfaceSVGLength
|
||||||
enum SVGLengthUnitType {
|
enum SVGLengthUnitType {
|
||||||
SVG_LENGTHTYPE_UNKNOWN,
|
SVG_LENGTHTYPE_UNKNOWN,
|
||||||
@@ -84,4 +89,53 @@ class SVGLength {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SVGLength from(Dynamic dynamic) {
|
||||||
|
switch (dynamic.getType()) {
|
||||||
|
case Number:
|
||||||
|
return new SVGLength(dynamic.asDouble());
|
||||||
|
case String:
|
||||||
|
return new SVGLength(dynamic.asString());
|
||||||
|
default:
|
||||||
|
return new SVGLength();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static String toString(Dynamic dynamic) {
|
||||||
|
switch (dynamic.getType()) {
|
||||||
|
case Number:
|
||||||
|
return String.valueOf(dynamic.asDouble());
|
||||||
|
case String:
|
||||||
|
return dynamic.asString();
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static ArrayList<SVGLength> arrayFrom(Dynamic dynamic) {
|
||||||
|
switch (dynamic.getType()) {
|
||||||
|
case Number: {
|
||||||
|
ArrayList<SVGLength> list = new ArrayList<>(1);
|
||||||
|
list.add(new SVGLength(dynamic.asDouble()));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
case Array: {
|
||||||
|
ReadableArray arr = dynamic.asArray();
|
||||||
|
int size = arr.size();
|
||||||
|
ArrayList<SVGLength> list = new ArrayList<>(size);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
Dynamic val = arr.getDynamic(i);
|
||||||
|
list.add(from(val));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
case String: {
|
||||||
|
ArrayList<SVGLength> list = new ArrayList<>(1);
|
||||||
|
list.add(new SVGLength(dynamic.asString()));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.util.Base64;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
|
|
||||||
|
import com.facebook.react.bridge.Dynamic;
|
||||||
import com.facebook.react.bridge.ReactContext;
|
import com.facebook.react.bridge.ReactContext;
|
||||||
import com.facebook.react.uimanager.DisplayMetricsHolder;
|
import com.facebook.react.uimanager.DisplayMetricsHolder;
|
||||||
import com.facebook.react.uimanager.ReactCompoundView;
|
import com.facebook.react.uimanager.ReactCompoundView;
|
||||||
@@ -116,8 +117,8 @@ public class SvgView extends ReactViewGroup implements ReactCompoundView, ReactC
|
|||||||
private float mMinY;
|
private float mMinY;
|
||||||
private float mVbWidth;
|
private float mVbWidth;
|
||||||
private float mVbHeight;
|
private float mVbHeight;
|
||||||
private String mbbWidth;
|
private SVGLength mbbWidth;
|
||||||
private String mbbHeight;
|
private SVGLength mbbHeight;
|
||||||
private String mAlign;
|
private String mAlign;
|
||||||
private int mMeetOrSlice;
|
private int mMeetOrSlice;
|
||||||
private final Matrix mInvViewBoxMatrix = new Matrix();
|
private final Matrix mInvViewBoxMatrix = new Matrix();
|
||||||
@@ -177,15 +178,15 @@ public class SvgView extends ReactViewGroup implements ReactCompoundView, ReactC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "bbWidth")
|
@ReactProp(name = "bbWidth")
|
||||||
public void setVbWidth(String bbWidth) {
|
public void setBbWidth(Dynamic bbWidth) {
|
||||||
mbbWidth = bbWidth;
|
mbbWidth = SVGLength.from(bbWidth);
|
||||||
invalidate();
|
invalidate();
|
||||||
clearChildCache();
|
clearChildCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "bbHeight")
|
@ReactProp(name = "bbHeight")
|
||||||
public void setVbHeight(String bbHeight) {
|
public void setBbHeight(Dynamic bbHeight) {
|
||||||
mbbHeight = bbHeight;
|
mbbHeight = SVGLength.from(bbHeight);
|
||||||
invalidate();
|
invalidate();
|
||||||
clearChildCache();
|
clearChildCache();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ package com.horcrux.svg;
|
|||||||
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
|
import com.facebook.react.bridge.Dynamic;
|
||||||
import com.facebook.react.uimanager.ThemedReactContext;
|
import com.facebook.react.uimanager.ThemedReactContext;
|
||||||
import com.facebook.react.uimanager.annotations.ReactProp;
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
||||||
import com.facebook.react.views.view.ReactViewGroup;
|
import com.facebook.react.views.view.ReactViewGroup;
|
||||||
@@ -89,13 +90,13 @@ class SvgViewManager extends ReactViewManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "bbWidth")
|
@ReactProp(name = "bbWidth")
|
||||||
public void setVbWidth(SvgView node, String bbWidth) {
|
public void setBbWidth(SvgView node, Dynamic bbWidth) {
|
||||||
node.setVbWidth(bbWidth);
|
node.setBbWidth(bbWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "bbHeight")
|
@ReactProp(name = "bbHeight")
|
||||||
public void setVbHeight(SvgView node, String bbHeight) {
|
public void setBbHeight(SvgView node, Dynamic bbHeight) {
|
||||||
node.setVbHeight(bbHeight);
|
node.setBbHeight(bbHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "align")
|
@ReactProp(name = "align")
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class TextPathView extends TextView {
|
|||||||
|
|
||||||
@ReactProp(name = "startOffset")
|
@ReactProp(name = "startOffset")
|
||||||
public void setStartOffset(Dynamic startOffset) {
|
public void setStartOffset(Dynamic startOffset) {
|
||||||
mStartOffset = getLengthFromDynamic(startOffset);
|
mStartOffset = SVGLength.from(startOffset);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class TextView extends GroupView {
|
|||||||
|
|
||||||
@ReactProp(name = "textLength")
|
@ReactProp(name = "textLength")
|
||||||
public void setTextLength(Dynamic length) {
|
public void setTextLength(Dynamic length) {
|
||||||
mTextLength = getLengthFromDynamic(length);
|
mTextLength = SVGLength.from(length);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ class TextView extends GroupView {
|
|||||||
|
|
||||||
@ReactProp(name = "baselineShift")
|
@ReactProp(name = "baselineShift")
|
||||||
public void setBaselineShift(Dynamic baselineShift) {
|
public void setBaselineShift(Dynamic baselineShift) {
|
||||||
mBaselineShift = getStringFromDynamic(baselineShift);
|
mBaselineShift = SVGLength.toString(baselineShift);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,31 +100,31 @@ class TextView extends GroupView {
|
|||||||
|
|
||||||
@ReactProp(name = "rotate")
|
@ReactProp(name = "rotate")
|
||||||
public void setRotate(Dynamic rotate) {
|
public void setRotate(Dynamic rotate) {
|
||||||
mRotate = getLengthArrayFromDynamic(rotate);
|
mRotate = SVGLength.arrayFrom(rotate);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "dx")
|
@ReactProp(name = "dx")
|
||||||
public void setDeltaX(Dynamic deltaX) {
|
public void setDeltaX(Dynamic deltaX) {
|
||||||
mDeltaX = getLengthArrayFromDynamic(deltaX);
|
mDeltaX = SVGLength.arrayFrom(deltaX);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "dy")
|
@ReactProp(name = "dy")
|
||||||
public void setDeltaY(Dynamic deltaY) {
|
public void setDeltaY(Dynamic deltaY) {
|
||||||
mDeltaY = getLengthArrayFromDynamic(deltaY);
|
mDeltaY = SVGLength.arrayFrom(deltaY);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setPositionX(Dynamic positionX) {
|
public void setPositionX(Dynamic positionX) {
|
||||||
mPositionX = getLengthArrayFromDynamic(positionX);
|
mPositionX = SVGLength.arrayFrom(positionX);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setPositionY(Dynamic positionY) {
|
public void setPositionY(Dynamic positionY) {
|
||||||
mPositionY = getLengthArrayFromDynamic(positionY);
|
mPositionY = SVGLength.arrayFrom(positionY);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,25 +40,25 @@ class UseView extends RenderableView {
|
|||||||
|
|
||||||
@ReactProp(name = "x")
|
@ReactProp(name = "x")
|
||||||
public void setX(Dynamic x) {
|
public void setX(Dynamic x) {
|
||||||
mX = getLengthFromDynamic(x);
|
mX = SVGLength.from(x);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "y")
|
@ReactProp(name = "y")
|
||||||
public void setY(Dynamic y) {
|
public void setY(Dynamic y) {
|
||||||
mY = getLengthFromDynamic(y);
|
mY = SVGLength.from(y);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "width")
|
@ReactProp(name = "width")
|
||||||
public void setWidth(Dynamic width) {
|
public void setWidth(Dynamic width) {
|
||||||
mW = getLengthFromDynamic(width);
|
mW = SVGLength.from(width);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ReactProp(name = "height")
|
@ReactProp(name = "height")
|
||||||
public void setHeight(Dynamic height) {
|
public void setHeight(Dynamic height) {
|
||||||
mH = getLengthFromDynamic(height);
|
mH = SVGLength.from(height);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -544,52 +544,4 @@ abstract public class VirtualView extends ReactViewGroup {
|
|||||||
return mClientRect;
|
return mClientRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
SVGLength getLengthFromDynamic(Dynamic dynamic) {
|
|
||||||
switch (dynamic.getType()) {
|
|
||||||
case Number:
|
|
||||||
return new SVGLength(dynamic.asDouble());
|
|
||||||
case String:
|
|
||||||
return new SVGLength(dynamic.asString());
|
|
||||||
default:
|
|
||||||
return new SVGLength();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String getStringFromDynamic(Dynamic dynamic) {
|
|
||||||
switch (dynamic.getType()) {
|
|
||||||
case Number:
|
|
||||||
return String.valueOf(dynamic.asDouble());
|
|
||||||
case String:
|
|
||||||
return dynamic.asString();
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<SVGLength> getLengthArrayFromDynamic(Dynamic dynamic) {
|
|
||||||
switch (dynamic.getType()) {
|
|
||||||
case Number: {
|
|
||||||
ArrayList<SVGLength> list = new ArrayList<>(1);
|
|
||||||
list.add(new SVGLength(dynamic.asDouble()));
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
case Array: {
|
|
||||||
ReadableArray arr = dynamic.asArray();
|
|
||||||
int size = arr.size();
|
|
||||||
ArrayList<SVGLength> list = new ArrayList<>(size);
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
Dynamic val = arr.getDynamic(i);
|
|
||||||
list.add(getLengthFromDynamic(val));
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
case String: {
|
|
||||||
ArrayList<SVGLength> list = new ArrayList<>(1);
|
|
||||||
list.add(new SVGLength(dynamic.asString()));
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -41,10 +41,10 @@ export default class Svg extends Shape {
|
|||||||
setNativeProps = props => {
|
setNativeProps = props => {
|
||||||
const { width, height } = props;
|
const { width, height } = props;
|
||||||
if (width) {
|
if (width) {
|
||||||
props.bbWidth = String(width);
|
props.bbWidth = width;
|
||||||
}
|
}
|
||||||
if (height) {
|
if (height) {
|
||||||
props.bbHeight = String(height);
|
props.bbHeight = height;
|
||||||
}
|
}
|
||||||
this.root.setNativeProps(props);
|
this.root.setNativeProps(props);
|
||||||
};
|
};
|
||||||
@@ -98,12 +98,10 @@ export default class Svg extends Shape {
|
|||||||
return (
|
return (
|
||||||
<NativeSvgView
|
<NativeSvgView
|
||||||
{...props}
|
{...props}
|
||||||
|
bbWidth={width}
|
||||||
|
bbHeight={height}
|
||||||
tintColor={color}
|
tintColor={color}
|
||||||
onLayout={onLayout}
|
onLayout={onLayout}
|
||||||
bbWidth={String(width)}
|
|
||||||
bbHeight={String(height)}
|
|
||||||
{...extractResponder(props, this)}
|
|
||||||
{...extractViewBox({ viewBox, preserveAspectRatio })}
|
|
||||||
ref={this.refMethod}
|
ref={this.refMethod}
|
||||||
style={[
|
style={[
|
||||||
styles.svg,
|
styles.svg,
|
||||||
@@ -113,6 +111,8 @@ export default class Svg extends Shape {
|
|||||||
},
|
},
|
||||||
dimensions,
|
dimensions,
|
||||||
]}
|
]}
|
||||||
|
{...extractResponder(props, this)}
|
||||||
|
{...extractViewBox({ viewBox, preserveAspectRatio })}
|
||||||
>
|
>
|
||||||
<G
|
<G
|
||||||
{...{
|
{...{
|
||||||
|
|||||||
@@ -60,8 +60,8 @@
|
|||||||
}
|
}
|
||||||
} else if ([node isKindOfClass:[RNSVGSvgView class]]) {
|
} else if ([node isKindOfClass:[RNSVGSvgView class]]) {
|
||||||
RNSVGSvgView* svgView = (RNSVGSvgView*)node;
|
RNSVGSvgView* svgView = (RNSVGSvgView*)node;
|
||||||
CGFloat width = [self relativeOnWidthString:svgView.bbWidth];
|
CGFloat width = [self relativeOnWidth:svgView.bbWidth];
|
||||||
CGFloat height = [self relativeOnHeightString:svgView.bbHeight];
|
CGFloat height = [self relativeOnHeight:svgView.bbHeight];
|
||||||
CGRect rect = CGRectMake(0, 0, width, height);
|
CGRect rect = CGRectMake(0, 0, width, height);
|
||||||
CGContextClipToRect(context, rect);
|
CGContextClipToRect(context, rect);
|
||||||
[svgView drawToContext:context withRect:rect];
|
[svgView drawToContext:context withRect:rect];
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
@interface RNSVGSvgView : UIView <RNSVGContainer>
|
@interface RNSVGSvgView : UIView <RNSVGContainer>
|
||||||
|
|
||||||
@property (nonatomic, strong) NSString *bbWidth;
|
@property (nonatomic, strong) RNSVGLength *bbWidth;
|
||||||
@property (nonatomic, strong) NSString *bbHeight;
|
@property (nonatomic, strong) RNSVGLength *bbHeight;
|
||||||
@property (nonatomic, assign) CGFloat minX;
|
@property (nonatomic, assign) CGFloat minX;
|
||||||
@property (nonatomic, assign) CGFloat minY;
|
@property (nonatomic, assign) CGFloat minY;
|
||||||
@property (nonatomic, assign) CGFloat vbWidth;
|
@property (nonatomic, assign) CGFloat vbWidth;
|
||||||
|
|||||||
@@ -113,9 +113,9 @@
|
|||||||
_vbHeight = vbHeight;
|
_vbHeight = vbHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setBbWidth:(NSString *)bbWidth
|
- (void)setBbWidth:(RNSVGLength *)bbWidth
|
||||||
{
|
{
|
||||||
if ([bbWidth isEqualToString:_bbWidth]) {
|
if ([bbWidth isEqualTo:_bbWidth]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,9 +124,9 @@
|
|||||||
_bbWidth = bbWidth;
|
_bbWidth = bbWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setBbHeight:(NSString *)bbHeight
|
- (void)setBbHeight:(RNSVGLength *)bbHeight
|
||||||
{
|
{
|
||||||
if ([bbHeight isEqualToString:_bbHeight]) {
|
if ([bbHeight isEqualTo:_bbHeight]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ RCT_EXPORT_MODULE()
|
|||||||
return [RNSVGSvgView new];
|
return [RNSVGSvgView new];
|
||||||
}
|
}
|
||||||
|
|
||||||
RCT_EXPORT_VIEW_PROPERTY(bbWidth, NSString)
|
RCT_EXPORT_VIEW_PROPERTY(bbWidth, RNSVGLength*)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(bbHeight, NSString)
|
RCT_EXPORT_VIEW_PROPERTY(bbHeight, RNSVGLength*)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(minX, CGFloat)
|
RCT_EXPORT_VIEW_PROPERTY(minX, CGFloat)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(minY, CGFloat)
|
RCT_EXPORT_VIEW_PROPERTY(minY, CGFloat)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(vbWidth, CGFloat)
|
RCT_EXPORT_VIEW_PROPERTY(vbWidth, CGFloat)
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ import extractOpacity from "./extractOpacity";
|
|||||||
import { idPattern } from "../util";
|
import { idPattern } from "../util";
|
||||||
|
|
||||||
export default function extractProps(prop, ref) {
|
export default function extractProps(prop, ref) {
|
||||||
const props = { ...prop.style, ...prop };
|
const style = prop.style;
|
||||||
|
const props = { ...(style && style.length ? Object.assign({}, ...style) : style), ...prop };
|
||||||
const { opacity, onLayout, id, clipPath, mask } = props;
|
const { opacity, onLayout, id, clipPath, mask } = props;
|
||||||
const styleProperties = [];
|
const styleProperties = [];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user