mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-03 07:06:04 +00:00
fix fillrule bug on Android
This commit is contained in:
@@ -57,25 +57,31 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
|
|||||||
private int mStrokeLinecap = CAP_ROUND;
|
private int mStrokeLinecap = CAP_ROUND;
|
||||||
private int mStrokeLinejoin = JOIN_ROUND;
|
private int mStrokeLinejoin = JOIN_ROUND;
|
||||||
private int mFillRule = FILL_RULE_NONZERO;
|
private int mFillRule = FILL_RULE_NONZERO;
|
||||||
|
private boolean mFillRuleSet;
|
||||||
|
private boolean mPathSet;
|
||||||
|
private float[] mShapePath;
|
||||||
private Point mPaint;
|
private Point mPaint;
|
||||||
|
|
||||||
@ReactProp(name = "d")
|
@ReactProp(name = "d")
|
||||||
public void setPath(@Nullable ReadableArray shapePath) {
|
public void setPath(@Nullable ReadableArray shapePath) {
|
||||||
float[] pathData = PropHelper.toFloatArray(shapePath);
|
mShapePath = PropHelper.toFloatArray(shapePath);
|
||||||
Path path = new Path();
|
mPathSet = true;
|
||||||
switch (mFillRule) {
|
setupPath();
|
||||||
case FILL_RULE_EVENODD:
|
markUpdated();
|
||||||
path.setFillType(Path.FillType.EVEN_ODD);
|
}
|
||||||
break;
|
|
||||||
case FILL_RULE_NONZERO:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new JSApplicationIllegalArgumentException(
|
|
||||||
"fillRule " + mFillRule + " unrecognized");
|
|
||||||
}
|
|
||||||
|
|
||||||
mPath = super.createPath(pathData, path);
|
@ReactProp(name = "fill")
|
||||||
|
public void setFill(@Nullable ReadableArray fillColors) {
|
||||||
|
mFillColor = PropHelper.toFloatArray(fillColors);
|
||||||
|
markUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ReactProp(name = "fillRule", defaultInt = FILL_RULE_NONZERO)
|
||||||
|
public void setFillRule(int fillRule) {
|
||||||
|
mFillRule = fillRule;
|
||||||
|
mFillRuleSet = true;
|
||||||
|
setupPath();
|
||||||
markUpdated();
|
markUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,20 +109,6 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
|
|||||||
markUpdated();
|
markUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ReactProp(name = "fill")
|
|
||||||
public void setFill(@Nullable ReadableArray fillColors) {
|
|
||||||
mFillColor = PropHelper.toFloatArray(fillColors);
|
|
||||||
markUpdated();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@ReactProp(name = "fillRule", defaultInt = FILL_RULE_NONZERO)
|
|
||||||
public void setFillRule(int fillRule) {
|
|
||||||
mFillRule = fillRule;
|
|
||||||
markUpdated();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ReactProp(name = "strokeWidth", defaultFloat = 1f)
|
@ReactProp(name = "strokeWidth", defaultFloat = 1f)
|
||||||
public void setStrokeWidth(float strokeWidth) {
|
public void setStrokeWidth(float strokeWidth) {
|
||||||
mStrokeWidth = strokeWidth;
|
mStrokeWidth = strokeWidth;
|
||||||
@@ -159,6 +151,26 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
|
|||||||
markUpdateSeen();
|
markUpdateSeen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupPath() {
|
||||||
|
// init path after both fillRule and path have been set
|
||||||
|
if (mFillRuleSet && mPathSet) {
|
||||||
|
Path path = new Path();
|
||||||
|
|
||||||
|
switch (mFillRule) {
|
||||||
|
case FILL_RULE_EVENODD:
|
||||||
|
path.setFillType(Path.FillType.EVEN_ODD);
|
||||||
|
break;
|
||||||
|
case FILL_RULE_NONZERO:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new JSApplicationIllegalArgumentException(
|
||||||
|
"fillRule " + mFillRule + " unrecognized");
|
||||||
|
}
|
||||||
|
|
||||||
|
mPath = super.createPath(mShapePath, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sorting stops and stopsColors from array
|
* sorting stops and stopsColors from array
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user